Merge "Do not notify onOpNoted if less than 5s"
diff --git a/Android.bp b/Android.bp
index e7a3efc..611d4ba 100644
--- a/Android.bp
+++ b/Android.bp
@@ -390,7 +390,7 @@
filegroup {
name: "framework-jarjar-rules",
- srcs: ["jarjar_rules_hidl.txt"],
+ srcs: ["framework_jarjar_rules.txt"],
}
filegroup {
@@ -467,6 +467,7 @@
srcs: [":framework-all-sources"],
installable: false,
libs: ["app-compat-annotations"],
+ static_libs: ["exoplayer2-core"]
}
java_library {
@@ -479,6 +480,9 @@
"unsupportedappusage-annotation-processor",
"compat-changeid-annotation-processor",
],
+ static_libs: [
+ "exoplayer2-core"
+ ]
}
platform_compat_config {
diff --git a/apex/blobstore/framework/java/android/app/blob/BlobStoreManagerFrameworkInitializer.java b/apex/blobstore/framework/java/android/app/blob/BlobStoreManagerFrameworkInitializer.java
index 6e6d6ae..56c419a 100644
--- a/apex/blobstore/framework/java/android/app/blob/BlobStoreManagerFrameworkInitializer.java
+++ b/apex/blobstore/framework/java/android/app/blob/BlobStoreManagerFrameworkInitializer.java
@@ -26,7 +26,7 @@
public class BlobStoreManagerFrameworkInitializer {
/** Register the BlobStoreManager wrapper class */
public static void initialize() {
- SystemServiceRegistry.registerCachedService(
+ SystemServiceRegistry.registerContextAwareService(
Context.BLOB_STORE_SERVICE, BlobStoreManager.class,
(context, service) ->
new BlobStoreManager(context, IBlobStoreManager.Stub.asInterface(service)));
diff --git a/apex/jobscheduler/framework/java/android/app/DeviceIdleFrameworkInitializer.java b/apex/jobscheduler/framework/java/android/app/DeviceIdleFrameworkInitializer.java
deleted file mode 100644
index c264531..0000000
--- a/apex/jobscheduler/framework/java/android/app/DeviceIdleFrameworkInitializer.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2019 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.content.Context;
-import android.os.DeviceIdleManager;
-import android.os.IDeviceIdleController;
-
-/**
- * @hide
- */
-public class DeviceIdleFrameworkInitializer {
- private static IDeviceIdleController sIDeviceIdleController;
-
- public static void initialize() {
- SystemServiceRegistry.registerCachedService(
- Context.DEVICE_IDLE_CONTROLLER, DeviceIdleManager.class,
- (context, b) -> new DeviceIdleManager(
- context, IDeviceIdleController.Stub.asInterface(b)));
- }
-}
diff --git a/apex/jobscheduler/framework/java/android/app/job/JobSchedulerFrameworkInitializer.java b/apex/jobscheduler/framework/java/android/app/job/JobSchedulerFrameworkInitializer.java
index 175e5f2..f3ec5e5 100644
--- a/apex/jobscheduler/framework/java/android/app/job/JobSchedulerFrameworkInitializer.java
+++ b/apex/jobscheduler/framework/java/android/app/job/JobSchedulerFrameworkInitializer.java
@@ -19,14 +19,34 @@
import android.app.JobSchedulerImpl;
import android.app.SystemServiceRegistry;
import android.content.Context;
+import android.os.DeviceIdleManager;
+import android.os.IDeviceIdleController;
/**
+ * Class holding initialization code for the job scheduler module.
+ *
* @hide
*/
public class JobSchedulerFrameworkInitializer {
- public static void initialize() {
+ private JobSchedulerFrameworkInitializer() {
+ }
+
+ /**
+ * Called by {@link SystemServiceRegistry}'s static initializer and registers
+ * {@link JobScheduler} and other services to {@link Context}, so
+ * {@link Context#getSystemService} can return them.
+ *
+ * <p>If this is called from other places, it throws a {@link IllegalStateException).
+ *
+ * TODO Make it a system API
+ */
+ public static void registerServiceWrappers() {
SystemServiceRegistry.registerStaticService(
Context.JOB_SCHEDULER_SERVICE, JobScheduler.class,
(b) -> new JobSchedulerImpl(IJobScheduler.Stub.asInterface(b)));
+ SystemServiceRegistry.registerContextAwareService(
+ Context.DEVICE_IDLE_CONTROLLER, DeviceIdleManager.class,
+ (context, b) -> new DeviceIdleManager(
+ context, IDeviceIdleController.Stub.asInterface(b)));
}
}
diff --git a/api/current.txt b/api/current.txt
index 61013e8..8c27430 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -2035,7 +2035,7 @@
field public static final int fingerprint_icon_content_description = 17039384; // 0x1040018
field public static final int httpErrorBadUrl = 17039367; // 0x1040007
field public static final int httpErrorUnsupportedScheme = 17039368; // 0x1040008
- field public static final int no = 17039369; // 0x1040009
+ field @Deprecated public static final int no = 17039369; // 0x1040009
field public static final int ok = 17039370; // 0x104000a
field public static final int paste = 17039371; // 0x104000b
field public static final int paste_as_plain_text = 17039385; // 0x1040019
@@ -2045,7 +2045,7 @@
field public static final int status_bar_notification_info_overflow = 17039383; // 0x1040017
field public static final int unknownName = 17039374; // 0x104000e
field public static final int untitled = 17039375; // 0x104000f
- field public static final int yes = 17039379; // 0x1040013
+ field @Deprecated public static final int yes = 17039379; // 0x1040013
}
public static final class R.style {
@@ -11524,7 +11524,8 @@
public class PackageInstaller {
method public void abandonSession(int);
method public int createSession(@NonNull android.content.pm.PackageInstaller.SessionParams) throws java.io.IOException;
- method @Nullable public android.content.pm.PackageInstaller.SessionInfo getActiveStagedSession();
+ method @Deprecated @Nullable public android.content.pm.PackageInstaller.SessionInfo getActiveStagedSession();
+ method @NonNull public java.util.List<android.content.pm.PackageInstaller.SessionInfo> getActiveStagedSessions();
method @NonNull public java.util.List<android.content.pm.PackageInstaller.SessionInfo> getAllSessions();
method @NonNull public java.util.List<android.content.pm.PackageInstaller.SessionInfo> getMySessions();
method @Nullable public android.content.pm.PackageInstaller.SessionInfo getSessionInfo(int);
@@ -11609,11 +11610,13 @@
method @NonNull public String getStagedSessionErrorMessage();
method public long getUpdatedMillis();
method @NonNull public android.os.UserHandle getUser();
+ method public boolean hasParentSessionId();
method public boolean isActive();
method public boolean isCommitted();
method public boolean isMultiPackage();
method public boolean isSealed();
method public boolean isStaged();
+ method public boolean isStagedSessionActive();
method public boolean isStagedSessionApplied();
method public boolean isStagedSessionFailed();
method public boolean isStagedSessionReady();
@@ -30526,6 +30529,9 @@
field public static final int GROUP_OWNER_BAND_2GHZ = 1; // 0x1
field public static final int GROUP_OWNER_BAND_5GHZ = 2; // 0x2
field public static final int GROUP_OWNER_BAND_AUTO = 0; // 0x0
+ field public static final int GROUP_OWNER_INTENT_AUTO = -1; // 0xffffffff
+ field public static final int GROUP_OWNER_INTENT_MAX = 15; // 0xf
+ field public static final int GROUP_OWNER_INTENT_MIN = 0; // 0x0
field public String deviceAddress;
field public int groupOwnerIntent;
field public android.net.wifi.WpsInfo wps;
@@ -30546,6 +30552,7 @@
ctor public WifiP2pDevice();
ctor public WifiP2pDevice(android.net.wifi.p2p.WifiP2pDevice);
method public int describeContents();
+ method @Nullable public android.net.wifi.p2p.WifiP2pWfdInfo getWfdInfo();
method public boolean isGroupOwner();
method public boolean isServiceDiscoveryCapable();
method public boolean wpsDisplaySupported();
@@ -30582,6 +30589,7 @@
method public java.util.Collection<android.net.wifi.p2p.WifiP2pDevice> getClientList();
method public int getFrequency();
method public String getInterface();
+ method public int getNetworkId();
method public String getNetworkName();
method public android.net.wifi.p2p.WifiP2pDevice getOwner();
method public String getPassphrase();
@@ -30706,6 +30714,28 @@
method public void onUpnpServiceAvailable(java.util.List<java.lang.String>, android.net.wifi.p2p.WifiP2pDevice);
}
+ public final class WifiP2pWfdInfo implements android.os.Parcelable {
+ ctor public WifiP2pWfdInfo();
+ ctor public WifiP2pWfdInfo(@Nullable android.net.wifi.p2p.WifiP2pWfdInfo);
+ method public int describeContents();
+ method public int getControlPort();
+ method public int getDeviceType();
+ method public int getMaxThroughput();
+ method public boolean isSessionAvailable();
+ method public boolean isWfdEnabled();
+ method public void setControlPort(int);
+ method public boolean setDeviceType(int);
+ method public void setMaxThroughput(int);
+ method public void setSessionAvailable(boolean);
+ method public void setWfdEnabled(boolean);
+ method public void writeToParcel(@NonNull android.os.Parcel, int);
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pWfdInfo> CREATOR;
+ field public static final int DEVICE_TYPE_PRIMARY_SINK = 1; // 0x1
+ field public static final int DEVICE_TYPE_SECONDARY_SINK = 2; // 0x2
+ field public static final int DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK = 3; // 0x3
+ field public static final int DEVICE_TYPE_WFD_SOURCE = 0; // 0x0
+ }
+
}
package android.net.wifi.p2p.nsd {
diff --git a/api/system-current.txt b/api/system-current.txt
index aed13b7..412e095 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -57,6 +57,7 @@
field public static final String CHANGE_DEVICE_IDLE_TEMP_WHITELIST = "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST";
field public static final String CLEAR_APP_USER_DATA = "android.permission.CLEAR_APP_USER_DATA";
field public static final String CONFIGURE_DISPLAY_BRIGHTNESS = "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS";
+ field public static final String CONFIGURE_WIFI_DISPLAY = "android.permission.CONFIGURE_WIFI_DISPLAY";
field public static final String CONNECTIVITY_INTERNAL = "android.permission.CONNECTIVITY_INTERNAL";
field public static final String CONNECTIVITY_USE_RESTRICTED_NETWORKS = "android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS";
field public static final String CONTROL_DISPLAY_COLOR_TRANSFORMS = "android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS";
@@ -125,8 +126,10 @@
field public static final String NETWORK_CARRIER_PROVISIONING = "android.permission.NETWORK_CARRIER_PROVISIONING";
field public static final String NETWORK_MANAGED_PROVISIONING = "android.permission.NETWORK_MANAGED_PROVISIONING";
field public static final String NETWORK_SCAN = "android.permission.NETWORK_SCAN";
+ field public static final String NETWORK_SETTINGS = "android.permission.NETWORK_SETTINGS";
field public static final String NETWORK_SETUP_WIZARD = "android.permission.NETWORK_SETUP_WIZARD";
field public static final String NETWORK_SIGNAL_STRENGTH_WAKEUP = "android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP";
+ field public static final String NETWORK_STACK = "android.permission.NETWORK_STACK";
field public static final String NOTIFICATION_DURING_SETUP = "android.permission.NOTIFICATION_DURING_SETUP";
field public static final String NOTIFY_TV_INPUTS = "android.permission.NOTIFY_TV_INPUTS";
field public static final String OBSERVE_APP_USAGE = "android.permission.OBSERVE_APP_USAGE";
@@ -2001,6 +2004,7 @@
method @Nullable public android.hardware.display.BrightnessCorrection getCorrectionByCategory(int);
method @Nullable public android.hardware.display.BrightnessCorrection getCorrectionByPackageName(@NonNull String);
method public android.util.Pair<float[],float[]> getCurve();
+ method public boolean shouldCollectColorSamples();
method public void writeToParcel(android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessConfiguration> CREATOR;
}
@@ -2013,6 +2017,7 @@
method public int getMaxCorrectionsByCategory();
method public int getMaxCorrectionsByPackageName();
method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setDescription(@Nullable String);
+ method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setShouldCollectColorSamples(boolean);
}
public final class BrightnessCorrection implements android.os.Parcelable {
@@ -4121,8 +4126,8 @@
method @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void getLatestTetheringEntitlementResult(int, boolean, @NonNull java.util.concurrent.Executor, @NonNull android.net.ConnectivityManager.OnTetheringEntitlementResultListener);
method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public boolean isTetheringSupported();
method @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void registerTetheringEventCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.ConnectivityManager.OnTetheringEventCallback);
- method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void setAirplaneMode(boolean);
- method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, "android.permission.NETWORK_STACK"}) public boolean shouldAvoidBadWifi();
+ method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void setAirplaneMode(boolean);
+ method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public boolean shouldAvoidBadWifi();
method @RequiresPermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) public void startCaptivePortalApp(@NonNull android.net.Network, @NonNull android.os.Bundle);
method @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void startTethering(int, boolean, android.net.ConnectivityManager.OnStartTetheringCallback);
method @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void startTethering(int, boolean, android.net.ConnectivityManager.OnStartTetheringCallback, android.os.Handler);
@@ -4830,38 +4835,62 @@
public class WifiManager {
method @RequiresPermission("android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE") public void addOnWifiUsabilityStatsListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.OnWifiUsabilityStatsListener);
- method @RequiresPermission("android.permission.NETWORK_SETTINGS") public void allowAutojoin(int, boolean);
- method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void connect(@NonNull android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiManager.ActionListener);
- method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void connect(int, @Nullable android.net.wifi.WifiManager.ActionListener);
- method @Deprecated @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void disable(int, @Nullable android.net.wifi.WifiManager.ActionListener);
- method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void forget(int, @Nullable android.net.wifi.WifiManager.ActionListener);
- method @NonNull @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.List<android.util.Pair<android.net.wifi.WifiConfiguration,java.util.Map<java.lang.Integer,java.util.List<android.net.wifi.ScanResult>>>> getAllMatchingWifiConfigs(@NonNull java.util.List<android.net.wifi.ScanResult>);
- method @NonNull @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.Map<android.net.wifi.hotspot2.OsuProvider,java.util.List<android.net.wifi.ScanResult>> getMatchingOsuProviders(@Nullable java.util.List<android.net.wifi.ScanResult>);
- method @NonNull @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.Map<android.net.wifi.hotspot2.OsuProvider,android.net.wifi.hotspot2.PasspointConfiguration> getMatchingPasspointConfigsForOsuProviders(@NonNull java.util.Set<android.net.wifi.hotspot2.OsuProvider>);
+ method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void allowAutojoin(int, boolean);
+ method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void connect(@NonNull android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiManager.ActionListener);
+ method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void connect(int, @Nullable android.net.wifi.WifiManager.ActionListener);
+ method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void disable(int, @Nullable android.net.wifi.WifiManager.ActionListener);
+ method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK}) public void disableEphemeralNetwork(@NonNull String);
+ method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void enableVerboseLogging(int);
+ method @RequiresPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL) public void factoryReset();
+ method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void forget(int, @Nullable android.net.wifi.WifiManager.ActionListener);
+ method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.List<android.util.Pair<android.net.wifi.WifiConfiguration,java.util.Map<java.lang.Integer,java.util.List<android.net.wifi.ScanResult>>>> getAllMatchingWifiConfigs(@NonNull java.util.List<android.net.wifi.ScanResult>);
+ method @Nullable @RequiresPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL) public String getCountryCode();
+ method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public android.net.Network getCurrentNetwork();
+ method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public String[] getFactoryMacAddresses();
+ method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.Map<android.net.wifi.hotspot2.OsuProvider,java.util.List<android.net.wifi.ScanResult>> getMatchingOsuProviders(@Nullable java.util.List<android.net.wifi.ScanResult>);
+ method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.Map<android.net.wifi.hotspot2.OsuProvider,android.net.wifi.hotspot2.PasspointConfiguration> getMatchingPasspointConfigsForOsuProviders(@NonNull java.util.Set<android.net.wifi.hotspot2.OsuProvider>);
method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_WIFI_STATE, android.Manifest.permission.READ_WIFI_CREDENTIAL}) public java.util.List<android.net.wifi.WifiConfiguration> getPrivilegedConfiguredNetworks();
+ method public int getVerboseLoggingLevel();
method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public android.net.wifi.WifiConfiguration getWifiApConfiguration();
method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public int getWifiApState();
method public boolean isApMacRandomizationSupported();
method public boolean isConnectedMacRandomizationSupported();
method @Deprecated public boolean isDeviceToDeviceRttSupported();
+ method public boolean isDualBandSupported();
+ method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public boolean isDualModeSupported();
method public boolean isPortableHotspotSupported();
method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public boolean isWifiApEnabled();
method public boolean isWifiScannerSupported();
- method @RequiresPermission("android.permission.NETWORK_SETTINGS") public void registerSoftApCallback(@Nullable java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.SoftApCallback);
+ method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void registerNetworkRequestMatchCallback(@NonNull android.net.wifi.WifiManager.NetworkRequestMatchCallback);
+ method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void registerNetworkRequestMatchCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.NetworkRequestMatchCallback);
+ method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void registerSoftApCallback(@NonNull android.net.wifi.WifiManager.SoftApCallback);
+ method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void registerSoftApCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.SoftApCallback);
+ method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void registerTrafficStateCallback(@NonNull android.net.wifi.WifiManager.TrafficStateCallback);
+ method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void registerTrafficStateCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.TrafficStateCallback);
method @RequiresPermission("android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE") public void removeOnWifiUsabilityStatsListener(@NonNull android.net.wifi.WifiManager.OnWifiUsabilityStatsListener);
- method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void save(@NonNull android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiManager.ActionListener);
+ method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void restoreBackupData(@NonNull byte[]);
+ method @Deprecated @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void restoreSupplicantBackupData(@NonNull byte[], @NonNull byte[]);
+ method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public byte[] retrieveBackupData();
+ method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void save(@NonNull android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiManager.ActionListener);
method @RequiresPermission("android.permission.WIFI_SET_DEVICE_MOBILITY_STATE") public void setDeviceMobilityState(int);
method @RequiresPermission(android.Manifest.permission.CHANGE_WIFI_STATE) public boolean setWifiApConfiguration(android.net.wifi.WifiConfiguration);
- method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startEasyConnectAsConfiguratorInitiator(@NonNull String, int, int, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.EasyConnectStatusCallback);
- method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startEasyConnectAsEnrolleeInitiator(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.EasyConnectStatusCallback);
- method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startLocalOnlyHotspot(@NonNull android.net.wifi.SoftApConfiguration, @Nullable java.util.concurrent.Executor, @Nullable android.net.wifi.WifiManager.LocalOnlyHotspotCallback);
+ method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startEasyConnectAsConfiguratorInitiator(@NonNull String, int, int, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.EasyConnectStatusCallback);
+ method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startEasyConnectAsEnrolleeInitiator(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.EasyConnectStatusCallback);
+ method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startLocalOnlyHotspot(@NonNull android.net.wifi.SoftApConfiguration, @Nullable java.util.concurrent.Executor, @Nullable android.net.wifi.WifiManager.LocalOnlyHotspotCallback);
method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public boolean startScan(android.os.WorkSource);
- method @RequiresPermission(anyOf={"android.permission.NETWORK_STACK", android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public boolean startSoftAp(@Nullable android.net.wifi.WifiConfiguration);
- method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startSubscriptionProvisioning(@NonNull android.net.wifi.hotspot2.OsuProvider, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.hotspot2.ProvisioningCallback);
- method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void stopEasyConnectSession();
- method @RequiresPermission(anyOf={"android.permission.NETWORK_STACK", android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public boolean stopSoftAp();
- method @RequiresPermission(anyOf={"android.permission.NETWORK_STACK", android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void updateInterfaceIpState(@Nullable String, int);
+ method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public boolean startSoftAp(@Nullable android.net.wifi.WifiConfiguration);
+ method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startSubscriptionProvisioning(@NonNull android.net.wifi.hotspot2.OsuProvider, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.hotspot2.ProvisioningCallback);
+ method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void stopEasyConnectSession();
+ method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public boolean stopSoftAp();
+ method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void unregisterNetworkRequestMatchCallback(@NonNull android.net.wifi.WifiManager.NetworkRequestMatchCallback);
+ method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void unregisterSoftApCallback(@NonNull android.net.wifi.WifiManager.SoftApCallback);
+ method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void unregisterTrafficStateCallback(@NonNull android.net.wifi.WifiManager.TrafficStateCallback);
+ method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void updateInterfaceIpState(@Nullable String, int);
method @RequiresPermission("android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE") public void updateWifiUsabilityScore(int, int, int);
+ field public static final String ACTION_LINK_CONFIGURATION_CHANGED = "android.net.wifi.LINK_CONFIGURATION_CHANGED";
+ field public static final String ACTION_PASSPOINT_LAUNCH_OSU_VIEW = "android.net.wifi.action.PASSPOINT_LAUNCH_OSU_VIEW";
+ field public static final String ACTION_REQUEST_DISABLE = "android.net.wifi.action.REQUEST_DISABLE";
+ field public static final String ACTION_REQUEST_ENABLE = "android.net.wifi.action.REQUEST_ENABLE";
field public static final int CHANGE_REASON_ADDED = 0; // 0x0
field public static final int CHANGE_REASON_CONFIG_CHANGE = 2; // 0x2
field public static final int CHANGE_REASON_REMOVED = 1; // 0x1
@@ -4873,8 +4902,11 @@
field public static final int EASY_CONNECT_NETWORK_ROLE_AP = 1; // 0x1
field public static final int EASY_CONNECT_NETWORK_ROLE_STA = 0; // 0x0
field public static final String EXTRA_CHANGE_REASON = "changeReason";
+ field public static final String EXTRA_LINK_PROPERTIES = "android.net.wifi.extra.LINK_PROPERTIES";
field public static final String EXTRA_MULTIPLE_NETWORKS_CHANGED = "multipleChanges";
+ field public static final String EXTRA_OSU_NETWORK = "android.net.wifi.extra.OSU_NETWORK";
field public static final String EXTRA_PREVIOUS_WIFI_AP_STATE = "previous_wifi_state";
+ field public static final String EXTRA_URL = "android.net.wifi.extra.URL";
field public static final String EXTRA_WIFI_AP_INTERFACE_NAME = "android.net.wifi.extra.WIFI_AP_INTERFACE_NAME";
field public static final String EXTRA_WIFI_AP_MODE = "android.net.wifi.extra.WIFI_AP_MODE";
field public static final String EXTRA_WIFI_AP_STATE = "wifi_state";
@@ -4887,6 +4919,8 @@
field public static final int IFACE_IP_MODE_UNSPECIFIED = -1; // 0xffffffff
field public static final int PASSPOINT_HOME_NETWORK = 0; // 0x0
field public static final int PASSPOINT_ROAMING_NETWORK = 1; // 0x1
+ field public static final int SAP_START_FAILURE_GENERAL = 0; // 0x0
+ field public static final int SAP_START_FAILURE_NO_CHANNEL = 1; // 0x1
field public static final String WIFI_AP_STATE_CHANGED_ACTION = "android.net.wifi.WIFI_AP_STATE_CHANGED";
field public static final int WIFI_AP_STATE_DISABLED = 11; // 0xb
field public static final int WIFI_AP_STATE_DISABLING = 10; // 0xa
@@ -4903,14 +4937,35 @@
method public void onSuccess();
}
+ public static interface WifiManager.NetworkRequestMatchCallback {
+ method public default void onAbort();
+ method public default void onMatch(@NonNull java.util.List<android.net.wifi.ScanResult>);
+ method public default void onUserSelectionCallbackRegistration(@NonNull android.net.wifi.WifiManager.NetworkRequestUserSelectionCallback);
+ method public default void onUserSelectionConnectFailure(@NonNull android.net.wifi.WifiConfiguration);
+ method public default void onUserSelectionConnectSuccess(@NonNull android.net.wifi.WifiConfiguration);
+ }
+
+ public static interface WifiManager.NetworkRequestUserSelectionCallback {
+ method public default void reject();
+ method public default void select(@NonNull android.net.wifi.WifiConfiguration);
+ }
+
public static interface WifiManager.OnWifiUsabilityStatsListener {
method public void onWifiUsabilityStats(int, boolean, @NonNull android.net.wifi.WifiUsabilityStatsEntry);
}
public static interface WifiManager.SoftApCallback {
- method public void onConnectedClientsChanged(@NonNull java.util.List<android.net.wifi.WifiClient>);
+ method public default void onConnectedClientsChanged(@NonNull java.util.List<android.net.wifi.WifiClient>);
method public default void onInfoChanged(@NonNull android.net.wifi.SoftApInfo);
- method public void onStateChanged(int, int);
+ method public default void onStateChanged(int, int);
+ }
+
+ public static interface WifiManager.TrafficStateCallback {
+ method public void onStateChanged(int);
+ field public static final int DATA_ACTIVITY_IN = 1; // 0x1
+ field public static final int DATA_ACTIVITY_INOUT = 3; // 0x3
+ field public static final int DATA_ACTIVITY_NONE = 0; // 0x0
+ field public static final int DATA_ACTIVITY_OUT = 2; // 0x2
}
public class WifiNetworkConnectionStatistics implements android.os.Parcelable {
@@ -4933,6 +4988,7 @@
method @Deprecated public void configureWifiChange(android.net.wifi.WifiScanner.WifiChangeSettings);
method @NonNull @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public java.util.List<java.lang.Integer> getAvailableChannels(int);
method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public boolean getScanResults();
+ method @NonNull @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public java.util.List<android.net.wifi.ScanResult> getSingleScanResults();
method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void startBackgroundScan(android.net.wifi.WifiScanner.ScanSettings, android.net.wifi.WifiScanner.ScanListener);
method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void startBackgroundScan(android.net.wifi.WifiScanner.ScanSettings, android.net.wifi.WifiScanner.ScanListener, android.os.WorkSource);
method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void startScan(android.net.wifi.WifiScanner.ScanSettings, android.net.wifi.WifiScanner.ScanListener);
@@ -5152,6 +5208,36 @@
}
+package android.net.wifi.p2p {
+
+ public final class WifiP2pGroupList implements android.os.Parcelable {
+ method public int describeContents();
+ method @NonNull public java.util.Collection<android.net.wifi.p2p.WifiP2pGroup> getGroupList();
+ method public void writeToParcel(@NonNull android.os.Parcel, int);
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pGroupList> CREATOR;
+ }
+
+ public class WifiP2pManager {
+ method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void deletePersistentGroup(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, int, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+ method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void factoryReset(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+ method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void listen(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, boolean, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+ method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.READ_WIFI_CREDENTIAL}) public void requestPersistentGroupInfo(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @Nullable android.net.wifi.p2p.WifiP2pManager.PersistentGroupInfoListener);
+ method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void setDeviceName(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @NonNull String, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+ method @RequiresPermission(allOf={android.Manifest.permission.CONNECTIVITY_INTERNAL, android.Manifest.permission.CONFIGURE_WIFI_DISPLAY}) public void setMiracastMode(int);
+ method @RequiresPermission(android.Manifest.permission.CONFIGURE_WIFI_DISPLAY) public void setWfdInfo(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @NonNull android.net.wifi.p2p.WifiP2pWfdInfo, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+ method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void setWifiP2pChannels(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, int, int, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+ field public static final String ACTION_WIFI_P2P_PERSISTENT_GROUPS_CHANGED = "android.net.wifi.p2p.action.WIFI_P2P_PERSISTENT_GROUPS_CHANGED";
+ field public static final int MIRACAST_DISABLED = 0; // 0x0
+ field public static final int MIRACAST_SINK = 2; // 0x2
+ field public static final int MIRACAST_SOURCE = 1; // 0x1
+ }
+
+ public static interface WifiP2pManager.PersistentGroupInfoListener {
+ method public void onPersistentGroupInfoAvailable(@NonNull android.net.wifi.p2p.WifiP2pGroupList);
+ }
+
+}
+
package android.net.wifi.rtt {
public static final class RangingRequest.Builder {
diff --git a/api/system-lint-baseline.txt b/api/system-lint-baseline.txt
index 21526d0..7eb5443 100644
--- a/api/system-lint-baseline.txt
+++ b/api/system-lint-baseline.txt
@@ -1,12 +1,30 @@
// Baseline format: 1.0
ActionValue: android.location.Location#EXTRA_NO_GPS_LOCATION:
+ActionValue: android.net.wifi.WifiManager#ACTION_LINK_CONFIGURATION_CHANGED:
+ Inconsistent action value; expected `android.net.wifi.action.LINK_CONFIGURATION_CHANGED`, was `android.net.wifi.LINK_CONFIGURATION_CHANGED`
ArrayReturn: android.view.contentcapture.ViewNode#getAutofillOptions():
+ExecutorRegistration: android.net.wifi.p2p.WifiP2pManager#deletePersistentGroup(android.net.wifi.p2p.WifiP2pManager.Channel, int, android.net.wifi.p2p.WifiP2pManager.ActionListener):
+ Registration methods should have overload that accepts delivery Executor: `deletePersistentGroup`
+ExecutorRegistration: android.net.wifi.p2p.WifiP2pManager#factoryReset(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener):
+ Registration methods should have overload that accepts delivery Executor: `factoryReset`
+ExecutorRegistration: android.net.wifi.p2p.WifiP2pManager#listen(android.net.wifi.p2p.WifiP2pManager.Channel, boolean, android.net.wifi.p2p.WifiP2pManager.ActionListener):
+ Registration methods should have overload that accepts delivery Executor: `listen`
+ExecutorRegistration: android.net.wifi.p2p.WifiP2pManager#requestPersistentGroupInfo(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.PersistentGroupInfoListener):
+ Registration methods should have overload that accepts delivery Executor: `requestPersistentGroupInfo`
+ExecutorRegistration: android.net.wifi.p2p.WifiP2pManager#setDeviceName(android.net.wifi.p2p.WifiP2pManager.Channel, String, android.net.wifi.p2p.WifiP2pManager.ActionListener):
+ Registration methods should have overload that accepts delivery Executor: `setDeviceName`
+ExecutorRegistration: android.net.wifi.p2p.WifiP2pManager#setWfdInfo(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pWfdInfo, android.net.wifi.p2p.WifiP2pManager.ActionListener):
+ Registration methods should have overload that accepts delivery Executor: `setWfdInfo`
+ExecutorRegistration: android.net.wifi.p2p.WifiP2pManager#setWifiP2pChannels(android.net.wifi.p2p.WifiP2pManager.Channel, int, int, android.net.wifi.p2p.WifiP2pManager.ActionListener):
+ Registration methods should have overload that accepts delivery Executor: `setWifiP2pChannels`
+
+
GenericException: android.app.prediction.AppPredictor#finalize():
GenericException: android.hardware.location.ContextHubClient#finalize():
@@ -17,8 +35,7 @@
-InterfaceConstant: android.service.storage.ExternalStorageService#SERVICE_INTERFACE:
-
+
KotlinKeyword: android.app.Notification#when:
@@ -198,9 +215,9 @@
SamShouldBeLast: android.app.AlarmManager#setWindow(int, long, long, String, android.app.AlarmManager.OnAlarmListener, android.os.Handler):
SamShouldBeLast: android.app.WallpaperInfo#dump(android.util.Printer, String):
-
+
SamShouldBeLast: android.app.admin.DevicePolicyManager#installSystemUpdate(android.content.ComponentName, android.net.Uri, java.util.concurrent.Executor, android.app.admin.DevicePolicyManager.InstallSystemUpdateCallback):
-
+
SamShouldBeLast: android.content.Context#bindIsolatedService(android.content.Intent, int, String, java.util.concurrent.Executor, android.content.ServiceConnection):
SamShouldBeLast: android.content.Context#bindService(android.content.Intent, int, java.util.concurrent.Executor, android.content.ServiceConnection):
@@ -332,7 +349,7 @@
SamShouldBeLast: android.telephony.TelephonyManager#setPreferredOpportunisticDataSubscription(int, boolean, java.util.concurrent.Executor, java.util.function.Consumer<java.lang.Integer>):
SamShouldBeLast: android.telephony.TelephonyManager#updateAvailableNetworks(java.util.List<android.telephony.AvailableNetworkInfo>, java.util.concurrent.Executor, java.util.function.Consumer<java.lang.Integer>):
-
+
SamShouldBeLast: android.view.View#postDelayed(Runnable, long):
SamShouldBeLast: android.view.View#postOnAnimationDelayed(Runnable, long):
diff --git a/api/test-current.txt b/api/test-current.txt
index 44f736c..c6b02b9 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -1018,6 +1018,7 @@
method @Nullable public android.hardware.display.BrightnessCorrection getCorrectionByCategory(int);
method @Nullable public android.hardware.display.BrightnessCorrection getCorrectionByPackageName(@NonNull String);
method public android.util.Pair<float[],float[]> getCurve();
+ method public boolean shouldCollectColorSamples();
method public void writeToParcel(android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessConfiguration> CREATOR;
}
@@ -1030,6 +1031,7 @@
method public int getMaxCorrectionsByCategory();
method public int getMaxCorrectionsByPackageName();
method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setDescription(@Nullable String);
+ method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setShouldCollectColorSamples(boolean);
}
public final class BrightnessCorrection implements android.os.Parcelable {
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index ac8b604..9aca223 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -44,6 +44,8 @@
void cancelAllNotifications(String pkg, int userId);
void clearData(String pkg, int uid, boolean fromApp);
+ // TODO: Replace parameter (ITransientNotification callback) with (CharSequence text)
+ void enqueueTextToast(String pkg, ITransientNotification callback, int duration, int displayId);
@UnsupportedAppUsage
void enqueueToast(String pkg, ITransientNotification callback, int duration, int displayId);
@UnsupportedAppUsage
diff --git a/core/java/android/app/IWallpaperManager.aidl b/core/java/android/app/IWallpaperManager.aidl
index 7f5350d..4cb8d93 100644
--- a/core/java/android/app/IWallpaperManager.aidl
+++ b/core/java/android/app/IWallpaperManager.aidl
@@ -58,14 +58,22 @@
@UnsupportedAppUsage
void setWallpaperComponent(in ComponentName name);
+
/**
- * Get the wallpaper for a given user.
+ * @deprecated Use {@link #getWallpaperWithFeature(String, IWallpaperManagerCallback, int,
+ * Bundle, int)}
*/
@UnsupportedAppUsage
ParcelFileDescriptor getWallpaper(String callingPkg, IWallpaperManagerCallback cb, int which,
out Bundle outParams, int userId);
/**
+ * Get the wallpaper for a given user.
+ */
+ ParcelFileDescriptor getWallpaperWithFeature(String callingPkg, String callingFeatureId,
+ IWallpaperManagerCallback cb, int which, out Bundle outParams, int userId);
+
+ /**
* Retrieve the given user's current wallpaper ID of the given kind.
*/
int getWallpaperIdForUser(int which, int userId);
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java
index 4fb2196..69c174a 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -18,6 +18,7 @@
import android.accounts.AccountManager;
import android.accounts.IAccountManager;
+import android.annotation.NonNull;
import android.app.ContextImpl.ServiceInitializationState;
import android.app.admin.DevicePolicyManager;
import android.app.admin.IDevicePolicyManager;
@@ -67,7 +68,7 @@
import android.hardware.SerialManager;
import android.hardware.SystemSensorManager;
import android.hardware.biometrics.BiometricManager;
-import android.hardware.biometrics.IBiometricService;
+import android.hardware.biometrics.IAuthService;
import android.hardware.camera2.CameraManager;
import android.hardware.display.ColorDisplayManager;
import android.hardware.display.DisplayManager;
@@ -194,10 +195,9 @@
import com.android.internal.net.INetworkWatchlistManager;
import com.android.internal.os.IDropBoxManagerService;
import com.android.internal.policy.PhoneLayoutInflater;
+import com.android.internal.util.Preconditions;
import java.util.Map;
-import java.util.function.BiFunction;
-import java.util.function.Function;
/**
* Manages all of the system services that can be returned by {@link Context#getSystemService}.
@@ -216,6 +216,8 @@
new ArrayMap<String, ServiceFetcher<?>>();
private static int sServiceCacheSize;
+ private static volatile boolean sInitializing;
+
// Not instantiable.
private SystemServiceRegistry() { }
@@ -945,9 +947,9 @@
throws ServiceNotFoundException {
if (BiometricManager.hasBiometrics(ctx)) {
final IBinder binder =
- ServiceManager.getServiceOrThrow(Context.BIOMETRIC_SERVICE);
- final IBiometricService service =
- IBiometricService.Stub.asInterface(binder);
+ ServiceManager.getServiceOrThrow(Context.AUTH_SERVICE);
+ final IAuthService service =
+ IAuthService.Stub.asInterface(binder);
return new BiometricManager(ctx.getOuterContext(), service);
} else {
// Allow access to the manager when service is null. This saves memory
@@ -1292,14 +1294,28 @@
}});
//CHECKSTYLE:ON IndentationCheck
- JobSchedulerFrameworkInitializer.initialize();
- DeviceIdleFrameworkInitializer.initialize();
+ sInitializing = true;
+ try {
+ // Note: the following functions need to be @SystemApis, once they become mainline
+ // modules.
- BlobStoreManagerFrameworkInitializer.initialize();
+ JobSchedulerFrameworkInitializer.registerServiceWrappers();
+ BlobStoreManagerFrameworkInitializer.initialize();
+ } finally {
+ // If any of the above code throws, we're in a pretty bad shape and the process
+ // will likely crash, but we'll reset it just in case there's an exception handler...
+ sInitializing = false;
+ }
}
+ /** Throws {@link IllegalStateException} if not during a static initialization. */
+ private static void ensureInitializing(String methodName) {
+ Preconditions.checkState(sInitializing, "Internal error: " + methodName
+ + " can only be called during class initialization.");
+ }
/**
* Creates an array which is used to cache per-Context service instances.
+ * @hide
*/
public static Object[] createServiceCache() {
return new Object[sServiceCacheSize];
@@ -1307,6 +1323,7 @@
/**
* Gets a system service from a given context.
+ * @hide
*/
public static Object getSystemService(ContextImpl ctx, String name) {
ServiceFetcher<?> fetcher = SYSTEM_SERVICE_FETCHERS.get(name);
@@ -1315,6 +1332,7 @@
/**
* Gets the name of the system-level service that is represented by the specified class.
+ * @hide
*/
public static String getSystemServiceName(Class<?> serviceClass) {
return SYSTEM_SERVICE_NAMES.get(serviceClass);
@@ -1324,41 +1342,204 @@
* Statically registers a system service with the context.
* This method must be called during static initialization only.
*/
- private static <T> void registerService(String serviceName, Class<T> serviceClass,
- ServiceFetcher<T> serviceFetcher) {
+ private static <T> void registerService(@NonNull String serviceName,
+ @NonNull Class<T> serviceClass, @NonNull ServiceFetcher<T> serviceFetcher) {
SYSTEM_SERVICE_NAMES.put(serviceClass, serviceName);
SYSTEM_SERVICE_FETCHERS.put(serviceName, serviceFetcher);
}
/**
- * APEX modules will use it to register their service wrapper.
+ * Callback interface used as a parameter to {@link #registerStaticService(
+ * String, Class, StaticServiceProducerNoBinder)}, which generates a service wrapper instance
+ * that's not tied to any context and does not take a service binder object in the constructor.
+ *
+ * @param <TServiceClass> type of the service wrapper class.
*
* @hide
*/
- public static <T> void registerStaticService(String serviceName, Class<T> serviceWrapperClass,
- Function<IBinder, T> serviceFetcher) {
+ //@SystemApi TODO Make it a system API.
+ public interface StaticServiceProducerNoBinder<TServiceClass> {
+ /**
+ * Return a new service wrapper of type {@code TServiceClass}.
+ */
+ TServiceClass createService();
+ }
+
+ /**
+ * Callback interface used as a parameter to {@link #registerStaticService(
+ * String, Class, StaticServiceProducerWithBinder)}, which generates a service wrapper instance
+ * that's not tied to any context and takes a service binder object in the constructor.
+ *
+ * @param <TServiceClass> type of the service wrapper class.
+ *
+ * @hide
+ */
+ //@SystemApi TODO Make it a system API.
+ public interface StaticServiceProducerWithBinder<TServiceClass> {
+ /**
+ * Return a new service wrapper of type {@code TServiceClass} backed by a given
+ * service binder object.
+ */
+ TServiceClass createService(IBinder serviceBinder);
+ }
+
+ /**
+ * Callback interface used as a parameter to {@link #registerContextAwareService(
+ * String, Class, ContextAwareServiceProducerNoBinder)},
+ * which generates a service wrapper instance
+ * that's tied to a specific context and does not take a service binder object in the
+ * constructor.
+ *
+ * @param <TServiceClass> type of the service wrapper class.
+ *
+ * @hide
+ */
+ //@SystemApi TODO Make it a system API.
+ public interface ContextAwareServiceProducerNoBinder<TServiceClass> {
+ /**
+ * Return a new service wrapper of type {@code TServiceClass} tied to a given
+ * {@code context}.
+ *
+ * TODO Do we need to pass the "base context" too?
+ */
+ TServiceClass createService(Context context);
+ }
+
+ /**
+ * Callback interface used as a parameter to {@link #registerContextAwareService(
+ * String, Class, ContextAwareServiceProducerWithBinder)},
+ * which generates a service wrapper instance
+ * that's tied to a specific context and takes a service binder object in the constructor.
+ *
+ * @param <TServiceClass> type of the service wrapper class.
+ *
+ * @hide
+ */
+ //@SystemApi TODO Make it a system API.
+ public interface ContextAwareServiceProducerWithBinder<TServiceClass> {
+ /**
+ * Return a new service wrapper of type {@code TServiceClass} backed by a given
+ * service binder object that's tied to a given {@code context}.
+ *
+ * TODO Do we need to pass the "base context" too?
+ */
+ TServiceClass createService(Context context, IBinder serviceBinder);
+ }
+
+ /**
+ * Used by apex modules to register a "service wrapper" that is not tied to any {@link Context}.
+ *
+ * <p>This can only be called from the methods called by the static initializer of
+ * {@link SystemServiceRegistry}. (Otherwise it throws a {@link IllegalStateException}.)
+ *
+ * @param serviceName the name of the binder object, such as
+ * {@link Context#JOB_SCHEDULER_SERVICE}.
+ * @param serviceWrapperClass the wrapper class, such as the class of
+ * {@link android.app.job.JobScheduler}.
+ * @param serviceProducer Callback that takes the service binder object with the name
+ * {@code serviceName} and returns an actual service wrapper instance.
+ *
+ * @hide
+ */
+ //@SystemApi TODO Make it a system API.
+ public static <TServiceClass> void registerStaticService(
+ @NonNull String serviceName, @NonNull Class<TServiceClass> serviceWrapperClass,
+ @NonNull StaticServiceProducerWithBinder<TServiceClass> serviceProducer) {
+ ensureInitializing("registerStaticService");
+ Preconditions.checkStringNotEmpty(serviceName);
+ Preconditions.checkNotNull(serviceWrapperClass);
+ Preconditions.checkNotNull(serviceProducer);
+
registerService(serviceName, serviceWrapperClass,
- new StaticServiceFetcher<T>() {
+ new StaticServiceFetcher<TServiceClass>() {
@Override
- public T createService() throws ServiceNotFoundException {
- IBinder b = ServiceManager.getServiceOrThrow(serviceName);
- return serviceFetcher.apply(b);
+ public TServiceClass createService() throws ServiceNotFoundException {
+ return serviceProducer.createService(
+ ServiceManager.getServiceOrThrow(serviceName));
}});
}
/**
- * APEX modules will use it to register their service wrapper.
+ * Similar to {@link #registerStaticService(String, Class, StaticServiceProducerWithBinder)},
+ * but used for a "service wrapper" that doesn't take a service binder in its constructor.
*
* @hide
*/
- public static <T> void registerCachedService(String serviceName, Class<T> serviceWrapperClass,
- BiFunction<Context, IBinder, T> serviceFetcher) {
+ //@SystemApi TODO Make it a system API.
+ public static <TServiceClass> void registerStaticService(
+ @NonNull String serviceName, @NonNull Class<TServiceClass> serviceWrapperClass,
+ @NonNull StaticServiceProducerNoBinder<TServiceClass> serviceProducer) {
+ ensureInitializing("registerStaticService");
+ Preconditions.checkStringNotEmpty(serviceName);
+ Preconditions.checkNotNull(serviceWrapperClass);
+ Preconditions.checkNotNull(serviceProducer);
+
registerService(serviceName, serviceWrapperClass,
- new CachedServiceFetcher<T>() {
+ new StaticServiceFetcher<TServiceClass>() {
@Override
- public T createService(ContextImpl ctx) throws ServiceNotFoundException {
- IBinder b = ServiceManager.getServiceOrThrow(serviceName);
- return serviceFetcher.apply(ctx.getOuterContext(), b);
+ public TServiceClass createService() {
+ return serviceProducer.createService();
+ }});
+ }
+
+ /**
+ * Used by apex modules to register a "service wrapper" that is tied to a specific
+ * {@link Context}.
+ *
+ * <p>This can only be called from the methods called by the static initializer of
+ * {@link SystemServiceRegistry}. (Otherwise it throws a {@link IllegalStateException}.)
+ *
+ * @param serviceName the name of the binder object, such as
+ * {@link Context#JOB_SCHEDULER_SERVICE}.
+ * @param serviceWrapperClass the wrapper class, such as the class of
+ * {@link android.app.job.JobScheduler}.
+ * @param serviceProducer lambda that takes the service binder object with the name
+ * {@code serviceName}, a {@link Context} and returns an actual service wrapper instance.
+ *
+ * @hide
+ */
+ //@SystemApi TODO Make it a system API.
+ public static <TServiceClass> void registerContextAwareService(
+ @NonNull String serviceName, @NonNull Class<TServiceClass> serviceWrapperClass,
+ @NonNull ContextAwareServiceProducerWithBinder<TServiceClass> serviceProducer) {
+ ensureInitializing("registerContextAwareService");
+ Preconditions.checkStringNotEmpty(serviceName);
+ Preconditions.checkNotNull(serviceWrapperClass);
+ Preconditions.checkNotNull(serviceProducer);
+
+ registerService(serviceName, serviceWrapperClass,
+ new CachedServiceFetcher<TServiceClass>() {
+ @Override
+ public TServiceClass createService(ContextImpl ctx)
+ throws ServiceNotFoundException {
+ return serviceProducer.createService(
+ ctx.getOuterContext(),
+ ServiceManager.getServiceOrThrow(serviceName));
+ }});
+ }
+
+
+ /**
+ * Similar to {@link #registerContextAwareService(String, Class,
+ * ContextAwareServiceProducerWithBinder)},
+ * but used for a "service wrapper" that doesn't take a service binder in its constructor.
+ *
+ * @hide
+ */
+ //@SystemApi TODO Make it a system API.
+ public static <TServiceClass> void registerContextAwareService(
+ @NonNull String serviceName, @NonNull Class<TServiceClass> serviceWrapperClass,
+ @NonNull ContextAwareServiceProducerNoBinder<TServiceClass> serviceProducer) {
+ ensureInitializing("registerContextAwareService");
+ Preconditions.checkStringNotEmpty(serviceName);
+ Preconditions.checkNotNull(serviceWrapperClass);
+ Preconditions.checkNotNull(serviceProducer);
+
+ registerService(serviceName, serviceWrapperClass,
+ new CachedServiceFetcher<TServiceClass>() {
+ @Override
+ public TServiceClass createService(ContextImpl ctx) {
+ return serviceProducer.createService(ctx.getOuterContext());
}});
}
@@ -1517,6 +1698,7 @@
public abstract T createService(Context applicationContext) throws ServiceNotFoundException;
}
+ /** @hide */
public static void onServiceNotFound(ServiceNotFoundException e) {
// We're mostly interested in tracking down long-lived core system
// components that might stumble if they obtain bad references; just
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index 59ecf4a..41604ec 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -458,8 +458,9 @@
try {
Bundle params = new Bundle();
- ParcelFileDescriptor fd = mService.getWallpaper(context.getOpPackageName(),
- this, FLAG_SYSTEM, params, userId);
+ ParcelFileDescriptor fd = mService.getWallpaperWithFeature(
+ context.getOpPackageName(), context.getFeatureId(), this, FLAG_SYSTEM,
+ params, userId);
if (fd != null) {
try {
BitmapFactory.Options options = new BitmapFactory.Options();
@@ -985,8 +986,8 @@
} else {
try {
Bundle outParams = new Bundle();
- return sGlobals.mService.getWallpaper(mContext.getOpPackageName(), null, which,
- outParams, userId);
+ return sGlobals.mService.getWallpaperWithFeature(mContext.getOpPackageName(),
+ mContext.getFeatureId(), null, which, outParams, userId);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
} catch (SecurityException e) {
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 9eff4b0..50adb7c 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -4101,9 +4101,17 @@
* Make the device lock immediately, as if the lock screen timeout has expired at the point of
* this call.
* <p>
+ * This method secures the device in response to an urgent situation, such as a lost or stolen
+ * device. After this method is called, the device must be unlocked using strong authentication
+ * (PIN, pattern, or password). This API is intended for use only by device admins.
+ * <p>
* The calling device admin must have requested {@link DeviceAdminInfo#USES_POLICY_FORCE_LOCK}
* to be able to call this method; if it has not, a security exception will be thrown.
* <p>
+ * If there's no lock type set, this method forces the device to go to sleep but doesn't lock
+ * the device. Device admins who find the device in this state can lock an otherwise-insecure
+ * device by first calling {@link #resetPassword} to set the password and then lock the device.
+ * <p>
* This method can be called on the {@link DevicePolicyManager} instance returned by
* {@link #getParentProfileInstance(ComponentName)} in order to lock the parent profile.
* <p>
@@ -4120,9 +4128,17 @@
* Make the device lock immediately, as if the lock screen timeout has expired at the point of
* this call.
* <p>
+ * This method secures the device in response to an urgent situation, such as a lost or stolen
+ * device. After this method is called, the device must be unlocked using strong authentication
+ * (PIN, pattern, or password). This API is intended for use only by device admins.
+ * <p>
* The calling device admin must have requested {@link DeviceAdminInfo#USES_POLICY_FORCE_LOCK}
* to be able to call this method; if it has not, a security exception will be thrown.
* <p>
+ * If there's no lock type set, this method forces the device to go to sleep but doesn't lock
+ * the device. Device admins who find the device in this state can lock an otherwise-insecure
+ * device by first calling {@link #resetPassword} to set the password and then lock the device.
+ * <p>
* This method can be called on the {@link DevicePolicyManager} instance returned by
* {@link #getParentProfileInstance(ComponentName)} in order to lock the parent profile.
*
@@ -8167,7 +8183,7 @@
* Sets which system features are enabled when the device runs in lock task mode. This method
* doesn't affect the features when lock task mode is inactive. Any system features not included
* in {@code flags} are implicitly disabled when calling this method. By default, only
- * {@link #LOCK_TASK_FEATURE_GLOBAL_ACTIONS} is enabled—all the other features are disabled. To
+ * {@link #LOCK_TASK_FEATURE_GLOBAL_ACTIONS} is enabled; all the other features are disabled. To
* disable the global actions dialog, call this method omitting
* {@link #LOCK_TASK_FEATURE_GLOBAL_ACTIONS}.
*
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 03b4913..392353a 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -3289,6 +3289,7 @@
WIFI_RTT_RANGING_SERVICE,
NSD_SERVICE,
AUDIO_SERVICE,
+ AUTH_SERVICE,
FINGERPRINT_SERVICE,
//@hide: FACE_SERVICE,
BIOMETRIC_SERVICE,
@@ -4007,6 +4008,31 @@
public static final String AUDIO_SERVICE = "audio";
/**
+ * AuthService orchestrates biometric and PIN/pattern/password authentication.
+ *
+ * BiometricService was split into two services, AuthService and BiometricService, where
+ * AuthService is the high level service that orchestrates all types of authentication, and
+ * BiometricService is a lower layer responsible only for biometric authentication.
+ *
+ * Ideally we should have renamed BiometricManager to AuthManager, because it logically
+ * corresponds to AuthService. However, because BiometricManager is a public API, we kept
+ * the old name but changed the internal implementation to use AuthService.
+ *
+ * As of now, the AUTH_SERVICE constant is only used to identify the service in
+ * SystemServiceRegistry and SELinux. To obtain the manager for AUTH_SERVICE, one should use
+ * BIOMETRIC_SERVICE with {@link #getSystemService(String)} to retrieve a
+ * {@link android.hardware.biometrics.BiometricManager}
+ *
+ * Map of the two services and their managers:
+ * [Service] [Manager]
+ * AuthService BiometricManager
+ * BiometricService N/A
+ *
+ * @hide
+ */
+ public static final String AUTH_SERVICE = "auth";
+
+ /**
* Use with {@link #getSystemService(String)} to retrieve a
* {@link android.hardware.fingerprint.FingerprintManager} for handling management
* of fingerprints.
@@ -4040,8 +4066,8 @@
/**
* Use with {@link #getSystemService(String)} to retrieve a
- * {@link android.hardware.biometrics.BiometricManager} for handling management
- * of face authentication.
+ * {@link android.hardware.biometrics.BiometricManager} for handling
+ * biometric and PIN/pattern/password authentication.
*
* @see #getSystemService
* @see android.hardware.biometrics.BiometricManager
diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java
index edc66c5..0c52979 100644
--- a/core/java/android/content/pm/PackageInstaller.java
+++ b/core/java/android/content/pm/PackageInstaller.java
@@ -68,6 +68,7 @@
import java.util.List;
import java.util.Set;
import java.util.concurrent.Executor;
+import java.util.stream.Collectors;
/**
* Offers the ability to install, upgrade, and remove applications on the
@@ -479,35 +480,30 @@
}
/**
- * Returns an active staged session, or {@code null} if there is none.
+ * Returns first active staged session, or {@code null} if there is none.
*
- * <p>Staged session is active iff:
- * <ul>
- * <li>It is committed, i.e. {@link SessionInfo#isCommitted()} is {@code true}, and
- * <li>it is not applied, i.e. {@link SessionInfo#isStagedSessionApplied()} is {@code
- * false}, and
- * <li>it is not failed, i.e. {@link SessionInfo#isStagedSessionFailed()} is {@code false}.
- * </ul>
+ * <p>For more information on what sessions are considered active see
+ * {@link SessionInfo#isStagedSessionActive()}.
*
- * <p>In case of a multi-apk session, reasoning above is applied to the parent session, since
- * that is the one that should been {@link Session#commit committed}.
+ * @deprecated Use {@link #getActiveStagedSessions} as there can be more than one active staged
+ * session
*/
+ @Deprecated
public @Nullable SessionInfo getActiveStagedSession() {
- final List<SessionInfo> stagedSessions = getStagedSessions();
- for (SessionInfo s : stagedSessions) {
- if (s.isStagedSessionApplied() || s.isStagedSessionFailed()) {
- // Finalized session.
- continue;
- }
- if (s.getParentSessionId() != SessionInfo.INVALID_ID) {
- // Child session.
- continue;
- }
- if (s.isCommitted()) {
- return s;
- }
- }
- return null;
+ List<SessionInfo> activeSessions = getActiveStagedSessions();
+ return activeSessions.isEmpty() ? null : activeSessions.get(0);
+ }
+
+ /**
+ * Returns list of active staged sessions. Returns empty list if there is none.
+ *
+ * <p>For more information on what sessions are considered active see
+ * * {@link SessionInfo#isStagedSessionActive()}.
+ */
+ public @NonNull List<SessionInfo> getActiveStagedSessions() {
+ return getStagedSessions().stream()
+ .filter(s -> s.isStagedSessionActive())
+ .collect(Collectors.toList());
}
/**
@@ -2227,13 +2223,36 @@
}
/**
- * Returns true if this session is a staged session which will be applied at next reboot.
+ * Returns true if this session is a staged session.
*/
public boolean isStaged() {
return isStaged;
}
/**
+ * Returns {@code true} if this session is an active staged session.
+ *
+ * We consider a session active if it has been committed and it is either pending
+ * verification, or will be applied at next reboot.
+ *
+ * <p>Staged session is active iff:
+ * <ul>
+ * <li>It is committed, i.e. {@link SessionInfo#isCommitted()} is {@code true}, and
+ * <li>it is not applied, i.e. {@link SessionInfo#isStagedSessionApplied()} is {@code
+ * false}, and
+ * <li>it is not failed, i.e. {@link SessionInfo#isStagedSessionFailed()} is
+ * {@code false}.
+ * </ul>
+ *
+ * <p>In case of a multi-package session, reasoning above is applied to the parent session,
+ * since that is the one that should have been {@link Session#commit committed}.
+ */
+ public boolean isStagedSessionActive() {
+ return isStaged && isCommitted && !isStagedSessionApplied && !isStagedSessionFailed
+ && !hasParentSessionId();
+ }
+
+ /**
* Returns the parent multi-package session ID if this session belongs to one,
* {@link #INVALID_ID} otherwise.
*/
@@ -2242,6 +2261,13 @@
}
/**
+ * Returns true if session has a valid parent session, otherwise false.
+ */
+ public boolean hasParentSessionId() {
+ return parentSessionId != INVALID_ID;
+ }
+
+ /**
* Returns the set of session IDs that will be committed when this session is commited if
* this session is a multi-package session.
*/
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index c56c307..bbfdf91 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -1435,7 +1435,7 @@
/**
* Installation failed return code: a new staged session was attempted to be committed while
- * there is already one in-progress.
+ * there is already one in-progress or new session has package that is already staged.
*
* @hide
*/
diff --git a/core/java/android/content/pm/UserInfo.java b/core/java/android/content/pm/UserInfo.java
index 42d64d8..5fb17ee 100644
--- a/core/java/android/content/pm/UserInfo.java
+++ b/core/java/android/content/pm/UserInfo.java
@@ -49,9 +49,6 @@
*/
public class UserInfo implements Parcelable {
- /** 16 bits for user type */
- public static final int FLAG_MASK_USER_TYPE = 0x0000FFFF;
-
/**
* *************************** NOTE ***************************
* These flag values CAN NOT CHANGE because they are written
diff --git a/core/java/android/hardware/biometrics/BiometricManager.java b/core/java/android/hardware/biometrics/BiometricManager.java
index 9d427c8..f17b3ae 100644
--- a/core/java/android/hardware/biometrics/BiometricManager.java
+++ b/core/java/android/hardware/biometrics/BiometricManager.java
@@ -66,7 +66,7 @@
@interface BiometricError {}
private final Context mContext;
- private final IBiometricService mService;
+ private final IAuthService mService;
private final boolean mHasHardware;
/**
@@ -86,7 +86,7 @@
* @param context
* @param service
*/
- public BiometricManager(Context context, IBiometricService service) {
+ public BiometricManager(Context context, IAuthService service) {
mContext = context;
mService = service;
diff --git a/core/java/android/hardware/biometrics/IAuthService.aidl b/core/java/android/hardware/biometrics/IAuthService.aidl
new file mode 100644
index 0000000..516a25d
--- /dev/null
+++ b/core/java/android/hardware/biometrics/IAuthService.aidl
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2019 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;
+
+import android.os.Bundle;
+import android.hardware.biometrics.IBiometricEnabledOnKeyguardCallback;
+import android.hardware.biometrics.IBiometricServiceReceiver;
+
+/**
+ * Communication channel from BiometricPrompt and BiometricManager to AuthService. The
+ * interface does not expose specific biometric modalities. The system will use the default
+ * biometric for apps. On devices with more than one, the choice is dictated by user preference in
+ * Settings.
+ * @hide
+ */
+interface IAuthService {
+ // Requests authentication. The service choose the appropriate biometric to use, and show
+ // the corresponding BiometricDialog.
+ void authenticate(IBinder token, long sessionId, int userId,
+ IBiometricServiceReceiver receiver, String opPackageName, in Bundle bundle);
+
+ // TODO(b/141025588): Make userId the first arg to be consistent with hasEnrolledBiometrics.
+ // Checks if biometrics can be used.
+ int canAuthenticate(String opPackageName, int userId);
+
+ // Checks if any biometrics are enrolled.
+ boolean hasEnrolledBiometrics(int userId, String opPackageName);
+
+ // Register callback for when keyguard biometric eligibility changes.
+ void registerEnabledOnKeyguardCallback(IBiometricEnabledOnKeyguardCallback callback);
+
+ // Explicitly set the active user.
+ void setActiveUser(int userId);
+
+ // Reset the lockout when user authenticates with strong auth (e.g. PIN, pattern or password)
+ void resetLockout(in byte [] token);
+}
diff --git a/core/java/android/hardware/biometrics/IBiometricService.aidl b/core/java/android/hardware/biometrics/IBiometricService.aidl
index 06336a5..ca02421 100644
--- a/core/java/android/hardware/biometrics/IBiometricService.aidl
+++ b/core/java/android/hardware/biometrics/IBiometricService.aidl
@@ -22,10 +22,7 @@
import android.hardware.biometrics.IBiometricAuthenticator;
/**
- * Communication channel from BiometricPrompt and BiometricManager to BiometricService. The
- * interface does not expose specific biometric modalities. The system will use the default
- * biometric for apps. On devices with more than one, the choice is dictated by user preference in
- * Settings.
+ * Communication channel from AuthService to BiometricService.
* @hide
*/
interface IBiometricService {
diff --git a/core/java/android/hardware/display/BrightnessChangeEvent.java b/core/java/android/hardware/display/BrightnessChangeEvent.java
index 21fcc63..a6a44be 100644
--- a/core/java/android/hardware/display/BrightnessChangeEvent.java
+++ b/core/java/android/hardware/display/BrightnessChangeEvent.java
@@ -79,7 +79,8 @@
/**
* Histogram counting how many times a pixel of a given value was displayed onscreen for the
* Value component of HSV if the device supports color sampling, if the device does not support
- * color sampling the value will be null.
+ * color sampling or {@link BrightnessConfiguration#shouldCollectColorSamples()} is false the
+ * value will be null.
*
* The buckets of the histogram are evenly weighted, the number of buckets is device specific.
* The units are in pixels * milliseconds, with 1 pixel millisecond being 1 pixel displayed
@@ -94,7 +95,8 @@
/**
* How many milliseconds of data are contained in the colorValueBuckets, if the device does
- * not support color sampling the value will be 0L.
+ * not support color sampling or {@link BrightnessConfiguration#shouldCollectColorSamples()} is
+ * false the value will be 0L.
*
* {@see #colorValueBuckets}
*/
diff --git a/core/java/android/hardware/display/BrightnessConfiguration.java b/core/java/android/hardware/display/BrightnessConfiguration.java
index 4c2e297..139be8e 100644
--- a/core/java/android/hardware/display/BrightnessConfiguration.java
+++ b/core/java/android/hardware/display/BrightnessConfiguration.java
@@ -49,26 +49,31 @@
private static final String TAG_BRIGHTNESS_POINT = "brightness-point";
private static final String TAG_BRIGHTNESS_CORRECTIONS = "brightness-corrections";
private static final String TAG_BRIGHTNESS_CORRECTION = "brightness-correction";
+ private static final String TAG_BRIGHTNESS_PARAMS = "brightness-params";
private static final String ATTR_LUX = "lux";
private static final String ATTR_NITS = "nits";
private static final String ATTR_DESCRIPTION = "description";
private static final String ATTR_PACKAGE_NAME = "package-name";
private static final String ATTR_CATEGORY = "category";
+ private static final String ATTR_COLLECT_COLOR = "collect-color";
private final float[] mLux;
private final float[] mNits;
private final Map<String, BrightnessCorrection> mCorrectionsByPackageName;
private final Map<Integer, BrightnessCorrection> mCorrectionsByCategory;
private final String mDescription;
+ private final boolean mShouldCollectColorSamples;
private BrightnessConfiguration(float[] lux, float[] nits,
Map<String, BrightnessCorrection> correctionsByPackageName,
- Map<Integer, BrightnessCorrection> correctionsByCategory, String description) {
+ Map<Integer, BrightnessCorrection> correctionsByCategory, String description,
+ boolean shouldCollectColorSamples) {
mLux = lux;
mNits = nits;
mCorrectionsByPackageName = correctionsByPackageName;
mCorrectionsByCategory = correctionsByCategory;
mDescription = description;
+ mShouldCollectColorSamples = shouldCollectColorSamples;
}
/**
@@ -119,6 +124,14 @@
return mDescription;
}
+ /**
+ * Returns whether color samples should be collected in
+ * {@link BrightnessChangeEvent#colorValueBuckets}.
+ */
+ public boolean shouldCollectColorSamples() {
+ return mShouldCollectColorSamples;
+ }
+
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeFloatArray(mLux);
@@ -138,6 +151,7 @@
correction.writeToParcel(dest, flags);
}
dest.writeString(mDescription);
+ dest.writeBoolean(mShouldCollectColorSamples);
}
@Override
@@ -167,6 +181,7 @@
if (mDescription != null) {
sb.append(mDescription);
}
+ sb.append(", shouldCollectColorSamples = " + mShouldCollectColorSamples);
sb.append("'}");
return sb.toString();
}
@@ -181,6 +196,7 @@
if (mDescription != null) {
result = result * 31 + mDescription.hashCode();
}
+ result = result * 31 + Boolean.hashCode(mShouldCollectColorSamples);
return result;
}
@@ -196,7 +212,8 @@
return Arrays.equals(mLux, other.mLux) && Arrays.equals(mNits, other.mNits)
&& mCorrectionsByPackageName.equals(other.mCorrectionsByPackageName)
&& mCorrectionsByCategory.equals(other.mCorrectionsByCategory)
- && Objects.equals(mDescription, other.mDescription);
+ && Objects.equals(mDescription, other.mDescription)
+ && mShouldCollectColorSamples == other.mShouldCollectColorSamples;
}
public static final @android.annotation.NonNull Creator<BrightnessConfiguration> CREATOR =
@@ -224,6 +241,8 @@
final String description = in.readString();
builder.setDescription(description);
+ final boolean shouldCollectColorSamples = in.readBoolean();
+ builder.setShouldCollectColorSamples(shouldCollectColorSamples);
return builder.build();
}
@@ -252,6 +271,7 @@
serializer.endTag(null, TAG_BRIGHTNESS_POINT);
}
serializer.endTag(null, TAG_BRIGHTNESS_CURVE);
+
serializer.startTag(null, TAG_BRIGHTNESS_CORRECTIONS);
for (Map.Entry<String, BrightnessCorrection> entry :
mCorrectionsByPackageName.entrySet()) {
@@ -271,6 +291,12 @@
serializer.endTag(null, TAG_BRIGHTNESS_CORRECTION);
}
serializer.endTag(null, TAG_BRIGHTNESS_CORRECTIONS);
+
+ serializer.startTag(null, TAG_BRIGHTNESS_PARAMS);
+ if (mShouldCollectColorSamples) {
+ serializer.attribute(null, ATTR_COLLECT_COLOR, Boolean.toString(true));
+ }
+ serializer.endTag(null, TAG_BRIGHTNESS_PARAMS);
}
/**
@@ -293,6 +319,7 @@
List<Float> nitsList = new ArrayList<>();
Map<String, BrightnessCorrection> correctionsByPackageName = new HashMap<>();
Map<Integer, BrightnessCorrection> correctionsByCategory = new HashMap<>();
+ boolean shouldCollectColorSamples = false;
final int configDepth = parser.getDepth();
while (XmlUtils.nextElementWithin(parser, configDepth)) {
if (TAG_BRIGHTNESS_CURVE.equals(parser.getName())) {
@@ -307,8 +334,7 @@
luxList.add(lux);
nitsList.add(nits);
}
- }
- if (TAG_BRIGHTNESS_CORRECTIONS.equals(parser.getName())) {
+ } else if (TAG_BRIGHTNESS_CORRECTIONS.equals(parser.getName())) {
final int correctionsDepth = parser.getDepth();
while (XmlUtils.nextElementWithin(parser, correctionsDepth)) {
if (!TAG_BRIGHTNESS_CORRECTION.equals(parser.getName())) {
@@ -328,6 +354,9 @@
}
}
}
+ } else if (TAG_BRIGHTNESS_PARAMS.equals(parser.getName())) {
+ shouldCollectColorSamples =
+ Boolean.parseBoolean(parser.getAttributeValue(null, ATTR_COLLECT_COLOR));
}
}
final int n = luxList.size();
@@ -350,6 +379,7 @@
final BrightnessCorrection correction = entry.getValue();
builder.addCorrectionByCategory(category, correction);
}
+ builder.setShouldCollectColorSamples(shouldCollectColorSamples);
return builder.build();
}
@@ -374,6 +404,7 @@
private Map<String, BrightnessCorrection> mCorrectionsByPackageName;
private Map<Integer, BrightnessCorrection> mCorrectionsByCategory;
private String mDescription;
+ private boolean mShouldCollectColorSamples;
/**
* Constructs the builder with the control points for the brightness curve.
@@ -498,6 +529,19 @@
}
/**
+ * Control whether screen color samples should be returned in
+ * {@link BrightnessChangeEvent#colorValueBuckets} if supported by the device.
+ *
+ * @param shouldCollectColorSamples true if color samples should be collected.
+ * @return
+ */
+ @NonNull
+ public Builder setShouldCollectColorSamples(boolean shouldCollectColorSamples) {
+ mShouldCollectColorSamples = shouldCollectColorSamples;
+ return this;
+ }
+
+ /**
* Builds the {@link BrightnessConfiguration}.
*/
@NonNull
@@ -506,7 +550,7 @@
throw new IllegalStateException("A curve must be set!");
}
return new BrightnessConfiguration(mCurveLux, mCurveNits, mCorrectionsByPackageName,
- mCorrectionsByCategory, mDescription);
+ mCorrectionsByCategory, mDescription, mShouldCollectColorSamples);
}
private static void checkMonotonic(float[] vals, boolean strictlyIncreasing, String name) {
diff --git a/core/java/android/net/StaticIpConfiguration.java b/core/java/android/net/StaticIpConfiguration.java
index 5bc9953..990c114 100644
--- a/core/java/android/net/StaticIpConfiguration.java
+++ b/core/java/android/net/StaticIpConfiguration.java
@@ -25,6 +25,8 @@
import android.os.Parcel;
import android.os.Parcelable;
+import com.android.internal.util.Preconditions;
+
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
@@ -152,6 +154,7 @@
* @return The {@link Builder} for chaining.
*/
public @NonNull Builder setDnsServers(@NonNull Iterable<InetAddress> dnsServers) {
+ Preconditions.checkNotNull(dnsServers);
mDnsServers = dnsServers;
return this;
}
@@ -175,8 +178,10 @@
final StaticIpConfiguration config = new StaticIpConfiguration();
config.ipAddress = mIpAddress;
config.gateway = mGateway;
- for (InetAddress server : mDnsServers) {
- config.dnsServers.add(server);
+ if (mDnsServers != null) {
+ for (InetAddress server : mDnsServers) {
+ config.dnsServers.add(server);
+ }
}
config.domains = mDomains;
return config;
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index ac7a0a8..deeeddc 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -1645,10 +1645,10 @@
* Check that given app holds both permission and appop.
* @hide
*/
- public static boolean checkPermissionAndAppOp(Context context, boolean enforce,
- int pid, int uid, String packageName, String permission, int op) {
- return checkPermissionAndAppOp(context, enforce, pid, uid, packageName, permission, op,
- true);
+ public static boolean checkPermissionAndAppOp(Context context, boolean enforce, int pid,
+ int uid, String packageName, @NonNull String featureId, String permission, int op) {
+ return checkPermissionAndAppOp(context, enforce, pid, uid, packageName, featureId,
+ permission, op, true);
}
/**
@@ -1657,16 +1657,17 @@
*/
public static boolean checkPermissionAndCheckOp(Context context, boolean enforce,
int pid, int uid, String packageName, String permission, int op) {
- return checkPermissionAndAppOp(context, enforce, pid, uid, packageName, permission, op,
- false);
+ return checkPermissionAndAppOp(context, enforce, pid, uid, packageName,
+ null /* featureId is not needed when not noting */, permission, op, false);
}
/**
* Check that given app holds both permission and appop.
* @hide
*/
- private static boolean checkPermissionAndAppOp(Context context, boolean enforce,
- int pid, int uid, String packageName, String permission, int op, boolean note) {
+ private static boolean checkPermissionAndAppOp(Context context, boolean enforce, int pid,
+ int uid, String packageName, @Nullable String featureId, String permission, int op,
+ boolean note) {
if (context.checkPermission(permission, pid, uid) != PERMISSION_GRANTED) {
if (enforce) {
throw new SecurityException(
@@ -1679,7 +1680,7 @@
AppOpsManager appOps = context.getSystemService(AppOpsManager.class);
final int mode;
if (note) {
- mode = appOps.noteOpNoThrow(op, uid, packageName);
+ mode = appOps.noteOpNoThrow(op, uid, packageName, featureId, null);
} else {
try {
appOps.checkPackage(uid, packageName);
@@ -1711,14 +1712,15 @@
}
}
- private boolean checkPermissionAndAppOp(boolean enforce,
- int pid, int uid, String packageName, String permission, int op) {
- return checkPermissionAndAppOp(mContext, enforce, pid, uid, packageName, permission, op);
+ private boolean checkPermissionAndAppOp(boolean enforce, int pid, int uid, String packageName,
+ @Nullable String featureId, String permission, int op) {
+ return checkPermissionAndAppOp(mContext, enforce, pid, uid, packageName, featureId,
+ permission, op);
}
private boolean noteAppOpAllowingLegacy(boolean enforce,
- int pid, int uid, String packageName, int op) {
- final int mode = mAppOps.noteOpNoThrow(op, uid, packageName);
+ int pid, int uid, String packageName, @Nullable String featureId, int op) {
+ final int mode = mAppOps.noteOpNoThrow(op, uid, packageName, featureId, null);
switch (mode) {
case AppOpsManager.MODE_ALLOWED:
return true;
@@ -1749,50 +1751,68 @@
/** {@hide} */
public boolean checkPermissionReadAudio(boolean enforce,
- int pid, int uid, String packageName) {
- if (!checkPermissionAndAppOp(enforce, pid, uid, packageName,
- READ_EXTERNAL_STORAGE, OP_READ_EXTERNAL_STORAGE)) return false;
- return noteAppOpAllowingLegacy(enforce, pid, uid, packageName, OP_READ_MEDIA_AUDIO);
+ int pid, int uid, String packageName, @Nullable String featureId) {
+ if (!checkPermissionAndAppOp(enforce, pid, uid, packageName, featureId,
+ READ_EXTERNAL_STORAGE, OP_READ_EXTERNAL_STORAGE)) {
+ return false;
+ }
+ return noteAppOpAllowingLegacy(enforce, pid, uid, packageName, featureId,
+ OP_READ_MEDIA_AUDIO);
}
/** {@hide} */
public boolean checkPermissionWriteAudio(boolean enforce,
- int pid, int uid, String packageName) {
- if (!checkPermissionAndAppOp(enforce, pid, uid, packageName,
- WRITE_EXTERNAL_STORAGE, OP_WRITE_EXTERNAL_STORAGE)) return false;
- return noteAppOpAllowingLegacy(enforce, pid, uid, packageName, OP_WRITE_MEDIA_AUDIO);
+ int pid, int uid, String packageName, @Nullable String featureId) {
+ if (!checkPermissionAndAppOp(enforce, pid, uid, packageName, featureId,
+ WRITE_EXTERNAL_STORAGE, OP_WRITE_EXTERNAL_STORAGE)) {
+ return false;
+ }
+ return noteAppOpAllowingLegacy(enforce, pid, uid, packageName, featureId,
+ OP_WRITE_MEDIA_AUDIO);
}
/** {@hide} */
public boolean checkPermissionReadVideo(boolean enforce,
- int pid, int uid, String packageName) {
- if (!checkPermissionAndAppOp(enforce, pid, uid, packageName,
- READ_EXTERNAL_STORAGE, OP_READ_EXTERNAL_STORAGE)) return false;
- return noteAppOpAllowingLegacy(enforce, pid, uid, packageName, OP_READ_MEDIA_VIDEO);
+ int pid, int uid, String packageName, @Nullable String featureId) {
+ if (!checkPermissionAndAppOp(enforce, pid, uid, packageName, featureId,
+ READ_EXTERNAL_STORAGE, OP_READ_EXTERNAL_STORAGE)) {
+ return false;
+ }
+ return noteAppOpAllowingLegacy(enforce, pid, uid, packageName, featureId,
+ OP_READ_MEDIA_VIDEO);
}
/** {@hide} */
public boolean checkPermissionWriteVideo(boolean enforce,
- int pid, int uid, String packageName) {
- if (!checkPermissionAndAppOp(enforce, pid, uid, packageName,
- WRITE_EXTERNAL_STORAGE, OP_WRITE_EXTERNAL_STORAGE)) return false;
- return noteAppOpAllowingLegacy(enforce, pid, uid, packageName, OP_WRITE_MEDIA_VIDEO);
+ int pid, int uid, String packageName, @Nullable String featureId) {
+ if (!checkPermissionAndAppOp(enforce, pid, uid, packageName, featureId,
+ WRITE_EXTERNAL_STORAGE, OP_WRITE_EXTERNAL_STORAGE)) {
+ return false;
+ }
+ return noteAppOpAllowingLegacy(enforce, pid, uid, packageName, featureId,
+ OP_WRITE_MEDIA_VIDEO);
}
/** {@hide} */
public boolean checkPermissionReadImages(boolean enforce,
- int pid, int uid, String packageName) {
- if (!checkPermissionAndAppOp(enforce, pid, uid, packageName,
- READ_EXTERNAL_STORAGE, OP_READ_EXTERNAL_STORAGE)) return false;
- return noteAppOpAllowingLegacy(enforce, pid, uid, packageName, OP_READ_MEDIA_IMAGES);
+ int pid, int uid, String packageName, @Nullable String featureId) {
+ if (!checkPermissionAndAppOp(enforce, pid, uid, packageName, featureId,
+ READ_EXTERNAL_STORAGE, OP_READ_EXTERNAL_STORAGE)) {
+ return false;
+ }
+ return noteAppOpAllowingLegacy(enforce, pid, uid, packageName, featureId,
+ OP_READ_MEDIA_IMAGES);
}
/** {@hide} */
public boolean checkPermissionWriteImages(boolean enforce,
- int pid, int uid, String packageName) {
- if (!checkPermissionAndAppOp(enforce, pid, uid, packageName,
- WRITE_EXTERNAL_STORAGE, OP_WRITE_EXTERNAL_STORAGE)) return false;
- return noteAppOpAllowingLegacy(enforce, pid, uid, packageName, OP_WRITE_MEDIA_IMAGES);
+ int pid, int uid, String packageName, @Nullable String featureId) {
+ if (!checkPermissionAndAppOp(enforce, pid, uid, packageName, featureId,
+ WRITE_EXTERNAL_STORAGE, OP_WRITE_EXTERNAL_STORAGE)) {
+ return false;
+ }
+ return noteAppOpAllowingLegacy(enforce, pid, uid, packageName, featureId,
+ OP_WRITE_MEDIA_IMAGES);
}
/** {@hide} */
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 8ee7a0e..2ea3b63 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -5402,11 +5402,10 @@
mTranslator.translateEventInScreenToAppWindow(event);
}
- // Enter touch mode on down or scroll, if it is coming from a touch screen device,
- // exit otherwise.
+ // Enter touch mode if event is coming from a touch screen device.
final int action = event.getAction();
- if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_SCROLL) {
- ensureTouchMode(event.isFromSource(InputDevice.SOURCE_TOUCHSCREEN));
+ if (event.isFromSource(InputDevice.SOURCE_TOUCHSCREEN)) {
+ ensureTouchMode(true);
}
if (action == MotionEvent.ACTION_DOWN) {
diff --git a/core/java/android/widget/Toast.java b/core/java/android/widget/Toast.java
index d037337..bdc2f9a 100644
--- a/core/java/android/widget/Toast.java
+++ b/core/java/android/widget/Toast.java
@@ -100,6 +100,8 @@
@UnsupportedAppUsage
int mDuration;
View mNextView;
+ // TODO(b/128611929): Remove this and check for null view when toast creation is in the system
+ boolean mIsCustomToast = false;
/**
* Construct an empty Toast object. You must call {@link #setView} before you
@@ -140,7 +142,11 @@
final int displayId = mContext.getDisplayId();
try {
- service.enqueueToast(pkg, tn, mDuration, displayId);
+ if (mIsCustomToast) {
+ service.enqueueToast(pkg, tn, mDuration, displayId);
+ } else {
+ service.enqueueTextToast(pkg, tn, mDuration, displayId);
+ }
} catch (RemoteException e) {
// Empty
}
@@ -160,6 +166,7 @@
* @see #getView
*/
public void setView(View view) {
+ mIsCustomToast = true;
mNextView = view;
}
@@ -168,6 +175,7 @@
* @see #setView
*/
public View getView() {
+ mIsCustomToast = true;
return mNextView;
}
diff --git a/core/java/com/android/internal/app/AbstractResolverComparator.java b/core/java/com/android/internal/app/AbstractResolverComparator.java
index 9ac979b..bb7e4d5 100644
--- a/core/java/com/android/internal/app/AbstractResolverComparator.java
+++ b/core/java/com/android/internal/app/AbstractResolverComparator.java
@@ -30,14 +30,17 @@
import com.android.internal.app.ResolverActivity.ResolvedComponentInfo;
+import java.text.Collator;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
/**
* Used to sort resolved activities in {@link ResolverListController}.
+ *
+ * @hide
*/
-abstract class AbstractResolverComparator implements Comparator<ResolvedComponentInfo> {
+public abstract class AbstractResolverComparator implements Comparator<ResolvedComponentInfo> {
private static final int NUM_OF_TOP_ANNOTATIONS_TO_USE = 3;
private static final boolean DEBUG = false;
@@ -62,6 +65,8 @@
// predicting ranking scores.
private static final int WATCHDOG_TIMEOUT_MILLIS = 500;
+ private final Comparator<ResolveInfo> mAzComparator;
+
protected final Handler mHandler = new Handler(Looper.getMainLooper()) {
public void handleMessage(Message msg) {
switch (msg.what) {
@@ -90,7 +95,7 @@
}
};
- AbstractResolverComparator(Context context, Intent intent) {
+ public AbstractResolverComparator(Context context, Intent intent) {
String scheme = intent.getScheme();
mHttp = "http".equals(scheme) || "https".equals(scheme);
mContentType = intent.getType();
@@ -100,6 +105,7 @@
mDefaultBrowserPackageName = mHttp
? mPm.getDefaultBrowserPackageNameAsUser(UserHandle.myUserId())
: null;
+ mAzComparator = new AzInfoComparator(context);
}
// get annotations of content from intent.
@@ -168,6 +174,20 @@
return lhsSpecific ? -1 : 1;
}
}
+
+ final boolean lPinned = lhsp.isPinned();
+ final boolean rPinned = rhsp.isPinned();
+
+ // Pinned items always receive priority.
+ if (lPinned && !rPinned) {
+ return -1;
+ } else if (!lPinned && rPinned) {
+ return 1;
+ } else if (lPinned && rPinned) {
+ // If both items are pinned, resolve the tie alphabetically.
+ return mAzComparator.compare(lhsp.getResolveInfoAt(0), rhsp.getResolveInfoAt(0));
+ }
+
return compare(lhs, rhs);
}
@@ -258,4 +278,26 @@
}
return false;
}
+
+
+ /**
+ * Sort intents alphabetically based on package name.
+ */
+ class AzInfoComparator implements Comparator<ResolveInfo> {
+ Collator mCollator;
+ AzInfoComparator(Context context) {
+ mCollator = Collator.getInstance(context.getResources().getConfiguration().locale);
+ }
+
+ @Override
+ public int compare(ResolveInfo lhsp, ResolveInfo rhsp) {
+ if (lhsp == null) {
+ return -1;
+ } else if (rhsp == null) {
+ return 1;
+ }
+ return mCollator.compare(lhsp.activityInfo.packageName, rhsp.activityInfo.packageName);
+ }
+ }
+
}
diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java
index 6c372e4..b31bc52 100644
--- a/core/java/com/android/internal/app/ChooserActivity.java
+++ b/core/java/com/android/internal/app/ChooserActivity.java
@@ -43,6 +43,7 @@
import android.content.IntentSender;
import android.content.IntentSender.SendIntentException;
import android.content.ServiceConnection;
+import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
@@ -64,6 +65,7 @@
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
+import android.os.Environment;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
@@ -73,6 +75,7 @@
import android.os.ResultReceiver;
import android.os.UserHandle;
import android.os.UserManager;
+import android.os.storage.StorageManager;
import android.provider.DeviceConfig;
import android.provider.DocumentsContract;
import android.provider.Downloads;
@@ -121,6 +124,7 @@
import com.google.android.collect.Lists;
+import java.io.File;
import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -241,6 +245,9 @@
private static final int MAX_EXTRA_INITIAL_INTENTS = 2;
private static final int MAX_EXTRA_CHOOSER_TARGETS = 2;
+ private SharedPreferences mPinnedSharedPrefs;
+ private static final String PINNED_SHARED_PREFS_NAME = "chooser_pin_settings";
+
@Retention(SOURCE)
@IntDef({CONTENT_PREVIEW_FILE, CONTENT_PREVIEW_IMAGE, CONTENT_PREVIEW_TEXT})
private @interface ContentPreviewType {
@@ -580,6 +587,8 @@
Intent.EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER);
setSafeForwardingMode(true);
+ mPinnedSharedPrefs = getPinnedSharedPrefs(this);
+
pa = intent.getParcelableArrayExtra(Intent.EXTRA_EXCLUDE_COMPONENTS);
if (pa != null) {
ComponentName[] names = new ComponentName[pa.length];
@@ -710,6 +719,22 @@
}
}
+ static SharedPreferences getPinnedSharedPrefs(Context context) {
+ // The code below is because in the android:ui process, no one can hear you scream.
+ // The package info in the context isn't initialized in the way it is for normal apps,
+ // so the standard, name-based context.getSharedPreferences doesn't work. Instead, we
+ // build the path manually below using the same policy that appears in ContextImpl.
+ // This fails silently under the hood if there's a problem, so if we find ourselves in
+ // the case where we don't have access to credential encrypted storage we just won't
+ // have our pinned target info.
+ final File prefsFile = new File(new File(
+ Environment.getDataUserCePackageDirectory(StorageManager.UUID_PRIVATE_INTERNAL,
+ context.getUserId(), context.getPackageName()),
+ "shared_prefs"),
+ PINNED_SHARED_PREFS_NAME + ".xml");
+ return context.getSharedPreferences(prefsFile, MODE_PRIVATE);
+ }
+
/**
* Returns true if app prediction service is defined and the component exists on device.
*/
@@ -1272,9 +1297,10 @@
}
ComponentName name = ri.activityInfo.getComponentName();
+ boolean pinned = mPinnedSharedPrefs.getBoolean(name.flattenToString(), false);
ResolverTargetActionsDialogFragment f =
new ResolverTargetActionsDialogFragment(ri.loadLabel(getPackageManager()),
- name);
+ name, pinned);
f.show(getFragmentManager(), TARGET_DETAILS_FRAGMENT_TAG);
}
@@ -1697,7 +1723,6 @@
allAppTargets.get(indexInAllShortcuts));
}
}
-
// Sort ChooserTargets by score in descending order
Comparator<ChooserTarget> byScore =
(ChooserTarget a, ChooserTarget b) -> -Float.compare(a.getScore(), b.getScore());
@@ -1945,6 +1970,11 @@
}
return false;
}
+
+ @Override
+ public boolean isComponentPinned(ComponentName name) {
+ return mPinnedSharedPrefs.getBoolean(name.flattenToString(), false);
+ }
}
@Override
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index 0997cf8..3257329 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -1263,6 +1263,7 @@
public final ComponentName name;
private final List<Intent> mIntents = new ArrayList<>();
private final List<ResolveInfo> mResolveInfos = new ArrayList<>();
+ private boolean mPinned;
public ResolvedComponentInfo(ComponentName name, Intent intent, ResolveInfo info) {
this.name = name;
@@ -1303,6 +1304,14 @@
}
return -1;
}
+
+ public boolean isPinned() {
+ return mPinned;
+ }
+
+ public void setPinned(boolean pinned) {
+ mPinned = pinned;
+ }
}
class ItemClickListener implements AdapterView.OnItemClickListener,
diff --git a/core/java/com/android/internal/app/ResolverListAdapter.java b/core/java/com/android/internal/app/ResolverListAdapter.java
index 4570c6f..bb7ca35 100644
--- a/core/java/com/android/internal/app/ResolverListAdapter.java
+++ b/core/java/com/android/internal/app/ResolverListAdapter.java
@@ -376,6 +376,10 @@
final DisplayResolveInfo
dri = new DisplayResolveInfo(intent, add,
replaceIntent != null ? replaceIntent : defaultIntent, makePresentationGetter(add));
+ dri.setPinned(rci.isPinned());
+ if (rci.isPinned()) {
+ Log.i(TAG, "Pinned item: " + rci.name);
+ }
addResolveInfo(dri);
if (replaceIntent == intent) {
// Only add alternates if we didn't get a specific replacement from
diff --git a/core/java/com/android/internal/app/ResolverListController.java b/core/java/com/android/internal/app/ResolverListController.java
index 6cc60b7..b456ca0 100644
--- a/core/java/com/android/internal/app/ResolverListController.java
+++ b/core/java/com/android/internal/app/ResolverListController.java
@@ -150,11 +150,21 @@
newInfo.activityInfo.packageName, newInfo.activityInfo.name);
final ResolverActivity.ResolvedComponentInfo rci =
new ResolverActivity.ResolvedComponentInfo(name, intent, newInfo);
+ rci.setPinned(isComponentPinned(name));
into.add(rci);
}
}
}
+
+ /**
+ * Whether this component is pinned by the user. Always false for resolver; overridden in
+ * Chooser.
+ */
+ public boolean isComponentPinned(ComponentName name) {
+ return false;
+ }
+
// Filter out any activities that the launched uid does not have permission for.
// To preserve the inputList, optionally will return the original list if any modification has
// been made.
diff --git a/core/java/com/android/internal/app/ResolverTargetActionsDialogFragment.java b/core/java/com/android/internal/app/ResolverTargetActionsDialogFragment.java
index a49240c..df91c4a 100644
--- a/core/java/com/android/internal/app/ResolverTargetActionsDialogFragment.java
+++ b/core/java/com/android/internal/app/ResolverTargetActionsDialogFragment.java
@@ -23,6 +23,7 @@
import android.content.ComponentName;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
@@ -36,26 +37,33 @@
implements DialogInterface.OnClickListener {
private static final String NAME_KEY = "componentName";
private static final String TITLE_KEY = "title";
+ private static final String PINNED_KEY = "pinned";
// Sync with R.array.resolver_target_actions_* resources
- private static final int APP_INFO_INDEX = 0;
+ private static final int TOGGLE_PIN_INDEX = 0;
+ private static final int APP_INFO_INDEX = 1;
public ResolverTargetActionsDialogFragment() {
}
- public ResolverTargetActionsDialogFragment(CharSequence title, ComponentName name) {
+ public ResolverTargetActionsDialogFragment(CharSequence title, ComponentName name,
+ boolean pinned) {
Bundle args = new Bundle();
args.putCharSequence(TITLE_KEY, title);
args.putParcelable(NAME_KEY, name);
+ args.putBoolean(PINNED_KEY, pinned);
setArguments(args);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Bundle args = getArguments();
+ final int itemRes = args.getBoolean(PINNED_KEY, false)
+ ? R.array.resolver_target_actions_unpin
+ : R.array.resolver_target_actions_pin;
return new Builder(getContext())
.setCancelable(true)
- .setItems(R.array.resolver_target_actions, this)
+ .setItems(itemRes, this)
.setTitle(args.getCharSequence(TITLE_KEY))
.create();
}
@@ -65,6 +73,19 @@
final Bundle args = getArguments();
ComponentName name = args.getParcelable(NAME_KEY);
switch (which) {
+ case TOGGLE_PIN_INDEX:
+ SharedPreferences sp = ChooserActivity.getPinnedSharedPrefs(getContext());
+ final String key = name.flattenToString();
+ boolean currentVal = sp.getBoolean(name.flattenToString(), false);
+ if (currentVal) {
+ sp.edit().remove(key).apply();
+ } else {
+ sp.edit().putBoolean(key, true).apply();
+ }
+
+ // Force the chooser to requery and resort things
+ getActivity().recreate();
+ break;
case APP_INFO_INDEX:
Intent in = new Intent().setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
.setData(Uri.fromParts("package", name.getPackageName(), null))
diff --git a/core/java/com/android/internal/app/chooser/DisplayResolveInfo.java b/core/java/com/android/internal/app/chooser/DisplayResolveInfo.java
index c77444e..f92637c 100644
--- a/core/java/com/android/internal/app/chooser/DisplayResolveInfo.java
+++ b/core/java/com/android/internal/app/chooser/DisplayResolveInfo.java
@@ -51,6 +51,7 @@
private final List<Intent> mSourceIntents = new ArrayList<>();
private boolean mIsSuspended;
private ResolveInfoPresentationGetter mResolveInfoPresentationGetter;
+ private boolean mPinned = false;
public DisplayResolveInfo(Intent originalIntent, ResolveInfo pri, Intent pOrigIntent,
ResolveInfoPresentationGetter resolveInfoPresentationGetter) {
@@ -179,4 +180,13 @@
public boolean isSuspended() {
return mIsSuspended;
}
+
+ @Override
+ public boolean isPinned() {
+ return mPinned;
+ }
+
+ public void setPinned(boolean pinned) {
+ mPinned = pinned;
+ }
}
diff --git a/core/java/com/android/internal/app/chooser/NotSelectableTargetInfo.java b/core/java/com/android/internal/app/chooser/NotSelectableTargetInfo.java
index 22cbdaa6..69d5ce4 100644
--- a/core/java/com/android/internal/app/chooser/NotSelectableTargetInfo.java
+++ b/core/java/com/android/internal/app/chooser/NotSelectableTargetInfo.java
@@ -85,4 +85,8 @@
public boolean isSuspended() {
return false;
}
+
+ public boolean isPinned() {
+ return false;
+ }
}
diff --git a/core/java/com/android/internal/app/chooser/SelectableTargetInfo.java b/core/java/com/android/internal/app/chooser/SelectableTargetInfo.java
index 1cc4857..86a0d10 100644
--- a/core/java/com/android/internal/app/chooser/SelectableTargetInfo.java
+++ b/core/java/com/android/internal/app/chooser/SelectableTargetInfo.java
@@ -301,6 +301,11 @@
return results;
}
+ @Override
+ public boolean isPinned() {
+ return mSourceInfo != null && mSourceInfo.isPinned();
+ }
+
/**
* Necessary methods to communicate between {@link SelectableTargetInfo}
* and {@link ResolverActivity} or {@link ChooserActivity}.
diff --git a/core/java/com/android/internal/app/chooser/TargetInfo.java b/core/java/com/android/internal/app/chooser/TargetInfo.java
index b59def1..f56ab17 100644
--- a/core/java/com/android/internal/app/chooser/TargetInfo.java
+++ b/core/java/com/android/internal/app/chooser/TargetInfo.java
@@ -122,7 +122,12 @@
List<Intent> getAllSourceIntents();
/**
- * @return true if this target can be selected by the user
+ * @return true if this target cannot be selected by the user
*/
boolean isSuspended();
+
+ /**
+ * @return true if this target should be pinned to the front by the request of the user
+ */
+ boolean isPinned();
}
diff --git a/core/java/com/android/internal/compat/IPlatformCompat.aidl b/core/java/com/android/internal/compat/IPlatformCompat.aidl
index 5857642..045a680 100644
--- a/core/java/com/android/internal/compat/IPlatformCompat.aidl
+++ b/core/java/com/android/internal/compat/IPlatformCompat.aidl
@@ -133,7 +133,7 @@
boolean isChangeEnabledByUid(long changeId, int uid);
/**
- * Add overrides to compatibility changes.
+ * Add overrides to compatibility changes. Kills the app to allow the changes to take effect.
*
* @param overrides Parcelable containing the compat change overrides to be applied.
* @param packageName The package name of the app whose changes will be overridden.
@@ -142,7 +142,28 @@
void setOverrides(in CompatibilityChangeConfig overrides, in String packageName);
/**
- * Revert overrides to compatibility changes.
+ * Add overrides to compatibility changes. Doesn't kill the app, to be only used in tests.
+ *
+ * @param overrides Parcelable containing the compat change overrides to be applied.
+ * @param packageName The package name of the app whose changes will be overridden.
+ *
+ */
+ void setOverridesForTest(in CompatibilityChangeConfig overrides, in String packageName);
+
+ /**
+ * Removes an override previously added via {@link #setOverrides(CompatibilityChangeConfig,
+ * String)}. This restores the default behaviour for the given change and app, once any app
+ * processes have been restarted.
+ * Kills the app to allow the changes to take effect.
+ *
+ * @param changeId The ID of the change that was overridden.
+ * @param packageName The app package name that was overridden.
+ * @return {@code true} if an override existed;
+ */
+ boolean clearOverride(long changeId, String packageName);
+
+ /**
+ * Revert overrides to compatibility changes. Kills the app to allow the changes to take effect.
*
* @param packageName The package name of the app whose overrides will be cleared.
*
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl
index 20706bb..aa0ac37 100644
--- a/core/java/com/android/internal/statusbar/IStatusBar.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl
@@ -197,5 +197,5 @@
/**
* Dismiss the warning that the device is about to go to sleep due to user inactivity.
*/
- void dismissInattentiveSleepWarning();
+ void dismissInattentiveSleepWarning(boolean animated);
}
diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
index 76235a4..a9f7b84 100644
--- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
@@ -122,5 +122,5 @@
/**
* Dismiss the warning that the device is about to go to sleep due to user inactivity.
*/
- void dismissInattentiveSleepWarning();
+ void dismissInattentiveSleepWarning(boolean animated);
}
diff --git a/core/java/com/android/internal/util/ScreenshotHelper.java b/core/java/com/android/internal/util/ScreenshotHelper.java
index cac691c..f6f187f 100644
--- a/core/java/com/android/internal/util/ScreenshotHelper.java
+++ b/core/java/com/android/internal/util/ScreenshotHelper.java
@@ -6,6 +6,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
+import android.net.Uri;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
@@ -58,7 +59,7 @@
*/
public void takeScreenshot(final int screenshotType, final boolean hasStatus,
final boolean hasNav, @NonNull Handler handler,
- @Nullable Consumer<Boolean> completionConsumer) {
+ @Nullable Consumer<Uri> completionConsumer) {
takeScreenshot(screenshotType, hasStatus, hasNav, SCREENSHOT_TIMEOUT_MS, handler,
completionConsumer);
}
@@ -88,7 +89,7 @@
*/
public void takeScreenshot(final int screenshotType, final boolean hasStatus,
final boolean hasNav, long timeoutMs, @NonNull Handler handler,
- @Nullable Consumer<Boolean> completionConsumer) {
+ @Nullable Consumer<Uri> completionConsumer) {
synchronized (mScreenshotLock) {
if (mScreenshotConnection != null) {
return;
@@ -108,7 +109,7 @@
}
}
if (completionConsumer != null) {
- completionConsumer.accept(false);
+ completionConsumer.accept(null);
}
}
};
@@ -135,7 +136,7 @@
}
}
if (completionConsumer != null) {
- completionConsumer.accept(true);
+ completionConsumer.accept((Uri) msg.obj);
}
}
};
@@ -148,7 +149,7 @@
} catch (RemoteException e) {
Log.e(TAG, "Couldn't take screenshot: " + e);
if (completionConsumer != null) {
- completionConsumer.accept(false);
+ completionConsumer.accept(null);
}
}
}
diff --git a/core/java/com/android/internal/widget/DecorCaptionView.java b/core/java/com/android/internal/widget/DecorCaptionView.java
index 4014c45..b5d787c2 100644
--- a/core/java/com/android/internal/widget/DecorCaptionView.java
+++ b/core/java/com/android/internal/widget/DecorCaptionView.java
@@ -123,6 +123,8 @@
private void init(Context context) {
mDragSlop = ViewConfiguration.get(context).getScaledTouchSlop();
mGestureDetector = new GestureDetector(context, this);
+ setContentDescription(context.getString(R.string.accessibility_freeform_caption,
+ context.getPackageManager().getApplicationLabel(context.getApplicationInfo())));
}
@Override
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 545538b..e1ca1f6 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -375,7 +375,7 @@
<protected-broadcast android:name="android.net.wifi.p2p.THIS_DEVICE_CHANGED" />
<protected-broadcast android:name="android.net.wifi.p2p.PEERS_CHANGED" />
<protected-broadcast android:name="android.net.wifi.p2p.CONNECTION_STATE_CHANGE" />
- <protected-broadcast android:name="android.net.wifi.p2p.PERSISTENT_GROUPS_CHANGED" />
+ <protected-broadcast android:name="android.net.wifi.p2p.action.WIFI_P2P_PERSISTENT_GROUPS_CHANGED" />
<protected-broadcast android:name="android.net.conn.TETHER_STATE_CHANGED" />
<protected-broadcast android:name="android.net.conn.INET_CONDITION_ACTION" />
<protected-broadcast android:name="android.net.conn.NETWORK_CONDITIONS_MEASURED" />
@@ -660,7 +660,6 @@
android:icon="@drawable/perm_group_contacts"
android:label="@string/permgrouplab_contacts"
android:description="@string/permgroupdesc_contacts"
- android:request="@string/permgrouprequest_contacts"
android:priority="100" />
<!-- Allows an application to read the user's contacts data.
@@ -691,7 +690,6 @@
android:icon="@drawable/perm_group_calendar"
android:label="@string/permgrouplab_calendar"
android:description="@string/permgroupdesc_calendar"
- android:request="@string/permgrouprequest_calendar"
android:priority="200" />
<!-- Allows an application to read the user's calendar data.
@@ -722,7 +720,6 @@
android:icon="@drawable/perm_group_sms"
android:label="@string/permgrouplab_sms"
android:description="@string/permgroupdesc_sms"
- android:request="@string/permgrouprequest_sms"
android:priority="300" />
<!-- Allows an application to send SMS messages.
@@ -841,7 +838,6 @@
android:icon="@drawable/perm_group_storage"
android:label="@string/permgrouplab_storage"
android:description="@string/permgroupdesc_storage"
- android:request="@string/permgrouprequest_storage"
android:priority="900" />
<!-- Allows an application to read from external storage.
@@ -930,10 +926,6 @@
android:icon="@drawable/perm_group_location"
android:label="@string/permgrouplab_location"
android:description="@string/permgroupdesc_location"
- android:request="@string/permgrouprequest_location"
- android:requestDetail="@string/permgrouprequestdetail_location"
- android:backgroundRequest="@string/permgroupbackgroundrequest_location"
- android:backgroundRequestDetail="@string/permgroupbackgroundrequestdetail_location"
android:priority="400" />
<!-- Allows an app to access precise location.
@@ -985,7 +977,6 @@
android:icon="@drawable/perm_group_call_log"
android:label="@string/permgrouplab_calllog"
android:description="@string/permgroupdesc_calllog"
- android:request="@string/permgrouprequest_calllog"
android:priority="450" />
<!-- Allows an application to access the IMS call service: making and
@@ -1074,7 +1065,6 @@
android:icon="@drawable/perm_group_phone_calls"
android:label="@string/permgrouplab_phone"
android:description="@string/permgroupdesc_phone"
- android:request="@string/permgrouprequest_phone"
android:priority="500" />
<!-- Allows read only access to phone state, including the phone number of the device,
@@ -1195,7 +1185,6 @@
android:icon="@drawable/perm_group_microphone"
android:label="@string/permgrouplab_microphone"
android:description="@string/permgroupdesc_microphone"
- android:request="@string/permgrouprequest_microphone"
android:priority="600" />
<!-- Allows an application to record audio.
@@ -1217,7 +1206,6 @@
android:icon="@drawable/perm_group_activity_recognition"
android:label="@string/permgrouplab_activityRecognition"
android:description="@string/permgroupdesc_activityRecognition"
- android:request="@string/permgrouprequest_activityRecognition"
android:priority="1000" />
<!-- Allows an application to recognize physical activity.
@@ -1260,7 +1248,6 @@
android:icon="@drawable/perm_group_camera"
android:label="@string/permgrouplab_camera"
android:description="@string/permgroupdesc_camera"
- android:request="@string/permgrouprequest_camera"
android:priority="700" />
<!-- Required to be able to access the camera device.
@@ -1299,7 +1286,6 @@
android:icon="@drawable/perm_group_sensors"
android:label="@string/permgrouplab_sensors"
android:description="@string/permgroupdesc_sensors"
- android:request="@string/permgrouprequest_sensors"
android:priority="800" />
<!-- Allows an application to access data from sensors that the user uses to
@@ -1615,6 +1601,7 @@
<!-- Allows network stack services (Connectivity and Wifi) to coordinate
<p>Not for use by third-party or privileged applications.
+ @SystemApi
@hide This should only be used by Connectivity and Wifi Services.
-->
<permission android:name="android.permission.NETWORK_STACK"
@@ -1622,6 +1609,7 @@
<!-- Allows Settings and SystemUI to call methods in Networking services
<p>Not for use by third-party or privileged applications.
+ @SystemApi
@hide This should only be used by Settings and SystemUI.
-->
<permission android:name="android.permission.NETWORK_SETTINGS"
@@ -3583,7 +3571,8 @@
android:protectionLevel="signature" />
<!-- Allows an application to configure and connect to Wifi displays
- @hide -->
+ @hide
+ @SystemApi -->
<permission android:name="android.permission.CONFIGURE_WIFI_DISPLAY"
android:protectionLevel="signature" />
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 485162c..c8ced192 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Gee <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> toegang tot hierdie toestel se ligging?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Die program sal net toegang tot die ligging hê terwyl jy die program gebruik"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Laat <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> toe om <b>enige tyd</b> toegang tot jou toestel se ligging te kry?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Program kan tans net toegang tot ligging kry terwyl jy die program gebruik"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"by jou kalender in te gaan"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Gee <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> toegang tot jou kalender?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tik om te kyk wat geblokkeer word."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Stelsel"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Instellings"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Bystandmodus"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Die Android TV-toestel sal binnekort afskakel; druk \'n knoppie om dit aan te hou."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Die toestel gaan binnekort afskakel; druk om dit aan te hou."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofoon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"wys tans bo-oor ander programme op jou skerm"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Regstreekse deling is nie beskikbaar nie"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Programmelys"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Opneemtoestemming is nie aan hierdie program verleen nie, maar dit kan oudio deur hierdie USB-toestel opneem."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Tuis"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Terug"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Onlangse programme"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Kennisgewings"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Kitsinstellings"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Kragdialoog"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Wissel verdeelde skerm"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Sluitskerm"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Skermkiekie"</string>
</resources>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index f0a4307..eff754c 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -286,7 +286,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> የዚህ መሣሪያ አካባቢን እንዲደርስ ይፈቀድለት?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"መተግበሪያው እርስዎ ሲጠቀሙበት ብቻ ነው የአካባቢው መዳረሻ የሚኖረው"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"የዚህን መሣሪያ መገኛ አካባቢ <b>ሁልጊዜ</b> መድረስ እንዲችል ለ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ይፈቀድ?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"እርስዎ መተግበሪያውን እየተጠቀሙ እያሉ መተግበሪያ አሁን ላይ የመገኛ አካባቢን መድረስ ይችላል"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"ይህ እርስዎ መተግበሪያውን በማይጠቀሙበት ጊዜ እንኳ የእርስዎን መገኛ አካባቢ ሁልጊዜ መድረስ ሊፈልግ ይችል ይሆናል። በ"<annotation id="link">"ቅንብሮች"</annotation>" ውስጥ ይፍቀዱ።"</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"ቀን መቁጠሪያ"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"የእርስዎን ቀን መቁጠሪያ ይድረሱበት"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ቀን መቁጠሪያዎን እንዲደርስ ይፈቀድለት?"</string>
@@ -1963,9 +1963,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"ምን እንደታገደ ለመፈተሽ መታ ያድርጉ።"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"ሥርዓት"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ቅንብሮች"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"ተጠባባቂ"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"የAndroid TV መሣሪያው በቅርቡ ይጠፋል፣ እንደበራ ለማቆየት ይጫኑ።"</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"መሣሪያው በቅርቡ ይጠፋል፤ እንደበራ ለማቆየት ይጫኑ።"</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"ካሜራ"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"ማይክሮፎን"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"በማያዎ ላይ በሌሎች መተግበሪያዎች ላይ በማሳየት ላይ"</string>
@@ -2006,22 +2003,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"ቀጥታ ማጋራት አይገኝም"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"የመተግበሪያዎች ዝርዝር"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"ይህ መተግበሪያ የመቅረጽ ፈቃድ አልተሰጠውም፣ ነገር ግን በዚህ ዩኤስቢ መሣሪያ በኩል ኦዲዮን መቅረጽ ይችላል።"</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"መነሻ"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"ተመለስ"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"የቅርብ ጊዜ መተግበሪያዎች"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"ማሳወቂያዎች"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"ፈጣን ቅንብሮች"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"የኃይል መገናኛ"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"የተከፈለ ማያን ቀያይር"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"የማያ ገጽ ቁልፍ"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"ቅጽበታዊ ገጽ እይታ"</string>
</resources>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 4ecf6e7..7f75fad 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -298,7 +298,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"هل تريد السماح لتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بالوصول إلى الموقع الجغرافي لهذا الجهاز؟"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"لن يكون بإمكان التطبيق الوصول إلى الموقع الجغرافي إلا عند استخدامك لهذا التطبيق."</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"هل تريد السماح للتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بالوصول إلى الموقع الجغرافي لهذا الجهاز <b>طوال الوقت</b>؟"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"لا يمكن للتطبيقات الآن معرفة الموقع الجغرافي إلا عند استخدامك للتطبيق."</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"التقويم"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"الوصول تقويمك"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"هل تريد السماح لتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بالدخول إلى التقويم؟"</string>
@@ -2095,9 +2096,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"انقر للاطّلاع على ما تم حظره."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"النظام"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"الإعدادات"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"وضع الاستعداد"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"سيتم إيقاف جهاز Android TV قريبًا، اضغط على أحد الأزرار لمواصلة تشغيله."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"سيتم إيقاف الجهاز قريبًا، اضغط لمواصلة تشغيله."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"كاميرا"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"ميكروفون"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"العرض فوق التطبيقات الأخرى على شاشتك"</string>
@@ -2142,22 +2140,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"لا تتوفّر إمكانية المشاركة المباشرة."</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"قائمة التطبيقات"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"لم يتم منح هذا التطبيق إذن تسجيل، ولكن يمكنه تسجيل الصوت من خلال جهاز USB هذا."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"الشاشة الرئيسية"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"رجوع"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"التطبيقات المستخدمة مؤخرًا"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"الإشعارات"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"الإعدادات السريعة"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"مربّع حوار الطاقة"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"تبديل \"تقسيم الشاشة\""</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"شاشة القفل"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"لقطة شاشة"</string>
</resources>
diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml
index 81a04b7..31604ef 100644
--- a/core/res/res/values-as/strings.xml
+++ b/core/res/res/values-as/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>ক এই ডিভাইচটোৰ অৱস্থান জানিবলৈ অনুমতি দিবনে?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"আপুনি এই এপ্ ব্যৱহাৰ কৰি থকাৰ সময়তহে ই আপোনাৰ অৱস্থান এক্সেছ কৰিব পাৰে"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b&gtক এই ডিভাইচটোৰ অৱস্থান <b>সকলো সময়তে</b> এক্সেছ কৰিবলৈ দিবনে?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"আপুনি কোনো এপ্ ব্যৱহাৰ কৰি থকাৰ সময়তহে সেই এপ্টোৱে অৱস্থান এক্সেছ কৰিব পাৰিব"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"কেলেণ্ডাৰ"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"আপোনাৰ কেলেণ্ডাৰ ব্যৱহাৰ কৰিব পাৰে"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>ক আপোনাৰ কেলেণ্ডাৰ চাবলৈ অনুমতি দিবনে?"</string>
@@ -1771,10 +1772,8 @@
<string name="package_updated_device_owner" msgid="1847154566357862089">"আপোনাৰ প্ৰশাসকে আপেডট কৰিছে"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"আপোনাৰ প্ৰশাসকে মচিছে"</string>
<string name="confirm_battery_saver" msgid="639106420541753635">"ঠিক আছে"</string>
- <!-- no translation found for battery_saver_description_with_learn_more (1002571337088673987) -->
- <skip />
- <!-- no translation found for battery_saver_description (2307555792915978653) -->
- <skip />
+ <string name="battery_saver_description_with_learn_more" msgid="1002571337088673987">"বেটাৰীৰ জীৱনকাল বৃদ্ধি কৰিবলৈ, বেটাৰি সঞ্চয়কাৰীয়ে:\n·গাঢ় ৰঙৰ থীম অন কৰে\n·নেপথ্যৰ কাৰ্যকলাপ, কিছুমান ভিজুৱেল প্ৰভাৱ আৰু “Hey Google”ৰ দৰে অন্য সুবিধাসমূহ অফ কৰে অথবা সেইবোৰ সীমাবদ্ধ কৰে\n\n"<annotation id="url">"অধিক জানক"</annotation></string>
+ <string name="battery_saver_description" msgid="2307555792915978653">"বেটাৰীৰ জীৱনকাল বৃদ্ধি কৰিবলৈ, বেটাৰি সঞ্চয়কাৰীয়ে:\n·গাঢ় ৰঙৰ থীম অন কৰে\n·নেপথ্যৰ কাৰ্যকলাপ, কিছুমান ভিজুৱেল প্ৰভাৱ আৰু “Hey Google”ৰ দৰে অন্য সুবিধাসমূহ অফ কৰে অথবা সেইবোৰ সীমাবদ্ধ কৰে"</string>
<string name="data_saver_description" msgid="6015391409098303235">"ডেটা ব্য়ৱহাৰ মাত্ৰা কম কৰিবৰ বাবে ডেটা সঞ্চয়কাৰীয়ে কিছুমান এপক নেপথ্য়ত ডেটা প্ৰেৰণ বা সংগ্ৰহ কৰাত বাধা প্ৰদান কৰে। আপুনি বৰ্তমান ব্য়ৱহাৰ কৰি থকা এটা এপে ডেটা ব্য়ৱহাৰ কৰিব পাৰে, কিন্তু সঘনাই এই কার্য কৰিব নোৱাৰিব পাৰে। ইয়াৰ অৰ্থ এইয়ে হ\'ব পাৰে যে, উদাহৰণস্বৰূপে, আপুনি নিটিপা পর্যন্ত প্ৰতিচ্ছবিসমূহ দেখুওৱা নহ’ব।"</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"ডেটা সঞ্চয়কাৰী অন কৰিবনে?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"অন কৰক"</string>
@@ -1965,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"কি কি অৱৰোধ কৰা হৈছে জানিবলৈ টিপক।"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"ছিষ্টেম"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ছেটিংসমূহ"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"ষ্টেণ্ডবাই"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV ডিভাইচটো অতি সোনকালে অফ হ\'ব, এইটো অন ৰাখিবলৈ যিকোনো এটা বুটাম টিপক।"</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"এই ডিভাইচটো অতি সোনকালে অফ হ\'ব, এইটো অন ৰাখিবলৈ টিপক।"</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"কেমেৰা"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"মাইক্ৰ\'ফ\'ন"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"স্ক্ৰীণত অইন এপৰ ওপৰত দেখুৱাওক"</string>
@@ -2008,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"পোনপটীয়া শ্বেয়াৰৰ সুবিধা নাই"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"এপ্সমূহৰ সূচী"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"এই এপ্টোক ৰেকর্ড কৰাৰ অনুমতি দিয়া হোৱা নাই কিন্তু ই এই ইউএছবি ডিভাইচটোৰ জৰিয়তে অডিঅ\' ৰেকর্ড কৰিব পাৰে।"</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"গৃহ"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"উভতি যাওক"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"শেহতীয়া এপ্সমূহ"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"জাননীসমূহ"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"ক্ষিপ্ৰ ছেটিংসমূহ"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"পাৱাৰ ডায়লগ"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"বিভাজিত স্ক্ৰীন ট’গল কৰক"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"লক স্ক্ৰীন"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"স্ক্ৰীণশ্বট"</string>
</resources>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
index 9f43c36..40f5201 100644
--- a/core/res/res/values-az/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tətbiqinə bu cihazın məkanına daxil olmaq icazəsi verilsin?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Tətbiq yalnız ondan istifadə etiyiniz zaman məkanı əldə edə bilər"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tətbiqin bu cihazın məkanına daxil olmasına icazə verilsin<b>all the time</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Tətbiq yalnız ondan istifadə etdiyiniz zaman məkana daxil ola biləcək"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Təqvim"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"təqvimə daxil olun"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tətbiqinə təqvimə daxil olmaq icazəsi verilsin?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Nəyin blok edildiyini yoxlamaq üçün klikləyin."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Ayarlar"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Gözləmə rejimi"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV cihazı tezliklə sönəcək; aktiv saxlamaq üçün düyməyə basın."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Cihaz tezliklə sönəcək; aktiv saxlamaq üçün basın."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"ekrandakı digər tətbiqlərdə göstərin"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Birbaşa paylaşım əlçatan deyil"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Tətbiq siyahısı"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Bu tətbiqə yazmaq icazəsi verilməyib, lakin, bu USB vasitəsilə səs yaza bilər."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Əsas səhifə"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Geri"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Son Tətbiqlər"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Bildirişlər"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Sürətli Ayarlar"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Yandırıb-söndürmə dialoqu"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Bölünmüş Ekrana keçid"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Kilid Ekranı"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Ekran şəkli"</string>
</resources>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index a6ad733..5e56c64 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -289,7 +289,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Želite li da omogućite da <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> pristupa lokaciji ovog uređaja?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Aplikacija će imati pristup lokaciji samo dok koristite aplikaciju"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Želite li da dozvolite da <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> pristupa lokaciji uređaja <b>u bilo kom trenutku</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Aplikacija trenutno može da pristupa lokaciji samo kada koristite aplikaciju"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"Ova aplikacija možda želi da pristupa lokaciji sve vreme, čak i kada ne koristite aplikaciju. Omogućite u "<annotation id="link">"podešavanjima"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendar"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"pristupi kalendaru"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Želite li da omogućite da <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> pristupa kalendaru?"</string>
@@ -1996,9 +1996,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Dodirnite da biste proverili šta je blokirano."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Podešavanja"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Stanje pripravnosti"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV će se uskoro isključiti. Pritisnite dugme da bi ostao uključen."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Uređaj će se uskoro isključiti. Pritisnite da bi ostao uključen."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"prikazuje se na ekranu dok koristite druge aplikacije"</string>
@@ -2040,22 +2037,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Direktno deljenje nije dostupno"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Lista aplikacija"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Ova aplikacija nema dozvolu za snimanje, ali bi mogla da snima zvuk pomoću ovog USB uređaja."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Početak"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Nazad"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Nedavne aplikacije"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Obaveštenja"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Brza podešavanja"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Dijalog napajanja"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Uključite/isključite podeljeni ekran"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Zaključani ekran"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Snimak ekrana"</string>
</resources>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index 92cad08..6e22721 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -292,7 +292,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Дазволіць праграме <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> доступ да звестак аб месцазнаходжанні гэтай прылады?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Праграма будзе мець доступ да звестак пра месцазнаходжанне толькі падчас карыстання ёю"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Дазволіць праграме <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> доступ да даных пра месцазнаходжанне гэтай прылады <b>ўвесь час</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Цяпер праграма можа мець доступ да звестак пра месцазнаходжанне, толькі калі яна выкарыстоўваецца"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Каляндар"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"атрымліваць доступ да вашага календара"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Дазволіць праграме <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> доступ да вашага календара?"</string>
@@ -2029,9 +2030,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Націсніце, каб паглядзець заблакіраванае."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Сістэма"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Налады"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Рэжым чакання"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Прылада Android TV неўзабаве выключыцца. Каб пакінуць яе ўключанай, націсніце кнопку."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Прылада неўзабаве выключыцца. Націсніце, каб пакінуць яе ўключанай."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Камера"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Мікрафон"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"паказваецца паверх іншых праграм на экране"</string>
@@ -2074,22 +2072,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Непасрэднае абагульванне недаступнае"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Спіс праграм"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"У гэтай праграмы няма дазволу на запіс, аднак яна зможа запісваць аўдыя праз гэту USB-прыладу."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Галоўная старонка"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Назад"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Нядаўнія праграмы"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Апавяшчэнні"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Хуткія налады"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Дыялогавае акно сілкавання"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Пераключальнік падзеленага экрана"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Экран блакіроўкі"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Здымак экрана"</string>
</resources>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 9a4ca0c..00e2cb7 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Да се разреши ли на <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> да осъществява достъп до местоположението на това устройство?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Само когато използвате приложението, то ще има достъп до местоположението"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Да се разреши ли на <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> достъп до местоположението на това устройство <b>по всяко време</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Понастоящем приложението има достъп до местоположението само когато се използва"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Календар"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"има достъп до календара ви"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Да се разреши ли на <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> да осъществява достъп до календара ви?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Докоснете, за да проверите какво е блокирано."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Система"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Настройки"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Режим на готовност"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Устройството с Android TV скоро ще се изключи. Натиснете бутон, за да остане включено."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Устройството скоро ще се изключи. Натиснете, за да остане включено."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Камера"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Микрофон"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"се показва върху други приложения на екрана"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Няма възможност за директно споделяне"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Списък с приложения"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Приложението няма разрешение за записване, но може да записва звук чрез това USB устройство."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Начало"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Назад"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Скорошни приложения"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Известия"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Бързи настройки"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Диалогов прозорец за захранването"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Превключване на разделения екран"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Заключен екран"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Екранна снимка"</string>
</resources>
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index 4dc5f5c..00974d7 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> অ্যাপকে এই ডিভাইসের লোকেশন অ্যাক্সেস করতে দেবেন?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"আপনি এই অ্যাপ ব্যবহার করার সময়েই শুধু সেটি আপনার লোকেশন অ্যাক্সেস করতে পারবে"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> অ্যাপকে এই ডিভাইসের লোকেশন <b>সব সময়</b> অ্যাক্সেস করার অনুমতি দিতে চান?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"আপনি যখন অ্যাপটি ব্যবহার করবেন শুধুমাত্র তখনই অ্যাপটি বর্তমান লোকেশন অ্যাক্সেস করতে পারবে।"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"ক্যালেন্ডার"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"আপনার ক্যালেন্ডারে অ্যাক্সেস"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-কে আপনার ক্যালেন্ডারে অ্যাক্সেস দেবেন?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"কী কী ব্লক করা আছে তা দেখতে ট্যাপ করুন।"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"সিস্টেম"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"সেটিংস"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"স্ট্যান্ডবাই"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV ডিভাইস শীঘ্রই বন্ধ হয়ে যাবে, চালু রাখতে বোতাম প্রেস করুন।"</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"ডিভাইস শীঘ্রই বন্ধ হয়ে যাবে, চালু রাখতে প্রেস করুন।"</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"ক্যামেরা"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"মাইক্রোফোন"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"স্ক্রিনে অন্যান্য অ্যাপের উপরে দেখানো হচ্ছে"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"সরাসরি শেয়ার করার সুবিধা নেই"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"অ্যাপের তালিকা"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"এই অ্যাপকে রেকর্ড করার অনুমতি দেওয়া হয়নি কিন্তু USB ডিভাইসের মাধ্যমে সেটি অডিও রেকর্ড করতে পারে।"</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"হোম স্ক্রিন"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"ফিরে যান"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"সাম্প্রতিক অ্যাপ"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"বিজ্ঞপ্তি"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"দ্রুত সেটিংস"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"পাওয়ার ডায়লগ"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"স্প্লিট স্ক্রিন টগল করুন"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"লক স্ক্রিন"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"স্ক্রিনশট"</string>
</resources>
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index ea4d209..b426cdc 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -289,7 +289,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Dozvoliti aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> da pristupi lokaciji ovog uređaja?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Aplikacija će imati pristup lokaciji isključivo dok je koristite"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Dozvoliti aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> pristup lokaciji uređaja <b>sve vrijeme</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Aplikacija trenutno može pristupati lokaciji isključivo dok je koristite"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"Moguće je da će aplikacija željeti pristup vašoj lokaciji sve vrijeme, čak i kada je ne budete koristili. Dozvolite u "<annotation id="link">"postavkama"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendar"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"pristupa vašem kalendaru"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Dozvoliti aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> da pristupi vašem kalendaru?"</string>
@@ -1796,8 +1796,8 @@
<string name="package_updated_device_owner" msgid="1847154566357862089">"Ažurirao je vaš administrator"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"Izbrisao je vaš administrator"</string>
<string name="confirm_battery_saver" msgid="639106420541753635">"Uredu"</string>
- <string name="battery_saver_description_with_learn_more" msgid="1002571337088673987">"Da bi se produljilo trajanje baterije, Štednja baterije:\n·Uključuje Tamnu temu.\n·Isključuje ili ograničava aktivnosti u pozadini, neke vizualne efekte i druge značajke kao što je \"Hey Google\".\n\n"<annotation id="url">"Saznajte više"</annotation></string>
- <string name="battery_saver_description" msgid="2307555792915978653">"Da bi se produljilo trajanje baterije, Štednja baterije:\n·Uključuje Tamnu temu.\n·Isključuje ili ograničava aktivnosti u pozadini, neke vizualne efekte i druge značajke kao što je \"Hey Google\"."</string>
+ <string name="battery_saver_description_with_learn_more" msgid="1002571337088673987">"Radi produženja vijeka trajanja baterije, Ušteda baterije:\n·Uključuje Tamnu temu\n·Isključuje ili ograničava aktivnosti u pozadini, određene vizuelne efekte i druge funkcije kao što je \"Hej Google\"\n\n"<annotation id="url">"Saznajte više"</annotation></string>
+ <string name="battery_saver_description" msgid="2307555792915978653">"Radi produženja vijeka trajanja baterije, Ušteda baterije:\n·Uključuje Tamnu temu\n·Isključuje ili ograničava aktivnosti u pozadini, određene vizuelne efekte i druge funkcije kao što je \"Hej Google\""</string>
<string name="data_saver_description" msgid="6015391409098303235">"Da bi se smanjio prijenos podataka, Ušteda podataka sprečava da neke aplikacije šalju ili primaju podatke u pozadini. Aplikacija koju trenutno koristite može pristupiti podacima, ali će to činiti rjeđe. To može značiti, naprimjer, da se slike ne prikazuju sve dok ih ne dodirnete."</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"Uključiti Uštedu podataka?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"Uključi"</string>
@@ -1998,9 +1998,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Dodirnite da provjerite šta je blokirano."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Postavke"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Stanje mirovanja"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV uređaj će se uskoro isključiti. Pritisnite dugme da ostane uključen."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Uređaj će se uskoro isključiti. Pritisnite da ostane uključen."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"prikazivanje preko drugih aplikacija na ekranu"</string>
@@ -2042,22 +2039,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Direktno dijeljenje nije dostupno"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Spisak aplikacija"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Ovoj aplikaciji nije dato odobrenje za snimanje, ali može snimati zvuk putem ovog USB uređaja."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Početna stranica"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Nazad"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Nedavne aplikacije"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Obavještenja"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Brze postavke"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Dijaloški okvir za napajanje"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Uključi/isključi podijeljeni ekran"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Zaključavanje ekrana"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Snimak ekrana"</string>
</resources>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 4f9eeb8..02a78dd 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Vols permetre que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> accedeixi a la ubicació del dispositiu?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"L\'aplicació només tindrà accés a la ubicació quan l\'estiguis utilitzant"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Vols permetre que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> accedeixi sempre <b>sempre</b> a la ubicació d\'aquest dispositiu?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Actualment l\'aplicació només pot accedir a la ubicació quan l\'estàs utilitzant"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendari"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"accedir al calendari"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Vols permetre que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> accedeixi al calendari?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Toca per consultar què s\'ha bloquejat."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Configuració"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"En espera"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"El dispositiu Android TV s\'apagarà aviat; prem un botó per mantenir-lo encès."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"El dispositiu s\'apagarà aviat; prem per mantenir-lo encès."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Càmera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Micròfon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"es mostra sobre altres aplicacions a la pantalla"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"La compartició directa no està disponible"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Llista d\'aplicacions"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Aquesta aplicació no té permís de gravació, però pot capturar àudio a través d\'aquest dispositiu USB."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Inici"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Torna"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Aplicacions recents"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Notificacions"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Configuració ràpida"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Quadre de diàleg d\'engegada"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Commuta Pantalla dividida"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Pantalla de bloqueig"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Captura de pantalla"</string>
</resources>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 502a7a8..39b197d 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -292,7 +292,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Povolit aplikaci <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> přístup k poloze tohoto zařízení?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Aplikace bude mít přístup k poloze, pouze když ji budete používat"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Povolit aplikaci <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> přístup k poloze zařízení <b>po celou dobu</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Aplikace má přístup k poloze, pouze když ji používáte"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendář"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"přístup ke kalendáři"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Povolit aplikaci <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> přístup ke kalendáři?"</string>
@@ -2029,9 +2030,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Klepnutím zkontrolujete, co je blokováno."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Systém"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Nastavení"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Pohotovostní režim"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Zařízení Android TV se brzy vypne, stisknutím tlačítka ho ponecháte zapnuté."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Zařízení se brzy vypne, stisknutím ho ponecháte zapnuté."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Fotoaparát"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"zobrazení přes ostatní aplikace na obrazovce"</string>
@@ -2074,22 +2072,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Přímé sdílení není k dispozici"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Seznam aplikací"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Tato aplikace nemá oprávnění k nahrávání, ale může zaznamenávat zvuk prostřednictvím tohoto zařízení USB."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Plocha"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Zpět"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Nedávné aplikace"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Oznámení"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Rychlé nastavení"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Dialogové okno k napájení"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Přepnout rozdělenou obrazovku"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Obrazovka uzamčení"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Snímek obrazovky"</string>
</resources>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index d347e35..6d16732 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Vil du give <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> adgang til enhedens placering?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Appen har kun adgang til placeringen, når du bruger appen"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Skal <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> <b>altid</b> have adgang til denne enheds placering?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Appen kan i øjeblikket kun få adgang til placeringen, mens du bruger appen"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"have adgang til din kalender"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Vil du give <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> adgang til din kalender?"</string>
@@ -1079,7 +1080,7 @@
<string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
<string name="selectAll" msgid="6876518925844129331">"Markér alt"</string>
<string name="cut" msgid="3092569408438626261">"Klip"</string>
- <string name="copy" msgid="2681946229533511987">"Kopier"</string>
+ <string name="copy" msgid="2681946229533511987">"Kopiér"</string>
<string name="failed_to_copy_to_clipboard" msgid="1833662432489814471">"Der kunne ikke kopieres til udklipsholderen"</string>
<string name="paste" msgid="5629880836805036433">"Indsæt"</string>
<string name="paste_as_plain_text" msgid="5427792741908010675">"Indsæt som almindelig tekst"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tryk for at se, hvad der er blokeret."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Indstillinger"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Standby"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV-enheden slukker snart. Tryk på en knap for at holde den tændt."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Enheden slukker snart. Tryk for at holde den tændt."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"vises over andre apps på din skærm"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Det er ikke muligt at dele direkte"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Liste over apps"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Denne app har ikke fået tilladelse til at optage, men optager muligvis lyd via denne USB-enhed."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Hjem"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Tilbage"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Seneste apps"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Notifikationer"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Kvikmenu"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Dialogboks om strøm"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Slå Opdelt skærm til eller fra"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Låseskærm"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Screenshot"</string>
</resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index b4b40ea..cbcb4a3 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Zulassen, dass die App <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> den Gerätestandort abruft?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Die App hat nur Zugriff auf den Gerätestandort, solange du sie verwendest"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Zulassen, dass <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> <b>ständig</b> auf deinen Standort zugreift?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Die App hat gegenwärtig nur dann Zugriff auf den Gerätestandort, wenn du sie verwendest"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"auf deinen Kalender zugreifen"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Zulassen, dass <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> auf deinen Kalender zugreift?"</string>
@@ -1771,10 +1772,8 @@
<string name="package_updated_device_owner" msgid="1847154566357862089">"Von deinem Administrator aktualisiert"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"Von deinem Administrator gelöscht"</string>
<string name="confirm_battery_saver" msgid="639106420541753635">"Ok"</string>
- <!-- no translation found for battery_saver_description_with_learn_more (1002571337088673987) -->
- <skip />
- <!-- no translation found for battery_saver_description (2307555792915978653) -->
- <skip />
+ <string name="battery_saver_description_with_learn_more" msgid="1002571337088673987">"Der Energiesparmodus sorgt für eine längere Akkulaufzeit:\n·Das dunkle Design wird aktiviert\n·Hintergrundaktivitäten, einige optische Effekte und weitere Funktionen wie \"Ok Google\" werden abgeschaltet oder eingeschränkt\n\n"<annotation id="url">"Weitere Informationen"</annotation></string>
+ <string name="battery_saver_description" msgid="2307555792915978653">"Der Energiesparmodus sorgt für eine längere Akkulaufzeit:\n Das dunkle Design wird aktiviert\n·Hintergrundaktivitäten, einige optische Effekte und weitere Funktionen wie \"Ok Google\" werden abgeschaltet oder eingeschränkt"</string>
<string name="data_saver_description" msgid="6015391409098303235">"Der Datensparmodus verhindert zum einen, dass Apps im Hintergrund Daten senden oder empfangen, sodass weniger Daten verbraucht werden. Zum anderen werden die Datenzugriffe der gerade aktiven App eingeschränkt, was z. B. dazu führen kann, dass Bilder erst angetippt werden müssen, bevor sie sichtbar werden."</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"Datensparmodus aktivieren?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"Aktivieren"</string>
@@ -1965,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tippe, um zu überprüfen, welche Inhalte blockiert werden."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Einstellungen"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Standby"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Das Android TV-Gerät wird demnächst abgeschaltet. Drücke eine Taste, damit es eingeschaltet bleibt."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Das Gerät wird demnächst abgeschaltet. Drücke beispielsweise eine Taste oder berühre den Bildschirm, damit es eingeschaltet bleibt."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"wird über anderen Apps auf dem Bildschirm angezeigt"</string>
@@ -2008,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Direct Share nicht verfügbar"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Liste der Apps"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Diese App hat noch keine Berechtigung zum Aufnehmen erhalten, könnte aber Audioaufnahmen über dieses USB-Gerät machen."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Startseite"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Zurück"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Letzte Apps"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Benachrichtigungen"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Schnelleinstellungen"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Kleines Fenster für Akkustand"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"\"Bildschirm teilen\" ein-/ausschalten"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Sperrbildschirm"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Screenshot"</string>
</resources>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 73828a1..c017495 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -286,7 +286,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Να επιτρέπεται στην εφαρμογή <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> να έχει πρόσβαση στην τοποθεσία αυτής της συσκευής;"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Η εφαρμογή θα έχει πρόσβαση στην τοποθεσία μόνο κατά τη διάρκεια χρήσης της εφαρμογής"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Να επιτρέπεται η πρόσβαση της εφαρμογής <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> στην τοποθεσία της συσκευής<b>διαρκώς</b>;"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Οι εφαρμογές μπορούν αυτήν τη στιγμή να έχουν πρόσβαση στην τοποθεσία μόνο κατά τη χρήση της εφαρμογής"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"Αυτή η εφαρμογή θέλει να έχει συνεχώς πρόσβαση στην τοποθεσία σας, ακόμη και όταν δεν χρησιμοποιείτε την εφαρμογή. Εγκρίνετε το αίτημα στις "<annotation id="link">"ρυθμίσεις"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Ημερολόγιο"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"έχει πρόσβαση στο ημερολόγιό σας"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Να επιτρέπεται στην εφαρμογή <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> να έχει πρόσβαση στο ημερολόγιό σας;"</string>
@@ -1963,9 +1963,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Πατήστε για να ελέγξετε το περιεχόμενο που έχει αποκλειστεί."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Σύστημα"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Ρυθμίσεις"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Κατάσταση αναμονής"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Η συσκευή Android TV σύντομα θα απενεργοποιηθεί. Πατήστε ένα κουμπί για να την κρατήσετε ενεργοποιημένη."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Η συσκευή σύντομα θα απενεργοποιηθεί. Πατήστε για να την κρατήσετε ενεργοποιημένη."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Κάμερα"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Μικρόφωνο"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"εμφανίζεται πάνω σε άλλες εφαρμογές στην οθόνη σας"</string>
@@ -2006,22 +2003,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Η άμεση κοινοποίηση δεν είναι διαθέσιμη"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Λίστα εφαρμογών"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Δεν έχει εκχωρηθεί άδεια εγγραφής σε αυτήν την εφαρμογή, αλλά μέσω αυτής της συσκευής USB θα μπορεί να εγγράφει ήχο."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Αρχική οθόνη"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Επιστροφή"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Πρόσφατες εφαρμογές"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Ειδοποιήσεις"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Γρήγορες ρυθμίσεις"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Παράθυρο διαλόγου λειτουργίας συσκευής"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Εναλλαγή διαχωρισμού οθόνης"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Οθόνη κλειδώματος"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Στιγμιότυπο οθόνης"</string>
</resources>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 9163214..8c42b04 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -286,7 +286,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access this device\'s location?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"The app will only have access to the location while you’re using the app"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access this device’s location <b>all the time</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"App currently can access location only while you’re using the app"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"This app may want to access your location all the time, even when you’re not using the app. Allow in "<annotation id="link">"settings"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendar"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"access your calendar"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your calendar?"</string>
@@ -1963,9 +1963,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tap to check what\'s blocked."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Settings"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Standby"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"The Android TV device will soon turn off; press a button to keep it on."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"The device will soon turn off; press to keep it on."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Camera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Microphone"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"displaying over other apps on your screen"</string>
@@ -2006,22 +2003,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Direct share not available"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Apps list"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"This app has not been granted record permission but could capture audio through this USB device."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Home"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Back"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Recent Apps"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Notifications"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Quick Settings"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Power Dialogue"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Toggle Split Screen"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Lock Screen"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Screenshot"</string>
</resources>
diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml
index dff558f..2efffbb 100644
--- a/core/res/res/values-en-rCA/strings.xml
+++ b/core/res/res/values-en-rCA/strings.xml
@@ -286,7 +286,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access this device\'s location?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"The app will only have access to the location while you’re using the app"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access this device’s location <b>all the time</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"App currently can access location only while you’re using the app"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"This app may want to access your location all the time, even when you’re not using the app. Allow in "<annotation id="link">"settings"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendar"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"access your calendar"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your calendar?"</string>
@@ -1963,9 +1963,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tap to check what\'s blocked."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Settings"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Standby"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"The Android TV device will soon turn off; press a button to keep it on."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"The device will soon turn off; press to keep it on."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Camera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Microphone"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"displaying over other apps on your screen"</string>
@@ -2006,22 +2003,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Direct share not available"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Apps list"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"This app has not been granted record permission but could capture audio through this USB device."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Home"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Back"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Recent Apps"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Notifications"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Quick Settings"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Power Dialogue"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Toggle Split Screen"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Lock Screen"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Screenshot"</string>
</resources>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 9163214..8c42b04 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -286,7 +286,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access this device\'s location?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"The app will only have access to the location while you’re using the app"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access this device’s location <b>all the time</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"App currently can access location only while you’re using the app"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"This app may want to access your location all the time, even when you’re not using the app. Allow in "<annotation id="link">"settings"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendar"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"access your calendar"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your calendar?"</string>
@@ -1963,9 +1963,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tap to check what\'s blocked."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Settings"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Standby"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"The Android TV device will soon turn off; press a button to keep it on."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"The device will soon turn off; press to keep it on."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Camera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Microphone"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"displaying over other apps on your screen"</string>
@@ -2006,22 +2003,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Direct share not available"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Apps list"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"This app has not been granted record permission but could capture audio through this USB device."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Home"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Back"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Recent Apps"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Notifications"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Quick Settings"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Power Dialogue"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Toggle Split Screen"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Lock Screen"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Screenshot"</string>
</resources>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 9163214..8c42b04 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -286,7 +286,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access this device\'s location?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"The app will only have access to the location while you’re using the app"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access this device’s location <b>all the time</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"App currently can access location only while you’re using the app"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"This app may want to access your location all the time, even when you’re not using the app. Allow in "<annotation id="link">"settings"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendar"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"access your calendar"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your calendar?"</string>
@@ -1963,9 +1963,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tap to check what\'s blocked."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Settings"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Standby"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"The Android TV device will soon turn off; press a button to keep it on."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"The device will soon turn off; press to keep it on."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Camera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Microphone"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"displaying over other apps on your screen"</string>
@@ -2006,22 +2003,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Direct share not available"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Apps list"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"This app has not been granted record permission but could capture audio through this USB device."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Home"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Back"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Recent Apps"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Notifications"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Quick Settings"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Power Dialogue"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Toggle Split Screen"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Lock Screen"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Screenshot"</string>
</resources>
diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml
index 7519ad6..d32edab 100644
--- a/core/res/res/values-en-rXC/strings.xml
+++ b/core/res/res/values-en-rXC/strings.xml
@@ -286,7 +286,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access this device\'s location?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"The app will only have access to the location while you’re using the app"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access this device’s location <b>all the time</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"App currently can access location only while you’re using the app"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"This app may want to access your location all the time, even when you’re not using the app. Allow in "<annotation id="link">"settings"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendar"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"access your calendar"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access your calendar?"</string>
@@ -1963,9 +1963,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tap to check what\'s blocked."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Settings"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Standby"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"The Android TV device will soon turn off; press a button to keep it on."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"The device will soon turn off; press to keep it on."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Camera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Microphone"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"displaying over other apps on your screen"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 0381249..ad59833 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"¿Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda a la ubicación de este dispositivo?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"La app solo tendrá acceso a la ubicación cuando esté en uso"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"¿Quieres permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda a la ubicación de este dispositivo <b>todo el tiempo</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Actualmente, la app puede acceder a la ubicación solo cuando está en uso"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendario"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"acceder al calendario"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"¿Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda a tu calendario?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Presiona para consultar lo que está bloqueado."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Configuración"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"En espera"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Pronto se apagará el dispositivo Android TV; presiona un botón para mantenerlo encendido."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Pronto se apagará el dispositivo; presiona para mantenerlo encendido."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Cámara"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Micrófono"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"se superpone a otras apps en tu pantalla"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"No está disponible el uso compartido directo"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Lista de apps"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Aunque no se le otorgó permiso de grabación a esta app, puede capturar audio con este dispositivo USB."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Página principal"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Atrás"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Apps recientes"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Notificaciones"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Configuración rápida"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Diálogo de encendido"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Activar o desactivar pantalla dividida"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Bloquear pantalla"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Captura de pantalla"</string>
</resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 7f152e1..7071263 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -286,7 +286,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"¿Quieres permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda a la ubicación de este dispositivo?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"La aplicación solo podrá acceder a la ubicación cuando la estés usando"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"¿Quieres permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda siempre <b>a la ubicación de tu dispositivo</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Actualmente la aplicación puede acceder a la ubicación solo cuando la estés usando"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"Es posible que esta aplicación quiera acceder a tu ubicación siempre, aunque no la estés usando. Puedes darle permiso en "<annotation id="link">"Ajustes"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendario"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"acceder a tu calendario"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"¿Quieres permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda a tu calendario?"</string>
@@ -1963,9 +1963,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Toca para consultar lo que se está bloqueando."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Ajustes"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Inactividad"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"El dispositivo Android TV pronto se apagará, pulsa un botón para evitarlo."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"El dispositivo pronto se apagará si no interactúas con él para evitarlo."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Cámara"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Micrófono"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"se muestra sobre otras aplicaciones que haya en la pantalla"</string>
@@ -2006,22 +2003,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"No se puede compartir directamente"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Lista de aplicaciones"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Esta aplicación no tiene permiso para grabar, pero podría registrar audio con este dispositivo USB."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Inicio"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Atrás"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Aplicaciones recientes"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Notificaciones"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Ajustes rápidos"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Abrir cuadro de diálogo"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Activar o desactivar la pantalla dividida"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Pantalla de bloqueo"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Captura de pantalla"</string>
</resources>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index a48c482..0bf37ce 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Kas lubada rakendusele <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> juurdepääs selle seadme asukohale?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Rakendusel on juurdepääs asukohale vaid sel ajal, kui rakendust kasutate"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Kas lubada rakendusel <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> <b>alati</b> seadme asukohale juurde pääseda?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Rakendusel on praegu juurdepääs asukohale vaid sel ajal, kui rakendust kasutate."</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"juurdepääs kalendrile"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Kas lubada rakendusele <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> juurdepääs teie kalendrile?"</string>
@@ -789,7 +790,7 @@
<string name="relationTypeDomesticPartner" msgid="6904807112121122133">"Elukaaslane"</string>
<string name="relationTypeFather" msgid="5228034687082050725">"Isa"</string>
<string name="relationTypeFriend" msgid="7313106762483391262">"Sõber"</string>
- <string name="relationTypeManager" msgid="6365677861610137895">"Haldur"</string>
+ <string name="relationTypeManager" msgid="6365677861610137895">"Juht"</string>
<string name="relationTypeMother" msgid="4578571352962758304">"Ema"</string>
<string name="relationTypeParent" msgid="4755635567562925226">"Vanem"</string>
<string name="relationTypePartner" msgid="7266490285120262781">"Partner"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Puudutage, et kontrollida, mis on blokeeritud."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Süsteem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Seaded"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Ooterežiim"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV seade lülitub varsti välja; selle aktiivsena hoidmiseks vajutage nuppu."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Seade lülitub värsti välja; selle aktiivsena hoidmiseks vajutage nuppu."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kaamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"teie ekraanil muude rakenduste peal kuvamine"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Vahetu jagamine ei ole saadaval"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Rakenduste loend"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Sellele rakendusele pole antud salvestamise luba, kuid see saab heli jäädvustada selle USB-seadme kaudu."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Avakuva"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Tagasi"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Hiljutised rakendused"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Märguanded"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Kiirseaded"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Energiasäästja dialoog"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Vaheta jagatud ekraanikuva"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Lukustuskuva"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Ekraanipilt"</string>
</resources>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index 805df6e..1985c77 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Gailuaren kokapena atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Hura erabiltzen ari zarenean soilik atzituko du aplikazioak kokapena"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Gailuaren kokapena <b>beti</b> atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Aplikazioak hura darabilzunean atzi dezake kokapena"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Egutegia"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"atzitu egutegia"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Egutegia atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Sakatu zer dagoen blokeatuta ikusteko."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Ezarpenak"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Egonean"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV gailua laster itzaliko da; sakatu botoi bat piztuta mantentzeko."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Gailua laster itzaliko da; sakatu piztuta mantentzeko."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofonoa"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"pantailako beste aplikazioen gainean bistaratzen"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Zuzenean partekatzeko aukera ez dago erabilgarri"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Aplikazioen zerrenda"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Aplikazioak ez du grabatzeko baimenik, baina baliteke audioa grabatzea USB bidezko gailu horren bidez."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Pantaila nagusia"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Atzera"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Erabilitako azken aplikazioak"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Jakinarazpenak"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Ezarpen bizkorrak"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Piztu edo itzaltzeko leihoa"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Aktibatu/Desaktibatu pantaila zatitua"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Pantaila blokeatua"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Pantaila-argazkia"</string>
</resources>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 98044c6..97c889d 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"به <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> اجازه داده شود به مکان این دستگاه دسترسی پیدا کند؟"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"این برنامه فقط وقتی از آن استفاده میکنید، به مکان دسترسی خواهد داشت"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"به <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> اجازه میدهید <b>همیشه</b> به مکان این دستگاه دسترسی یابد؟"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"درحالحاضر برنامه، فقط وقتی از آن استفاده میکنید، میتواند به مکان دسترسی یابد"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"تقویم"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"دسترسی به تقویم شما"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"به <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> اجازه داده شود به تقویم شما دسترسی پیدا کند؟"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"برای بررسی موارد مسدودشده ضربه بزنید."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"سیستم"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"تنظیمات"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"آمادهبهکار"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"دستگاه Android TV بهزودی خاموش میشود، برای روشن نگهداشتن آن، دکمهای را فشار دهید."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"دستگاه بهزودی خاموش میشود، برای روشن نگهداشتن آن فشار دهید."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"دوربین"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"میکروفون"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"نمایش روی برنامههای دیگر در صفحهنمایش"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"اشتراکگذاری مستقیم دردسترس نیست"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"فهرست برنامهها"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"مجوز ضبط به این برنامه داده نشده است اما میتواند صدا را ازطریق این دستگاه USB ضبط کند."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"صفحه اصلی"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"برگشت"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"برنامههای اخیر"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"اعلانها"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"تنظیمات سریع"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"کادر گفتگوی روشن/خاموش"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"تغییر وضعیت صفحهٔ دونیمه"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"صفحه قفل"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"عکس صفحهنمایش"</string>
</resources>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 3476bf5..9d44aad 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Saako <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> oikeuden nähdä tämän laitteen sijainnin?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Sovellus saa sijainnin käyttöoikeuden vain silloin, kun käytät sovellusta"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Saako <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> käyttää laitteen sijaintia <b>aina</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Sovellus saa tällä hetkellä sijainnin käyttöoikeuden vain, jos käytät sovellusta"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalenteri"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"käyttää kalenteria"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Saako <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> kalenterisi käyttöoikeuden?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Napauta niin näet, mitä on estetty."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Järjestelmä"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Asetukset"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Säästötila"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV ‑laite sammuu pian. Pidä se päällä painamalla painiketta."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Laite sammuu pian. Pidä se päällä painamalla."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofoni"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"näkyy näytöllä muiden sovellusten päällä"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Suora jakaminen ei käytettävissä"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Sovellusluettelo"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Sovellus ei ole saanut tallennuslupaa mutta voi tallentaa ääntä tämän USB-laitteen avulla."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Aloitusnäyttö"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Takaisin"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Viimeisimmät sovellukset"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Ilmoitukset"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Pika-asetukset"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Virran valintaikkuna"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Jaettu näyttö päälle/pois"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Lukitusnäyttö"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Kuvakaappaus"</string>
</resources>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index 702ecc0..273ae5c 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Autoriser <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> à accéder à la position de cet appareil?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"L\'application aura uniquement accès à la position lorsque vous l\'utilisez"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Autoriser « <xliff:g id="APP_NAME">%1$s</xliff:g> » à accéder à la position de cet appareil en tout temps?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Pour le moment, l\'application peut uniquement accéder à la position lorsque vous l\'utilisez"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Agenda"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"accéder à votre agenda"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Autoriser <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> à accéder à votre agenda?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Touchez l\'écran pour vérifier ce qui est bloqué."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Système"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Paramètres"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Veille"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"L\'appareil Android TV va bientôt s\'éteindre. Appuyez sur un bouton pour le laisser allumé."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"L\'appareil va bientôt s\'éteindre. Interagissez avec lui pour le laisser allumé."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Appareil photo"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Microphone"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"superpose du contenu par-dessus d\'autres applications à l\'écran"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Le partage direct n\'est pas disponible"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Liste des applications"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Cette application n\'a pas été autorisée à effectuer des enregistrements, mais elle pourrait capturer du contenu audio par l\'intermédiaire de cet appareil USB."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Accueil"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Retour"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Applications récentes"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Notifications"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Paramètres rapides"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Boîte de dialogue sur l\'alimentation"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Basculer l\'écran partagé"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Écran de verrouillage"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Capture d\'écran"</string>
</resources>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index eb199de..8d8b365 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Autoriser l\'appli <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> à accéder à la position de cet appareil ?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"L\'application n\'a accès à la position de l\'appareil que lorsqu\'elle est ouverte"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Autoriser <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> à accéder <b>en permanence</b> à la position de cet appareil ?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"L\'application peut actuellement accéder à la position uniquement pendant que vous l\'utilisez"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Agenda"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"accéder à votre agenda"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Permettre à <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> d\'accéder à votre agenda ?"</string>
@@ -1965,9 +1966,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Appuyez pour vérifier les contenus bloqués."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Système"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Paramètres"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Mode Veille imminent"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"L\'appareil Android TV va bientôt passer en mode Veille. Appuyez sur un bouton pour qu\'il reste allumé."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"L\'appareil va bientôt passer en mode Veille. Appuyez dessus pour qu\'il reste allumé."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Caméra"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Micro"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"se superpose aux autres applications sur l\'écran"</string>
@@ -2008,22 +2006,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Le partage direct n\'est pas disponible"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Liste des applications"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Cette application n\'a pas reçu l\'autorisation d\'enregistrer des contenus audio, mais peut le faire via ce périphérique USB."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Accueil"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Retour"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Applications récentes"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Notifications"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Configuration rapide"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Boîte de dialogue Marche/Arrêt"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Activer/Désactiver l\'écran partagé"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Verrouiller l\'écran"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Capture d\'écran"</string>
</resources>
diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml
index 9659973..d3a6840 100644
--- a/core/res/res/values-gl/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Permitir que a aplicación <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda á localización deste dispositivo?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"A aplicación só terá acceso á localización mentres a esteas utilizando"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Queres permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda á localización deste dispositivo <b>sempre</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Actualmente, a aplicación pode acceder á localización só mentres a utilices"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendario"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"acceder ao teu calendario"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Queres permitir que a aplicación <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda ao teu calendario?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Toca para comprobar o contido bloqueado."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Configuración"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Modo de espera"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Pronto se apagará o dispositivo Android TV. Preme un botón para mantelo acendido."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Pronto se apagará o teléfono. Tócao para mantelo acendido."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Cámara"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Micrófono"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"mostrando outras aplicacións na pantalla"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Non está dispoñible a función de compartir directamente"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Lista de aplicacións"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Esta aplicación non está autorizada a realizar gravacións, pero pode capturar audio a través deste dispositivo USB."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Inicio"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Volver"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Aplicacións recentes"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Notificacións"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Configuración rápida"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Diálogo sobre a enerxía"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Activar/desactivar pantalla dividida"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Pantalla de bloqueo"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Captura de pantalla"</string>
</resources>
diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml
index 6dab622..5750c85 100644
--- a/core/res/res/values-gu/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>ને આ ડિવાઇસના સ્થાનને ઍક્સેસ કરવાની મંજૂરી આપીએ?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"જ્યારે તમે ઍપનો ઉપયોગ કરી રહ્યા હશો માત્ર ત્યારે જ ઍપ સ્થાનને ઍક્સેસ કરી શકશે"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>ને આ ડિવાઇસનું સ્થાન <b>હંમેશાં</b> ઍક્સેસ કરવાની મંજૂરી આપીએ?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"હાલમાં માત્ર જ્યારે તમે ઍપનો ઉપયોગ કરી રહ્યા હશો હોય ત્યારે જ ઍપ સ્થાનને ઍક્સેસ કરી શકશે"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"કૅલેન્ડર"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"તમારા કેલેન્ડરને ઍક્સેસ કરવાની"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>ને તમારા કૅલેન્ડરને ઍક્સેસ કરવાની મંજૂરી આપીએ?"</string>
@@ -1342,7 +1343,7 @@
<string name="alert_windows_notification_channel_group_name" msgid="1463953341148606396">"અન્ય ઍપથી ઉપર બતાવો"</string>
<string name="alert_windows_notification_channel_name" msgid="3116610965549449803">"<xliff:g id="NAME">%s</xliff:g> અન્ય ઍપ્લિકેશનોની ઉપર પ્રદર્શિત થઈ રહ્યું છે"</string>
<string name="alert_windows_notification_title" msgid="3697657294867638947">"<xliff:g id="NAME">%s</xliff:g> અન્ય ઍપ્લિકેશનો પર દેખાઈ છે"</string>
- <string name="alert_windows_notification_message" msgid="8917232109522912560">"જો તમે નથી ઇચ્છતા કે <xliff:g id="NAME">%s</xliff:g> આ સુવિધાનો ઉપયોગ કરે, તો સેટિંગ્સ ખોલવા માટે ટૅપ કરો અને તેને બંધ કરો."</string>
+ <string name="alert_windows_notification_message" msgid="8917232109522912560">"જો તમે નથી ઇચ્છતા કે <xliff:g id="NAME">%s</xliff:g> આ સુવિધાનો ઉપયોગ કરે, તો સેટિંગ ખોલવા માટે ટૅપ કરો અને તેને બંધ કરો."</string>
<string name="alert_windows_notification_turn_off_action" msgid="2902891971380544651">"બંધ કરો"</string>
<string name="ext_media_checking_notification_title" msgid="4411133692439308924">"<xliff:g id="NAME">%s</xliff:g> તપાસી રહ્યાં છીએ…"</string>
<string name="ext_media_checking_notification_message" msgid="410185170877285434">"હાલના કન્ટેન્ટને રિવ્યૂ કરવું"</string>
@@ -1888,7 +1889,7 @@
<string name="app_category_image" msgid="4867854544519846048">"ફોટો અને છબીઓ"</string>
<string name="app_category_social" msgid="5842783057834965912">"સામાજિક અને સંચાર"</string>
<string name="app_category_news" msgid="7496506240743986873">"સમાચાર અને સામાયિકો"</string>
- <string name="app_category_maps" msgid="5878491404538024367">"નકશા અને નેવિગેશન"</string>
+ <string name="app_category_maps" msgid="5878491404538024367">"Maps અને નેવિગેશન"</string>
<string name="app_category_productivity" msgid="3742083261781538852">"ઉત્પાદકતા"</string>
<string name="device_storage_monitor_notification_channel" msgid="3295871267414816228">"ડિવાઇસ સ્ટૉરેજ"</string>
<string name="adb_debugging_notification_channel_tv" msgid="5537766997350092316">"USB ડિબગિંગ"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"શું બ્લૉક કરેલ છે તે તપાસવા માટે ટૅપ કરો."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"સિસ્ટમ"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"સેટિંગ"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"સ્ટૅન્ડબાય"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android ટીવી ડિવાઇસ ટૂંક સમયમાં બંધ થશે; તેને ચાલુ રાખવા માટે બટન દબાવો."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"ડિવાઇસ ટૂંક સમયમાં બંધ થશે; તેને ચાલુ રાખવા માટે દબાવો."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"કૅમેરા"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"માઇક્રોફોન"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"આ તમારી સ્ક્રીન પર અન્ય ઍપની ઉપર દેખાશે"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"ડાયરેક્ટ શેર કરવાનું ઉપલબ્ધ નથી"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"ઍપની સૂચિ"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"આ ઍપને રેકૉર્ડ કરવાની પરવાનગી આપવામાં આવી નથી પરંતુ તે આ USB ડિવાઇસ મારફતે ઑડિયો કૅપ્ચર કરી શકે છે."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"હોમ"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"પાછળ"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"તાજેતરની ઍપ"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"નોટિફિકેશન"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"ઝડપી સેટિંગ"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"પાવર સંવાદ"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"સ્ક્રીનને વિભાજિત કરવાની ક્રિયા ટૉગલ કરો"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"લૉક સ્ક્રીન"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"સ્ક્રીનશૉટ"</string>
</resources>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 1a082b9..16a6031 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> को इस डिवाइस की \'जगह की जानकारी\' ऐक्सेस करने की अनुमति देना चाहते हैं?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"ऐप्लिकेशन, डिवाइस की जगह की जानकारी सिर्फ़ तभी देख पाएगा जब आप इसका इस्तेमाल कर रहे हों"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"क्या आप <xliff:g id="APP_NAME">%1$s</xliff:g> को हमेशा के लिए जगह की जानकारी ऐक्सेस करने की अनुमति देना चाहते हैं?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"इस समय ऐप्लिकेशन, डिवाइस की \'जगह की जानकारी\' सिर्फ़ तभी देख पाएगा जब आप इसका इस्तेमाल कर रहे हों"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"कैलेंडर"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"अपने कैलेंडर को ऐक्सेस करने"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> को अपना कैलेंडर देखने की अनुमति देना चाहते हैं?"</string>
@@ -1087,7 +1088,7 @@
<string name="delete" msgid="6098684844021697789">"मिटाएं"</string>
<string name="copyUrl" msgid="2538211579596067402">"यूआरएल को कॉपी करें"</string>
<string name="selectTextMode" msgid="1018691815143165326">"लेख को चुनें"</string>
- <string name="undo" msgid="7905788502491742328">"वापस लाएं"</string>
+ <string name="undo" msgid="7905788502491742328">"पहले जैसा करें"</string>
<string name="redo" msgid="7759464876566803888">"फिर से करें"</string>
<string name="autofill" msgid="3035779615680565188">"ऑटोमैटिक भरना"</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"टेक्स्ट चुनें"</string>
@@ -1771,8 +1772,8 @@
<string name="package_updated_device_owner" msgid="1847154566357862089">"आपके व्यवस्थापक ने अपडेट किया है"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"आपके व्यवस्थापक ने हटा दिया है"</string>
<string name="confirm_battery_saver" msgid="639106420541753635">"ठीक है"</string>
- <string name="battery_saver_description_with_learn_more" msgid="1002571337088673987">"बैटरी लाइफ़ बढ़ाने के लिए बैटरी सेवर:\n·गहरे रंग वाली थीम चालू करता है\n·बैकग्राउंड की गतिविधि, कुछ विज़ुअल इफ़ेक्ट, और दूसरी सुविधाएं, जैसे कि \"Hey Google\" को इस्तेमाल करने से रोकता है या बंद करता है\n\n"<annotation id="url">"ज़्यादा जानें"</annotation></string>
- <string name="battery_saver_description" msgid="2307555792915978653">"बैटरी लाइफ़ बढ़ाने के लिए बैटरी सेवर:\n गहरे रंग वाली थीम चालू करता है\nबैकग्राउंड की गतिविधि, कुछ विज़ुअल इफ़ेक्ट, और दूसरी सुविधाएं, जैसे कि \"Hey Google\" को इस्तेमाल करने से रोकता है या बंद करता है"</string>
+ <string name="battery_saver_description_with_learn_more" msgid="1002571337088673987">"बैटरी लाइफ़ बढ़ाने के लिए बैटरी सेवर:\n·गहरे रंग वाली थीम चालू करता है\n·बैकग्राउंड की गतिविधि, कुछ विज़ुअल इफ़ेक्ट, और \"Hey Google\" जैसी दूसरी सुविधाएं इस्तेमाल करने से रोकता है या बंद करता है\n\n"<annotation id="url">"ज़्यादा जानें"</annotation></string>
+ <string name="battery_saver_description" msgid="2307555792915978653">"बैटरी लाइफ़ बढ़ाने के लिए, बैटरी सेवर:\n गहरे रंग वाली थीम चालू करता है\nबैकग्राउंड की गतिविधि, कुछ विज़ुअल इफ़ेक्ट, और \"Hey Google\" जैसी दूसरी सुविधाएं इस्तेमाल करने से रोकता है या बंद करता है"</string>
<string name="data_saver_description" msgid="6015391409098303235">"डेटा खर्च, कम करने के लिए डेटा सेवर कुछ ऐप्लिकेशन को बैकग्राउंड में डेटा भेजने या डेटा पाने से रोकता है. आप फ़िलहाल जिस ऐप्लिकेशन का इस्तेमाल कर रहे हैं वह डेटा तक पहुंच सकता है लेकिन ऐसा कभी-कभी ही हो पाएगा. उदाहरण के लिए, इमेज तब तक दिखाई नहीं देंगी जब तक कि आप उन्हें टैप नहीं करते."</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"डेटा बचाने की सेटिंग चालू करें?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"चालू करें"</string>
@@ -1888,7 +1889,7 @@
<string name="app_category_image" msgid="4867854544519846048">"फ़ोटो और तस्वीरें"</string>
<string name="app_category_social" msgid="5842783057834965912">"सामाजिक और संचार"</string>
<string name="app_category_news" msgid="7496506240743986873">"समाचार और पत्रिकाएं"</string>
- <string name="app_category_maps" msgid="5878491404538024367">"मैप और मार्गदर्शक"</string>
+ <string name="app_category_maps" msgid="5878491404538024367">"Maps और नेविगेशन ऐप्लिकेशन"</string>
<string name="app_category_productivity" msgid="3742083261781538852">"उत्पादकता"</string>
<string name="device_storage_monitor_notification_channel" msgid="3295871267414816228">"डिवाइस में जगह"</string>
<string name="adb_debugging_notification_channel_tv" msgid="5537766997350092316">"USB डीबग करना"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"टैप करके देखें कि किन चीज़ों पर रोक लगाई गई है."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"सिस्टम"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"सेटिंग"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"स्टैंडबाई"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV डिवाइस जल्द ही बंद हो जाएगा. इसे चालू रखने के लिए किसी बटन को दबाएं."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"डिवाइस जल्द ही बंद हो जाएगा. इसे चालू रखने के लिए स्क्रीन पर टैप करें या किसी बटन को दबाएं."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"कैमरा"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"माइक्रोफ़ोन"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"आपकी स्क्रीन पर, इस्तेमाल हो रहे दूसरे ऐप्लिकेशन के ऊपर दिखाया जा रहा है"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"सीधे शेयर नहीं किया जा सकता"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"ऐप्लिकेशन की सूची"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"इस ऐप्लिकेशन को रिकॉर्ड करने की अनुमति नहीं दी गई है. हालांकि, ऐप्लिकेशन इस यूएसबी डिवाइस से ऐसा कर सकता है."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"होम"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"वापस जाएं"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"हाल ही में इस्तेमाल किए गए ऐप्लिकेशन दिखाएं"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"सूचनाएं खोलें"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"फटाफट सेटिंग खोलें"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"पावर डायलॉग खोलें"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"स्प्लिट स्क्रीन पर टॉगल करें"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"स्क्रीन लॉक करें"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"स्क्रीनशॉट लें"</string>
</resources>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 56d5b20..745401d 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -289,7 +289,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Želite li dopustiti aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> da pristupa lokaciji ovog uređaja?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Aplikacija će imati pristup lokaciji samo dok upotrebljavate aplikaciju"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Želite li dopustiti da <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> pristupa lokaciji ovog uređaja <b>cijelo vrijeme</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Aplikacija trenutačno može pristupiti lokaciji samo dok upotrebljavate aplikaciju"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"Ova aplikacija možda će uvijek htjeti imati pristup vašoj lokaciji, čak i kad je ne koristite. Dopustite u "<annotation id="link">"postavkama"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendar"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"pristupati kalendaru"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Želite li dopustiti aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> da pristupa vašem kalendaru?"</string>
@@ -1996,9 +1996,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Dodirnite da biste provjerili što je blokirano."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sustav"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Postavke"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Stanje mirovanja"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Uređaj Android TV uskoro će se isključiti. Pritisnite gumb da bi ostao uključen."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Uređaj će se uskoro isključiti. Pritisnite da bi ostao uključen."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Fotoaparat"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"prikazuje se preko drugih aplikacija na zaslonu"</string>
@@ -2040,22 +2037,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Izravno dijeljenje nije dostupno"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Popis aplikacija"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Ta aplikacija nema dopuštenje za snimanje, no mogla bi primati zvuk putem ovog USB uređaja."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Početni zaslon"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Natrag"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Nedavne aplikacije"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Obavijesti"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Brze postavke"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Dijalog napajanja"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Uključite ili isključite podijeljeni zaslon"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Zaključajte zaslon"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Snimka zaslona"</string>
</resources>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 184b66a..5df3da7 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Engedélyezi a(z) <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> számára, hogy hozzáférjen az eszköz helyadataihoz?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Az alkalmazás csak akkor férhet hozzá a helyadatokhoz, amikor Ön használja az alkalmazást"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Engedélyezi a(z) <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> számára, hogy <b>mindig</b> hozzáférjen az eszköz helyadataihoz?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Az alkalmazás jelenleg csak akkor férhet hozzá a helyadatokhoz, amikor Ön használja az alkalmazást."</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Naptár"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"hozzáférés a naptárhoz"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Engedélyezi a(z) <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> számára, hogy hozzáférjen a naptárhoz?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Koppintson a letiltott elemek megtekintéséhez."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Rendszer"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Beállítások"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Készenléti mód"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Az Android TV eszköz hamarosan kikapcsol. Nyomja meg valamelyik gombot, hogy bekapcsolva tarthassa."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Az eszköz hamarosan kikapcsol. Nyomja meg, hogy bekapcsolva tarthassa."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"megjelenítés a képernyőn lévő egyéb alkalmazások előtt"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"A közvetlen megosztás nem áll rendelkezésre"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Alkalmazások listája"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Ez az alkalmazás nem rendelkezik rögzítési engedéllyel, de ezzel az USB-eszközzel képes a hangfelvételre."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Kezdőképernyő"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Vissza"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Legutóbbi alkalmazások"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Értesítések"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Gyorsbeállítások"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Akkumulátorral kapcsolatos párbeszédpanel"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Osztott képernyő be- vagy kikapcsolása"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Lezárási képernyő"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Képernyőkép"</string>
</resources>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index fef6f4e..b4b34b5 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Թույլատրե՞լ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> հավելվածին օգտագործել այս սարքի տեղադրության տվյալները"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Տեղադրության տվյալները հասանելի կլինեն հավելվածին, միայն երբ այն օգտագործելիս լինեք"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b>Միշտ</b> հասանելի դարձնե՞լ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> հավելվածին ձեր սարքի տեղադրությունը"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Տեղադրության տվյալները հասանելի կլինեն հավելվածին, միայն երբ այն օգտագործելիս լինեք"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Օրացույց"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"օգտագործել օրացույցը"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Թույլատրե՞լ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> հավելվածին օգտագործել ձեր օրացույցը:"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Հպեք՝ տեսնելու, թե ինչ է արգելափակվել:"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Համակարգ"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Կարգավորումներ"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Սպասման ռեժիմ"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV սարքը շուտով կանջատվի: Սեղմեք որևէ կոճակ՝ միացրած թողնելու համար:"</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Սարքը շուտով կանջատվի: Սեղմեք՝ միացրած թողնելու համար:"</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Տեսախցիկ"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Խոսափող"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"ցուցադրվում է մյուս հավելվածների վրայից"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Direct Share գործառույթը հասանելի չէ"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Հավելվածների ցանկ"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Հավելվածը ձայնագրելու թույլտվություն չունի, սակայն կկարողանա գրանցել ձայնն այս USB սարքի միջոցով։"</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Սկիզբ"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Հետ"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Վերջին օգտագործած հավելվածները"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Ծանուցումներ"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Արագ կարգավորումներ"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Սնուցման պատուհան"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Միացնել/անջատել էկրանի տրոհումը"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Կողպէկրան"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Սքրինշոթ"</string>
</resources>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 87a8804..bc44c02 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -286,7 +286,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Izinkan <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> mengakses lokasi perangkat ini?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Aplikasi ini hanya akan memiliki akses ke lokasi selagi Anda menggunakan aplikasi"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Izinkan <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> mengakses lokasi perangkat ini <b>sepanjang waktu</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Saat ini aplikasi hanya dapat mengakses lokasi selagi Anda menggunakan aplikasi tersebut"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"Aplikasi ini mungkin ingin selalu mengakses lokasi, meski tidak sedang digunakan. Izinkan di "<annotation id="link">"setelan"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"mengakses kalender"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Izinkan <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> mengakses kalender?"</string>
@@ -1963,9 +1963,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Ketuk untuk memeriksa item yang diblokir."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Setelan"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Siaga"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Perangkat Android TV akan segera dimatikan; tekan tombol untuk terus menyalakannya."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Perangkat akan segera dimatikan, tekan untuk terus menyalakannya."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"ditampilkan di atas aplikasi lain di layar"</string>
@@ -2006,22 +2003,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Berbagi langsung tidak tersedia"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Daftar aplikasi"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Aplikasi ini tidak diberi izin merekam, tetapi dapat merekam audio melalui perangkat USB ini."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Beranda"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Kembali"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Aplikasi Baru-Baru Ini"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Notifikasi"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Setelan Cepat"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Dialog Power"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Aktifkan Layar Terpisah"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Layar Kunci"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Screenshot"</string>
</resources>
diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml
index a37eda6..3e76ed1 100644
--- a/core/res/res/values-is/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Viltu veita <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aðgang að staðsetningu þessa tækis?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Forritið hefur aðeins aðgang að staðsetningunni á meðan þú notar forritið"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Viltu leyfa að <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> hafi <b>alltaf</b> aðgang að upplýsingum um staðsetningu þessa tækis?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Forritið hefur sem stendur aðeins aðgang að staðsetningu þinni á meðan þú notar forritið"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Dagatal"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"fá aðgang að dagatalinu þínu"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Viltu veita <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aðgang að dagatalinu þínu?"</string>
@@ -1771,10 +1772,8 @@
<string name="package_updated_device_owner" msgid="1847154566357862089">"Kerfisstjóri uppfærði"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"Kerfisstjóri eyddi"</string>
<string name="confirm_battery_saver" msgid="639106420541753635">"Í lagi"</string>
- <!-- no translation found for battery_saver_description_with_learn_more (1002571337088673987) -->
- <skip />
- <!-- no translation found for battery_saver_description (2307555792915978653) -->
- <skip />
+ <string name="battery_saver_description_with_learn_more" msgid="1002571337088673987">"Til að auka rafhlöðuendingu gerir rafhlöðusparnaður eftirfarandi:\n·Kveikir á dökku þema\n·Slekkur á eða takmarkar bakgrunnsvirkni, tilteknar myndbrellur og aðra eiginleika eins og „Hei Google“.\n\n"<annotation id="url">"Frekari upplýsingar"</annotation></string>
+ <string name="battery_saver_description" msgid="2307555792915978653">"Til að auka rafhlöðuendingu gerir rafhlöðusparnaður eftirfarandi:\n·Kveikir á dökku þema\n·Slekkur á eða takmarkar bakgrunnsvirkni, tilteknar myndbrellur og aðra eiginleika eins og „Hei Google“."</string>
<string name="data_saver_description" msgid="6015391409098303235">"Gagnasparnaður getur hjálpað til við að draga úr gagnanotkun með því að hindra forrit í að senda eða sækja gögn í bakgrunni. Forrit sem er í notkun getur náð í gögn, en gerir það kannski sjaldnar. Niðurstaðan gæti verið, svo dæmi sé tekið, að myndir séu ekki birtar fyrr en þú ýtir á þær."</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"Kveikja á gagnasparnaði?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"Kveikja"</string>
@@ -1965,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Ýttu til að skoða hvað lokað hefur verið á."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Kerfi"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Stillingar"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Biðstaða"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV tækið slekkur á sér fljótlega. Ýttu á takka til að það slokkni ekki á því."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Tækið slekkur á sér fljótlega. Ýttu á takka til að það slokkni ekki á því."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Myndavél"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Hljóðnemi"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"birt yfir öðrum forritum á skjánum"</string>
@@ -2008,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Bein deiling er ekki tiltæk"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Forritalisti"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Þetta forrit hefur ekki fengið heimild fyrir upptöku en gæti tekið upp hljóð í gegnum þetta USB-tæki."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Heim"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Til baka"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Nýleg forrit"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Tilkynningar"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Flýtistillingar"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Gluggi til að slökkva/endurræsa"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Breyta skjáskiptingu"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Lásskjár"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Skjámynd"</string>
</resources>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 2b780d0..ddc0f68 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Consentire a <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> di accedere alla posizione del dispositivo?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"L\'app avrà accesso alla posizione soltanto quando la usi"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Consentire a <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> di accedere <b>sempre</b> alla posizione di questo dispositivo?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"L\'app al momento può accedere alla posizione soltanto mentre la usi"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendario"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"accedere al calendario"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Consentire all\'app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> di accedere al tuo calendario?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tocca per controllare le notifiche bloccate."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Impostazioni"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Standby"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Presto il dispositivo Android TV si spegnerà. Premi un pulsante per tenerlo acceso."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Presto il dispositivo si spegnerà. Premi per tenerlo acceso."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Fotocamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Microfono"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"si sovrappone ad altre app sullo schermo"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Condivisione diretta non disponibile"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Elenco di app"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"A questa app non è stata concessa l\'autorizzazione di registrazione, ma l\'app potrebbe acquisire l\'audio tramite questo dispositivo USB."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Home"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Indietro"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"App recenti"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Notifiche"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Impostazioni rapide"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Finestra di dialogo Alimentazione"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Attiva/disattiva schermo diviso"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Schermata di blocco"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Screenshot"</string>
</resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index dfbf834..c3a8ceb 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -292,7 +292,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"לתת לאפליקציה <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> הרשאת גישה למיקום המכשיר?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"לאפליקציה תהיה גישה אל נתוני המיקום רק בזמן השימוש באפליקציה"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"להתיר ל-<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> לגשת אל מיקום המכשיר הזה <b>כל הזמן</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"האפליקציה יכולה כרגע לגשת אל המיקום רק כשנעשה בה שימוש"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"יומן"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"גישה אל היומן"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"לתת לאפליקציה <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> הרשאת גישה ליומן?"</string>
@@ -2029,9 +2030,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"יש להקיש כדי לבדוק מה חסום."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"מערכת"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"הגדרות"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"המתנה"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"מכשיר Android TV ייכבה בקרוב. יש ללחוץ על לחצן כלשהו כדי שהוא ימשיך לפעול."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"המכשיר ייכבה בקרוב, יש ללחוץ כדי שהוא ימשיך לפעול."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"מצלמה"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"מיקרופון"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"תצוגה מעל אפליקציות אחרות במסך"</string>
@@ -2074,22 +2072,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"שיתוף ישיר אינו זמין"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"רשימת האפליקציות"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"לאפליקציה זו לא ניתנה הרשאת הקלטה, אבל אפשר להקליט אודיו באמצעות התקן ה-USB הזה."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"בית"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"חזרה"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"אפליקציות אחרונות"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"התראות"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"הגדרות מהירות"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"תיבת דו-שיח לגבי הסוללה"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"החלפת מצב של מסך מפוצל"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"מסך הנעילה"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"צילום מסך"</string>
</resources>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 4776980..0e30b182 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -286,7 +286,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"このデバイスの位置情報へのアクセスを「<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>」に許可しますか?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"このアプリは、ユーザーがアプリを使用している間のみ位置情報にアクセスできます"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"このデバイスの位置情報に<b>常に</b>?アクセスすることを <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> に許可します"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"現在、アプリは、ユーザーがアプリを使用している場合のみ位置情報にアクセスできます"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"このアプリは、未使用時も含め、常に位置情報にアクセスしようとすることがあります。["<annotation id="link">"設定"</annotation>"] で許可してください。"</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"カレンダー"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"カレンダーへのアクセス"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"カレンダーへのアクセスを「<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>」に許可しますか?"</string>
@@ -1963,9 +1963,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"タップしてブロック対象をご確認ください。"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"システム"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"設定"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"スタンバイ"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV デバイスはまもなく OFF になります。ON 状態を維持するには、ボタンを押してください。"</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"このデバイスはまもなく OFF になります。ON 状態を維持するには、ボタンを押してください。"</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"カメラ"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"マイク"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"画面の他のアプリの上に重ねて表示"</string>
@@ -2006,22 +2003,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"ダイレクト シェアは利用できません"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"アプリのリスト"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"このアプリに録音権限は付与されていませんが、この USB デバイスから音声を収集できるようになります。"</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"ホーム"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"戻る"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"最近使ったアプリ"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"通知"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"クイック設定"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"電源ダイアログ"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"分割画面の切り替え"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"ロック画面"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"スクリーンショット"</string>
</resources>
diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml
index 7f06b01..552a60f 100644
--- a/core/res/res/values-ka/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -286,7 +286,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"გსურთ, მიანიჭოთ <b><xliff:g id="APP_NAME">%1$s</xliff:g>-ს</b> ამ მოწყობილობის მდებარეობაზე წვდომის ნებართვა?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"ამ აპს მდებარეობაზე წვდომა მხოლოდ მაშინ ექნება, როცა თქვენ მას გამოიყენებთ"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"გსურთ, <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-ს <b>ყოველთვის</b> ჰქონდეს წვდომა ამ მოწყობილობის მდებარეობაზე?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"ამჟამად აპს მდებარეობაზე წვდომა მხოლოდ მაშინ აქვს, როცა თქვენ მას იყენებთ"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"აპი ითხოვს თქვენს მდებარეობაზე წვდომას ნებისმიერ დროს, მაშინაც კი, როცა თქვენ მას არ იყენებთ. უფლების მიცემა შეგიძლიათ "<annotation id="link">"პარამეტრებში"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"კალენდარი"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"თქვენს კალენდარზე წვდომა"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"გსურთ, მიანიჭოთ <b><xliff:g id="APP_NAME">%1$s</xliff:g>-ს</b> თქვენს კალენდარზე წვდომის ნებართვა?"</string>
@@ -1771,10 +1771,8 @@
<string name="package_updated_device_owner" msgid="1847154566357862089">"განახლებულია თქვენი ადმინისტრატორის მიერ"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"წაიშალა თქვენი ადმინისტრატორის მიერ"</string>
<string name="confirm_battery_saver" msgid="639106420541753635">"კარგი"</string>
- <!-- no translation found for battery_saver_description_with_learn_more (1002571337088673987) -->
- <skip />
- <!-- no translation found for battery_saver_description (2307555792915978653) -->
- <skip />
+ <string name="battery_saver_description_with_learn_more" msgid="1002571337088673987">"ელემენტის მუშაობის განრძლივობის მიზნით, ელემენტის დამზოგველი:\n·ირთვება ბნელ თემაზე\n·თიშავს ან ზღუდავს ფონის აქტივობებს, გარკვეულ ვიზუალურ ეფექტებს და სახვა შესაძლებლობებს, როგორიც არის “Hey Google”\n\n"<annotation id="url">"შეიტყვეთ მეტი"</annotation></string>
+ <string name="battery_saver_description" msgid="2307555792915978653">"ელემენტის მუშაობის განრძლივობის მიზნით, ელემენტის დამზოგველი:\n·ირთვება ბნელ თემაზე\n·თიშავს ან ზღუდავს ფონის აქტივობებს, გარკვეულ ვიზუალურ ეფექტებს და სახვა შესაძლებლობებს, როგორიც არის “Hey Google”"</string>
<string name="data_saver_description" msgid="6015391409098303235">"მობილური ინტერნეტის მოხმარების შემცირების მიზნით, მონაცემთა დამზოგველი ზოგიერთ აპს ფონურ რეჟიმში მონაცემთა გაგზავნასა და მიღებას შეუზღუდავს. თქვენ მიერ ამჟამად გამოყენებული აპი მაინც შეძლებს მობილურ ინტერნეტზე წვდომას, თუმცა ამას ნაკლები სიხშირით განახორციელებს. ეს ნიშნავს, რომ, მაგალითად, სურათები არ გამოჩნდება მანამ, სანამ მათ საგანგებოდ არ შეეხებით."</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"ჩაირთოს მონაცემთა დამზოგველი?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"ჩართვა"</string>
@@ -1965,9 +1963,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"შეეხეთ იმის სანახავად, თუ რა არის დაბლოკილი."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"სისტემა"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"პარამეტრები"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"მოლოდინის რეჟიმი"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV მოწყობილობა მალე გამოირთვება, დააჭირეთ ღილაკს, რომ ჩართული დარჩეს."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"მოწყობილობა მალე გამოირთვება, დააჭირეთ, რომ ჩართული დარჩეს."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"კამერა"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"მიკროფონი"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"სხვა აპების გადაფარვით ჩანს თქვენს ეკრანზე"</string>
@@ -2008,22 +2003,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"პირდაპირი გაზიარება მიუწვდომელია"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"აპების სია"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"ამ აპს არ აქვს მინიჭებული ჩაწერის ნებართვა, მაგრამ შეუძლია ჩაიწეროს აუდიო ამ USB მოწყობილობის მეშვეობით."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"მთავარი"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"დაბრუნება"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"ბოლოდროინდელი აპები"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"შეტყობინებები"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"სწრაფი პარამეტრები"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"ელკვების დიალოგი"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"გაყოფილი ეკრანის გადართვა"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"ჩაკეტილი ეკრანი"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"ეკრანის ანაბეჭდი"</string>
</resources>
diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml
index 65da546..e398e73 100644
--- a/core/res/res/values-kk/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> қолданбасына құрылғының орналасқан жері туралы мәліметтерді пайдалануға рұқсат берілсін бе?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Қолданбаны пайдалану кезінде ғана оған геодеректеріңізді көруге рұқсат етіледі."</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> қолданбасына құрылғының геодеректері <b>үнемі</b> көрсетіліп тұрсын ба?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Қолданба геодеректерді тек жұмыс кезінде ғана пайдалана алады."</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Күнтізбе"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"күнтізбеге кіру"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> қолданбасына күнтізбеге кіруге рұқсат берілсін бе?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Түймені түртіп, неге тыйым салынатынын көріңіз."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Жүйе"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Параметрлер"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Күту режимі"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV құрылғысы жақын арада өшеді. Оны қосулы ұстау үшін басыңыз."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Құрылғы жақын арада өшеді. Оны қосулы ұстау үшін басыңыз."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Камера"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Микрофон"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"экранда басқа қолданбалардың үстінен көрсету"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Тікелей бөлісу мүмкін емес."</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Қолданбалар тізімі"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Қолданбаға жазу рұқсаты берілмеді, бірақ ол осы USB құрылғысы арқылы дыбыс жаза алады."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Негізгі экран"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Артқа"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Соңғы пайдаланылған қолданбалар"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Хабарландырулар"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Жылдам параметрлер"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Қуат диалогтік терезесі"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Экранды бөлу мүмкіндігін қосу/өшіру"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Құлып экраны"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Скриншот"</string>
</resources>
diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml
index 32b3ee1..3ce723c 100644
--- a/core/res/res/values-km/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -286,7 +286,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"អនុញ្ញាតឱ្យ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ចូលប្រើទីតាំងរបស់ឧបករណ៍នេះ?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"កម្មវិធីនេះនឹងមានសិទ្ធិចូលប្រើទីតាំង នៅពេលអ្នកកំពុងប្រើកម្មវិធីនេះតែប៉ុណ្ណោះ"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"អនុញ្ញាតឱ្យ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ចូលប្រើទីតាំងរបស់ឧបករណ៍នេះ<b>គ្រប់ពេល</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"បច្ចុប្បន្ន កម្មវិធីអាចចូលប្រើទីតាំង នៅពេលដែលអ្នកកំពុងប្រើប្រាស់កម្មវិធីនោះប៉ុណ្ណោះ"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"កម្មវិធីនេះប្រហែលជាចង់ប្រើទីតាំងរបស់អ្នកគ្រប់ពេល ទោះបីជាអ្នកមិនកំពុងប្រើកម្មវិធីនេះក៏ដោយ។ អនុញ្ញាតនៅក្នុង"<annotation id="link">"ការកំណត់"</annotation>"។"</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"ប្រតិទិន"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"ចូលប្រើប្រិតិទិនរបស់អ្នក"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"អនុញ្ញាតឱ្យ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ចូលប្រើប្រតិទិនរបស់អ្នក?"</string>
@@ -1965,9 +1965,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"សូមចុចដើម្បីមើលថាបានទប់ស្កាត់អ្វីខ្លះ។"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"ប្រព័ន្ធ"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ការកំណត់"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"ផ្អាកដំណើរការ"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"ឧបករណ៍ Android TV នឹងបិទក្នុងពេលឆាប់ៗនេះ សូមចុចប៊ូតុងដើម្បីបន្តបើកឧបករណ៍។"</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"ឧបករណ៍នឹងបិទក្នុងពេលឆាប់ៗនេះ សូមចុចដើម្បីបន្តបើកឧបករណ៍។"</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"កាមេរ៉ា"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"មីក្រូហ្វូន"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"កំពុងបង្ហាញពីលើកម្មវិធីផ្សេងទៀតនៅលើអេក្រង់របស់អ្នក"</string>
@@ -2008,22 +2005,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"មិនមានការចែករំលែកដោយផ្ទាល់ទេ"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"បញ្ជីកម្មវិធី"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"កម្មវិធីនេះមិនទាន់បានទទួលសិទ្ធិថតសំឡេងនៅឡើយទេ ប៉ុន្តែអាចថតសំឡេងតាមរយៈឧបករណ៍ USB នេះបាន។"</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"ទំព័រដើម"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"ថយក្រោយ"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"កម្មវិធីថ្មីៗ"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"ការជូនដំណឹង"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"ការកំណត់រហ័ស"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"ប្រអប់ថាមពល"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"បិទ/បើកមុខងារបំបែកអេក្រង់"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"អេក្រង់ចាក់សោ"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"រូបថតអេក្រង់"</string>
</resources>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index 0fab683..94d6836 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"ಈ ಸಾಧನದ ಸ್ಥಳವನ್ನು ಪ್ರವೇಶಿಸಲು <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>ಗೆ ಅನುಮತಿಸಬೇಕೇ?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"ನೀವು ಆ್ಯಪ್ ಅನ್ನು ಬಳಸುವಾಗ, ಆ್ಯಪ್ ಮಾತ್ರ ಸ್ಥಳಕ್ಕೆ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿರುತ್ತದೆ"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b>ಎಲ್ಲಾ ಸಮಯದಲ್ಲೂ</b> ಈ ಸಾಧನದ ಸ್ಥಳವನ್ನು ಪ್ರವೇಶಿಸಲು <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ಆ್ಯಪ್ಗೆ ಅನುಮತಿಸುವುದೇ?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"ನೀವು ಆ್ಯಪ್ ಅನ್ನು ಬಳಸುವಾಗ ಮಾತ್ರ, ಅದು ಪ್ರಸ್ತುತವಾಗಿ ಸ್ಥಳವನ್ನು ಪ್ರವೇಶಿಸಬಹುದು"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"ಕ್ಯಾಲೆಂಡರ್"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"ನಿಮ್ಮ ಕ್ಯಾಲೆಂಡರ್ ಪ್ರವೇಶಿಸಲು"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"ನಿಮ್ಮ ಕ್ಯಾಲೆಂಡರ್ ಪ್ರವೇಶಿಸಲು <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ಗೆ ಅನುಮತಿಸಬೇಕೇ?"</string>
@@ -1340,9 +1341,9 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="alert_windows_notification_channel_group_name" msgid="1463953341148606396">"ಇತರ ಅಪ್ಲಿಕೇಶನ್ ಮೇಲೆ ಡಿಸ್ಪ್ಲೇ"</string>
- <string name="alert_windows_notification_channel_name" msgid="3116610965549449803">"<xliff:g id="NAME">%s</xliff:g> ಇತರ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಮೂಲಕ ಪ್ರದರ್ಶಿಸುತ್ತಿದೆ"</string>
- <string name="alert_windows_notification_title" msgid="3697657294867638947">"<xliff:g id="NAME">%s</xliff:g> ಇತರವುಗಳ ಮೇಲೆ ಪ್ರದರ್ಶಿಸುತ್ತಿದೆ"</string>
- <string name="alert_windows_notification_message" msgid="8917232109522912560">"<xliff:g id="NAME">%s</xliff:g> ಈ ವೈಶಿಷ್ಟ್ಯ ಬಳಸುವುದನ್ನು ನೀವು ಬಯಸದಿದ್ದರೆ, ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆದು, ಅದನ್ನು ಆಫ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
+ <string name="alert_windows_notification_channel_name" msgid="3116610965549449803">"<xliff:g id="NAME">%s</xliff:g> ಇತರೆ ಆ್ಯಪ್ಗಳ ಮೇಲೆ ಡಿಸ್ಪ್ಲೇ ಆಗುತ್ತದೆ"</string>
+ <string name="alert_windows_notification_title" msgid="3697657294867638947">"<xliff:g id="NAME">%s</xliff:g> ಇತರೆ ಆ್ಯಪ್ಗಳ ಮೇಲೆ ಡಿಸ್ಪ್ಲೇ ಆಗುತ್ತದೆ"</string>
+ <string name="alert_windows_notification_message" msgid="8917232109522912560">"<xliff:g id="NAME">%s</xliff:g> ಈ ವೈಶಿಷ್ಟ್ಯ ಬಳಸುವುದನ್ನು ನೀವು ಬಯಸದಿದ್ದರೆ, ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಲು ಮತ್ತು ಅದನ್ನು ಆಫ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="alert_windows_notification_turn_off_action" msgid="2902891971380544651">"ಆಫ್ ಮಾಡಿ"</string>
<string name="ext_media_checking_notification_title" msgid="4411133692439308924">"<xliff:g id="NAME">%s</xliff:g> ಅನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ…"</string>
<string name="ext_media_checking_notification_message" msgid="410185170877285434">"ಪ್ರಸ್ತುತ ವಿಷಯವನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ"</string>
@@ -1888,7 +1889,7 @@
<string name="app_category_image" msgid="4867854544519846048">"ಫೋಟೋಗಳು ಮತ್ತು ಚಿತ್ರಗಳು"</string>
<string name="app_category_social" msgid="5842783057834965912">"ಸಾಮಾಜಿಕ ಮತ್ತು ಸಂವಹನ"</string>
<string name="app_category_news" msgid="7496506240743986873">"ಸುದ್ದಿ ಮತ್ತು ನಿಯತಕಾಲಿಕೆಗಳು"</string>
- <string name="app_category_maps" msgid="5878491404538024367">"ನಕ್ಷೆಗಳು ಮತ್ತು ನ್ಯಾವಿಗೇಶನ್"</string>
+ <string name="app_category_maps" msgid="5878491404538024367">"Maps ಮತ್ತು ನ್ಯಾವಿಗೇಶನ್"</string>
<string name="app_category_productivity" msgid="3742083261781538852">"ಉತ್ಪಾದಕತೆ"</string>
<string name="device_storage_monitor_notification_channel" msgid="3295871267414816228">"ಸಾಧನ ಸಂಗ್ರಹಣೆ"</string>
<string name="adb_debugging_notification_channel_tv" msgid="5537766997350092316">"USB ಡೀಬಗ್ ಮಾಡುವಿಕೆ"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"ಏನನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ ಎಂಬುದನ್ನು ಪರೀಕ್ಷಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"ಸಿಸ್ಟಂ"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"ಸ್ಟ್ಯಾಂಡ್ಬೈ"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"ಈ Android TV ಸಾಧನವು ಶೀಘ್ರವೇ ಆಫ್ ಆಗುತ್ತದೆ; ಇದನ್ನು ಆನ್ನಲ್ಲಿಡಲು ಬಟನ್ ಅನ್ನು ಒತ್ತಿರಿ."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"ಈ ಸಾಧನವು ಶೀಘ್ರವೇ ಆಫ್ ಆಗುತ್ತದೆ; ಇದನ್ನು ಆನ್ನಲ್ಲಿಡಲು ಒತ್ತಿರಿ."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"ಕ್ಯಾಮರಾ"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"ಮೈಕ್ರೋಫೋನ್"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ನಲ್ಲಿ ಇತರ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಮೂಲಕ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತಿದೆ"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"ನೇರ ಹಂಚಿಕೆ ಲಭ್ಯವಿಲ್ಲ"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"ಆ್ಯಪ್ಗಳ ಪಟ್ಟಿ"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"ಈ ಆ್ಯಪ್ಗೆ ರೆಕಾರ್ಡ್ ಅನುಮತಿಯನ್ನು ನೀಡಲಾಗಿಲ್ಲ, ಆದರೆ ಈ USB ಸಾಧನದ ಮೂಲಕ ಆಡಿಯೊವನ್ನು ಸೆರೆಹಿಡಿಯಬಲ್ಲದು."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"ಹೋಮ್"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"ಹಿಂದಕ್ಕೆ"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"ಇತ್ತೀಚಿನ ಆ್ಯಪ್ಗಳು"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"ಅಧಿಸೂಚನೆಗಳು"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"ಪವರ್ ಡೈಲಾಗ್"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"ಸ್ಪ್ಲಿಟ್-ಸ್ಕ್ರೀನ್ ಟಾಗಲ್ ಮಾಡಿ"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"ಲಾಕ್ ಸ್ಕ್ರೀನ್"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"ಸ್ಕ್ರೀನ್ಶಾಟ್"</string>
</resources>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index f42a928..c58d36c 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>에서 내 기기 위치에 액세스하도록 허용하시겠습니까?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"앱을 사용할 때만 앱에서 위치에 액세스합니다."</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> 앱이 이 기기의 위치에 <b>항상</b> 액세스하도록 허용하시겠습니까?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"현재 앱을 사용 중일 때만 앱에서 위치에 액세스할 수 있습니다."</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"캘린더"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"캘린더에 액세스"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>에서 내 캘린더에 액세스하도록 허용하시겠습니까?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"차단된 항목을 확인하려면 탭하세요."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"시스템"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"설정"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"대기"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV가 곧 꺼집니다. 계속 사용하려면 버튼을 누르세요."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"기기가 곧 꺼집니다. 계속 사용하려면 누르세요."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"카메라"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"마이크"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"화면에서 다른 앱 위에 표시"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"직접 공유가 지원되지 않음"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"앱 목록"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"이 앱에는 녹음 권한이 부여되지 않았지만, 이 USB 기기를 통해 오디오를 녹음할 수 있습니다."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"홈"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"뒤로"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"최근 앱"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"알림"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"빠른 설정"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"전원 대화상자"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"화면 분할 모드 전환"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"잠금 화면"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"스크린샷"</string>
</resources>
diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml
index 82064b2..f7095a7 100644
--- a/core/res/res/values-ky/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> колдонмосу бул түзмөктүн кайда жүргөнүн көрүп турсунбу?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Колдонмону колдонуп жаткан маалда гана, ал сиздин кайда жүргөнүңүздү билип турат."</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> колдонмосу бул түзмөктүн жүргөн жерин <b>ар дайым</b> билип турсунбу?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Колдонмону пайдаланып жаткан учурда гана ал жайгашкан жерди көрө алат"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Жылнаама"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"жылнаамаңызды пайдалануу"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> колдонмосуна жылнаамаңызды пайдаланууга уруксат берилсинби?"</string>
@@ -1964,9 +1965,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Бөгөттөлгөн нерселерди көрүү үчүн таптаңыз."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Тутум"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Жөндөөлөр"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Көшүү режими"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV түзмөгү жакында өчүрүлөт, аны күйүк боюнча калтыруу үчүн баскычты басыңыз."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Түзмөк жакында өчүрүлөт, күйүк боюнча калтыруу үчүн басып коюңуз."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Камера"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Микрофон"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"экрандагы башка терезелердин үстүнөн көрсөтүлүүдө"</string>
@@ -2007,22 +2005,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Түздөн-түз бөлүшүүгө болбойт"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Колдонмолордун тизмеси"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Бул колдонмонун жаздырууга уруксаты жок, бирок бул USB түзмөгү аркылуу аудиону жаздыра алат."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Башкы бет"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Артка"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Акыркы колдонмолор"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Билдирмелер"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Ыкчам жөндөөлөр"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Кубат диалогу"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Экранды бөлүүнү күйгүзүү же өчүрүү"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Кулпуланган экран"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Скриншот"</string>
</resources>
diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml
index 3aa786e..63b1437 100644
--- a/core/res/res/values-lo/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -286,7 +286,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"ອະນຸຍາດ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ໃຫ້ເຂົ້າເຖິງສະຖານທີ່ຂອງອຸປະກອນບໍ?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"ແອັບຈະມີສິດເຂົ້າເຖິງສະຖານທີ່ໃນເວລາທີ່ທ່ານກຳລັງໃຊ້ແອັບຢູ່ເທົ່ານັ້ນ"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"ອະນຸຍາດໃຫ້ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ເຂົ້າເຖິງສະຖານທີ່ຂອງອຸປະກອນໄດ້ <b>ຕະຫຼອດເວລາ</b> ບໍ?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"ຕອນນີ້ແອັບສາມາດເຂົ້າເຖິງສະຖານທີ່ໄດ້ສະເພາະເວລາທີ່ທ່ານໃຊ້ແອັບເທົ່ານັ້ນ"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"ແອັບນີ້ອາດຕ້ອງການເຂົ້າເຖິງສະຖານທີ່ຂອງທ່ານຕະຫຼອດເວລາ, ເຖິງແມ່ນວ່າທ່ານຈະບໍ່ໄດ້ໃຊ້ແອັບຢູ່ກໍຕາມ. ອະນຸຍາດໃນ "<annotation id="link">"ການຕັ້ງຄ່າ"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"ປະຕິທິນ"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"ເຂົ້າຫາປະຕິທິນຂອງທ່ານ"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"ອະນຸຍາດ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ໃຫ້ເຂົ້າເຖິງປະຕິທິນຂອງທ່ານບໍ?"</string>
@@ -1963,9 +1963,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"ແຕະເພື່ອກວດສອບວ່າມີຫຍັງຖືກບລັອກໄວ້ແດ່."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"ລະບົບ"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ການຕັ້ງຄ່າ"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"ສະແຕນບາຍ"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"ອຸປະກອນ Android TV ຈະປິດໃນອີກບໍ່ດົນ, ກົດປຸ່ມໃດໜຶ່ງເພື່ອເປີດມັນໄວ້ຕໍ່."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"ອຸປະກອນຈະປິດໃນອີກບໍ່ດົນ, ກົດເພື່ອເປີດມັນໄວ້ຕໍ່."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"ກ້ອງ"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"ໄມໂຄຣໂຟນ"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"ສະແດງຜົນບັງແອັບອື່ນຢູ່ໜ້າຈໍຂອງທ່ານ"</string>
@@ -2006,22 +2003,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"ບໍ່ສາມາດແບ່ງປັນໂດຍກົງໄດ້"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"ລາຍຊື່ແອັບ"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"ແອັບນີ້ບໍ່ໄດ້ຮັບສິດອະນຸຍາດໃນການບັນທຶກ ແຕ່ສາມາດບັນທຶກສຽງໄດ້ຜ່ານອຸປະກອນ USB ນີ້."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"ເຮືອນ"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"ກັບຄືນ"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"ແອັບຫຼ້າສຸດ"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"ການແຈ້ງເຕືອນ"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"ການຕັ້ງຄ່າດ່ວນ"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"ກ່ອງໂຕ້ຕອບການເປີດປິດ"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"ເປີດ/ປິດການແບ່ງໜ້າຈໍ"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"ໜ້າຈໍລັອກ"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"ຮູບໜ້າຈໍ"</string>
</resources>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index d4d19f4..180497e 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -292,7 +292,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Suteikti <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> galimybę pasiekti įrenginio vietovę?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Programa galės pasiekti vietovę, tik kai ją naudosite"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Leisti <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> pasiekti šio įrenginio vietovę <b>visą laiką</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Šiuo metu programa gali pasiekti vietovę, tik kai ją naudojate"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendorius"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"pasiekti kalendorių"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Suteikti <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> galimybę pasiekti kalendorių?"</string>
@@ -2029,9 +2030,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Palieskite, kad patikrintumėte, kas blokuojama."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Nustatymai"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Budėjimo laikas"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"„Android TV“ įrenginys netrukus išsijungs. Paspauskite mygtuką, kad įrenginys liktų įjungtas."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Įrenginys netrukus išsijungs. Paspauskite, kad jis liktų įjungtas."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Fotoaparatas"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofonas"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"rodo virš kitų programų jūsų ekrane"</string>
@@ -2074,22 +2072,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Tiesioginio bendrinimo funkcija nepasiekiama"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Programų sąrašas"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Šiai programai nebuvo suteiktas leidimas įrašyti, bet ji gali užfiksuoti garsą per šį USB įrenginį."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Pagrindinis"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Atgal"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Naujausios programos"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Pranešimai"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Spartieji nustatymai"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Maitinimo dialogo langas"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Perjungti išskaidyto ekrano režimą"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Užrakinimo ekranas"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Ekrano kopija"</string>
</resources>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 89a98dd..ef428a9 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -289,7 +289,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Vai atļaut lietotnei <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> piekļūt šīs ierīces atrašanās vietai?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Lietotne varēs piekļūt atrašanās vietai tikai tad, kad izmantosiet šo lietotni"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Vai <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> drīkst piekļūt ierīces atrašanās vietai <b>vienmēr</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Pašlaik lietotne var piekļūt atrašanās vietai tikai tad, kad izmantojat šo lietotni"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendārs"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"piekļūt jūsu kalendāram"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Vai atļaut lietotnei <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> piekļūt jūsu kalendāram?"</string>
@@ -1996,9 +1997,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Pieskarieties, lai uzzinātu, kas tiek bloķēts."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistēma"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Iestatījumi"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Gaidstāve"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV ierīce drīz izslēgsies. Nospiediet pogu, lai tā paliktu ieslēgta."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Ierīce drīz izslēgsies. Nospiediet, lai tā paliktu ieslēgta."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofons"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"rāda pāri citām lietotnēm jūsu ekrānā"</string>
@@ -2040,22 +2038,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Tiešā kopīgošana nav pieejama"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Lietotņu saraksts"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Šai lietotnei nav piešķirta ierakstīšanas atļauja, taču tā varētu tvert audio, izmantojot šo USB ierīci."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Sākums"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Atpakaļ"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Nesen izmantotās lietotnes"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Paziņojumi"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Ātrie iestatījumi"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Barošanas dialoglodziņš"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Pārslēgt ekrāna sadalīšanu"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Bloķēt ekrānu"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Ekrānuzņēmums"</string>
</resources>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index 4396c08..896942f 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Дали да се дозволи <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> да пристапува до локацијата на уредов?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Апликацијата ќе има пристап до локацијата само додека ја користите"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Да се дозволи <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> да пристапува до локацијата на уредов <b>во секое време</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Апликацијата во моментов може да пристапува до локацијата само додека ја користите"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Календар"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"пристапува до календарот"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Дали да се дозволи <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> да пристапува до календарот?"</string>
@@ -1965,9 +1966,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Допрете за да проверите што е блокирано."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Систем"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Поставки"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Подготвеност"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Уредот со Android TV наскоро ќе се исклучи, притиснете копче за да остане вклучен."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Уредот наскоро ќе се исклучи, притиснете за да остане вклучен."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Камера"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Микрофон"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"се прикажува преку други апликации на вашиот екран"</string>
@@ -2008,22 +2006,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Не е достапно директно споделување"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Список со апликации"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"На апликацијава не ѝ е доделена дозвола за снимање, но може да снима аудио преку овој USB-уред."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Почеток"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Назад"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Неодамнешни апликации"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Известувања"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Брзи поставки"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Дијалог за напојување"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Вклучи/исклучи поделен екран"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Заклучен екран"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Слика од екранот"</string>
</resources>
diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml
index 0b33971..f75d2d6 100644
--- a/core/res/res/values-ml/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"ഈ ഉപകരണത്തിന്റെ ലൊക്കേഷൻ ആക്സസ് ചെയ്യാൻ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ആപ്പിനെ അനുവദിക്കണോ?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"നിങ്ങൾ ആപ്പ് ഉപയോഗിക്കുമ്പോൾ മാത്രമേ അതിന് ലൊക്കേഷൻ ആക്സസ് ലഭിക്കൂ."</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനെ ഈ ഉപകരണത്തിന്റെ ലൊക്കേഷൻ ആക്സസ് ചെയ്യാൻ എപ്പോഴും അനുവദിക്കണോ?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"നിലവിൽ, ഉപയോഗിക്കുമ്പോൾ മാത്രം ആപ്പിന് ലൊക്കേഷൻ ആക്സസ് ചെയ്യാം"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"കലണ്ടർ"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"നിങ്ങളുടെ കലണ്ടർ ആക്സസ്സ് ചെയ്യുക"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"നിങ്ങളുടെ കലണ്ടർ ആക്സസ് ചെയ്യാൻ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ആപ്പിനെ അനുവദിക്കണോ?"</string>
@@ -1340,9 +1341,9 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="alert_windows_notification_channel_group_name" msgid="1463953341148606396">"മറ്റ് ആപ്സിന് മുകളിൽ പ്രദർശിപ്പിക്കുക"</string>
- <string name="alert_windows_notification_channel_name" msgid="3116610965549449803">"<xliff:g id="NAME">%s</xliff:g> മറ്റ് ആപ്പുകൾക്ക് മുകളിൽ പ്രദർശിപ്പിക്കുന്നു"</string>
- <string name="alert_windows_notification_title" msgid="3697657294867638947">"<xliff:g id="NAME">%s</xliff:g> മറ്റ് ആപ്പുകൾക്ക് മുകളിൽ പ്രദർശിപ്പിക്കുന്നു"</string>
- <string name="alert_windows_notification_message" msgid="8917232109522912560">"<xliff:g id="NAME">%s</xliff:g> ഈ ഫീച്ചർ ഉപയോഗിക്കുന്നതിൽ നിങ്ങൾക്ക് താൽപ്പര്യമില്ലെങ്കിൽ, ടാപ്പുചെയ്ത് ക്രമീകരണം തുറന്ന് അത് ഓഫാക്കുക."</string>
+ <string name="alert_windows_notification_channel_name" msgid="3116610965549449803">"<xliff:g id="NAME">%s</xliff:g> മറ്റ് ആപ്പുകൾക്ക് മുകളിൽ കാണിക്കുന്നു"</string>
+ <string name="alert_windows_notification_title" msgid="3697657294867638947">"<xliff:g id="NAME">%s</xliff:g> മറ്റ് ആപ്പുകൾക്ക് മേലെയാണ്"</string>
+ <string name="alert_windows_notification_message" msgid="8917232109522912560">"<xliff:g id="NAME">%s</xliff:g> ഈ ഫീച്ചർ ഉപയോഗിക്കേണ്ടെങ്കിൽ, ടാപ്പ് ചെയ്ത് ക്രമീകരണം തുറന്ന് അത് ഓഫാക്കുക."</string>
<string name="alert_windows_notification_turn_off_action" msgid="2902891971380544651">"ഓഫാക്കുക"</string>
<string name="ext_media_checking_notification_title" msgid="4411133692439308924">"<xliff:g id="NAME">%s</xliff:g> പരിശോധിക്കുന്നു…"</string>
<string name="ext_media_checking_notification_message" msgid="410185170877285434">"നിലവിലെ ഉള്ളടക്കം അവലോകനം ചെയ്യുന്നു"</string>
@@ -1888,7 +1889,7 @@
<string name="app_category_image" msgid="4867854544519846048">"ഫോട്ടോകളും ചിത്രങ്ങളും"</string>
<string name="app_category_social" msgid="5842783057834965912">"സാമൂഹിക ആപ്സുകളും ആശയവിനിമയവും"</string>
<string name="app_category_news" msgid="7496506240743986873">"വാർത്തകളും മാസികകളും"</string>
- <string name="app_category_maps" msgid="5878491404538024367">"മാപ്സും നാവിഗേഷനും"</string>
+ <string name="app_category_maps" msgid="5878491404538024367">"മാപ്പുകളും നാവിഗേഷനും"</string>
<string name="app_category_productivity" msgid="3742083261781538852">"ഉല്പ്പാദനക്ഷമത"</string>
<string name="device_storage_monitor_notification_channel" msgid="3295871267414816228">"ഉപകരണ സ്റ്റോറേജ്"</string>
<string name="adb_debugging_notification_channel_tv" msgid="5537766997350092316">"USB ഡീബഗ്ഗിംഗ്"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"എന്തിനെയാണ് ബ്ലോക്ക് ചെയ്തതെന്ന് പരിശോധിക്കാൻ ടാപ്പ് ചെയ്യുക."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"സിസ്റ്റം"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ക്രമീകരണം"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"സ്റ്റാൻഡ്ബൈ"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android ടിവി ഉടൻ ഓഫാകും, ഓണാക്കി നിർത്താൻ ഒരു ബട്ടൺ അമർത്തുക."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"ഉപകരണം ഉടൻ ഓഫാകും, ഓണാക്കി നിർത്താൻ അമർത്തുക."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"ക്യാമറ"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"മൈക്രോഫോൺ"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"നിങ്ങളുടെ സ്ക്രീനിലെ മറ്റ് ആപ്പുകൾക്ക് മുകളിൽ പ്രദർശിപ്പിക്കുന്നു"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"നേരിട്ടുള്ള പങ്കിടൽ ലഭ്യമല്ല"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"ആപ്പുകളുടെ ലിസ്റ്റ്"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"ഈ ആപ്പിന് റെക്കോർഡ് അനുമതി നൽകിയിട്ടില്ല, എന്നാൽ ഈ USB ഉപകരണത്തിലൂടെ ഓഡിയോ ക്യാപ്ചർ ചെയ്യാനാവും."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"ഹോം"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"തിരികെ പോകുക"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"സമീപകാലത്തെ ആപ്പുകൾ"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"അറിയിപ്പുകൾ"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"ദ്രുത ക്രമീകരണം"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"പവർ ഡയലോഗ്"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"സ്ക്രീൻ വിഭജന മോഡ് മാറ്റുക"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"ലോക്ക് സ്ക്രീൻ"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"സ്ക്രീൻഷോട്ട്"</string>
</resources>
diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml
index 990a4d0..1791d0c 100644
--- a/core/res/res/values-mn/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-д энэ төхөөрөмжийн байршилд хандахыг зөвшөөрөх үү?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Та тухайн аппыг ашиглаж байгаа үед энэ нь зөвхөн байршилд хандах эрхтэй болно"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-д энэ төхөөрөмжийн байршилд <b>хүссэн үедээ</b> хандахыг зөвшөөрөх үү?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Та зөвхөн тухайн аппыг ашиглаж байгаа үед энэ нь одоогоор байршилд хандах эрхтэй"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Хуанли"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"Хуанли руу хандах"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-д таны календарьт хандахыг зөвшөөрөх үү?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Блоклосон зүйлийг шалгахын тулд товшино уу."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Систем"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Тохиргоо"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Зогсолтын горим"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Андройд ТВ төхөөрөмж удахгүй унтрах тул асаалттай хэвээр байлгахын тулд дарна уу."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Төхөөрөмж удахгүй унтрах тул асаалттай хэвээр байлгахын тулд дарна уу."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Камер"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Микрофон"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"таны дэлгэцэд бусад аппын дээр харуулж байна"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Шууд хуваалцах боломжгүй"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Аппын жагсаалт"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Энэ апликейшнд бичих зөвшөөрөл олгогдоогүй ч энэ USB төхөөрөмжөөр дамжуулан аудио бичиж чадсан."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Нүүр"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Буцах"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Сүүлд хандсан аппууд"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Мэдэгдэл"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Шуурхай тохиргоо"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Тэжээлийн харилцах цонх"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Дэлгэц хуваахыг унтраах/асаах"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Дэлгэцийг түгжих"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Дэлгэцийн зураг дарах"</string>
</resources>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index edc89a4..f4becc9 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ला या डिव्हाइसचे स्थान अॅक्सेस करू द्यायचे?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"तुम्ही अॅप वापरत असताना अॅपला फक्त स्थानाचा अॅक्सेस असेल"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ला <b>प्रत्येक वेळी</b> या डिव्हाइसच्या स्थानाचा अॅक्सेस द्यायचा?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"अॅप सध्या फक्त तुम्ही अॅप वापरत असतानाच स्थान अॅक्सेस करू शकते"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"कॅलेंडर"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"आपल्या कॅलेंडरवर प्रवेश"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ला तुमचे कॅलेंडर अॅक्सेस करू द्यायचे?"</string>
@@ -1340,9 +1341,9 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="alert_windows_notification_channel_group_name" msgid="1463953341148606396">"इतर अॅप्सवर दाखवा"</string>
- <string name="alert_windows_notification_channel_name" msgid="3116610965549449803">"<xliff:g id="NAME">%s</xliff:g> इतर ॲप्सवर प्रदर्शित करत आहे"</string>
- <string name="alert_windows_notification_title" msgid="3697657294867638947">"<xliff:g id="NAME">%s</xliff:g> अन्य ॲप्सवर प्रदर्शित करत आहे"</string>
- <string name="alert_windows_notification_message" msgid="8917232109522912560">"<xliff:g id="NAME">%s</xliff:g> ने हे वैशिष्ट्य वापरू नये असे तुम्ही इच्छित असल्यास, सेटिंग्ज उघडण्यासाठी टॅप करा आणि ते बंद करा."</string>
+ <string name="alert_windows_notification_channel_name" msgid="3116610965549449803">"अन्य ॲप्सवर <xliff:g id="NAME">%s</xliff:g> दाखवत आहे"</string>
+ <string name="alert_windows_notification_title" msgid="3697657294867638947">"अन्य ॲप्सवर <xliff:g id="NAME">%s</xliff:g> दाखवत आहे"</string>
+ <string name="alert_windows_notification_message" msgid="8917232109522912560">"<xliff:g id="NAME">%s</xliff:g> ने हे वैशिष्ट्य वापरू नये असे तुम्हाला वाटत असल्यास, टॅप करून सेटिंग्ज उघडा आणि ते बंद करा."</string>
<string name="alert_windows_notification_turn_off_action" msgid="2902891971380544651">"बंद करा"</string>
<string name="ext_media_checking_notification_title" msgid="4411133692439308924">"<xliff:g id="NAME">%s</xliff:g> तपासत आहे…"</string>
<string name="ext_media_checking_notification_message" msgid="410185170877285434">"सध्याच्या आशयाचे पुनरावलोकन करत आहे"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"काय ब्लॉक केले आहे हे तपासण्यासाठी टॅप करा."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"सिस्टम"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"सेटिंग्ज"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"स्टँडबाय"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV डिव्हाइस लवकरच बंद होणार आहे; सुरू ठेवण्यासाठी बटण दाबा."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"डिव्हाइस लवकरच बंद होणार आहे; सुरू ठेवण्यासाठी दाबा."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"कॅमेरा"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"मायक्रोफोन"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"तुमच्या स्क्रीनवर इतर ॲप्सवर डिस्प्ले करत आहे"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"थेट शेअर करणे उपलब्ध नाही"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"अॅप्स सूची"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"या अॅपला रेकॉर्ड करण्याची परवानगी दिली गेली नाही पण हे USB डिव्हाइस वापरून ऑडिओ कॅप्चर केला जाऊ शकतो."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"होम"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"मागे जा"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"अलीकडील ॲप्स"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"सूचना"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"क्विक सेटिंग्ज"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"पॉवर डायलॉग"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"विभाजित स्क्रीन टॉगल करा"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"स्क्रीन लॉक करा"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"स्क्रीनशॉट"</string>
</resources>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 0c881c5..5caf29f 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Benarkan <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> mengakses lokasi peranti ini?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Apl ini hanya dapat mengakses lokasi semasa anda menggunakan apl tersebut"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Benarkan <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> mengakses lokasi peranti ini <b>pada sepanjang masa</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Pada masa ini, apl hanya boleh mengakses lokasi semasa anda menggunakan apl itu"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendar"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"mengakses kalendar"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Benarkan <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> mengakses kalendar anda?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Ketik untuk menyemak item yang disekat."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Tetapan"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Tunggu sedia"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Peranti Android TV akan mati tidak lama lagi; tekan butang untuk memastikan peranti terus hidup."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Peranti akan mati tidak lama lagi; tekan untuk memastikan peranti terus hidup."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"dipaparkan di atas apl lain pada skrin anda"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Perkongsian langsung tidak tersedia"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Senarai apl"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Apl ini belum diberikan kebenaran merakam tetapi dapat merakam audio melalui peranti USB ini."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Skrin Utama"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Kembali"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Apl Terbaharu"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Pemberitahuan"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Tetapan Pantas"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Dialog Kuasa"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Togol Skrin Pisah"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Skrin Kunci"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Tangkapan skrin"</string>
</resources>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index f5745b5..7ab0282 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> အား ဤစက်ပစ္စည်း၏တည်နေရာကို သုံးခွင့်ပေးလိုပါသလား။"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"အက်ပ်ကိုအသုံးပြုသည့် အချိန်တွင်သာ ၎င်းကတည်နေရာကို အသုံးပြုခွင့်ရပါမည်"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> အား ဤစက်ပစ္စည်း၏ တည်နေရာကို <b>အမြဲတမ်း</b> ဝင်သုံးခွင့်ပေးလိုပါသလား။"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"အက်ပ်ကိုအသုံးပြုသည့် အချိန်တွင်သာ ၎င်းကတည်နေရာကို အသုံးပြုခွင့်ရပါသည်"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"ပြက္ခဒိန်"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"သင့်ပြက္ခဒိန်အား ဝင်ရောက်သုံးရန်"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> အား သင်၏ပြက္ခဒိန်ကို သုံးခွင့်ပေးလိုပါသလား။"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"ပိတ်ထားသည့်အရာများကို ကြည့်ရန် တို့ပါ။"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"စနစ်"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ဆက်တင်များ"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"အသင့်အနေအထား"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV စက်သည် မကြာမီ ပိတ်သွားပါမည်၊ ဆက်ဖွင့်ထားရန် ခလုတ်တစ်ခုနှိပ်ပါ။"</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"စက်သည် အကြာမီ ပိတ်သွားပါမည်၊ ဆက်ဖွင့်ထားပါ။"</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"ကင်မရာ"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"မိုက်ခရိုဖုန်း"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"သင့်မျက်နှာပြင်ပေါ်ရှိ အခြားအက်ပ်များပေါ်တွင် ပြသခြင်း"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"တိုက်ရိုက်မျှဝေ၍ မရပါ"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"အက်ပ်စာရင်း"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"ဤအက်ပ်ကို အသံဖမ်းခွင့် ပေးမထားသော်လည်း ၎င်းသည် ဤ USB စက်ပစ္စည်းမှတစ်ဆင့် အသံများကို ဖမ်းယူနိုင်ပါသည်။"</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"ပင်မစာမျက်နှာ"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"နောက်သို့"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"လတ်တလောသုံး အက်ပ်များ"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"အကြောင်းကြားချက်များ"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"အမြန် ဆက်တင်များ"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"ပါဝါ ဒိုင်ယာလော့"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"မျက်နှာပြင် ခွဲ၍ပြသခြင်းကို နှိပ်ပါ"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"လော့ခ်မျက်နှာပြင်"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"ဖန်သားပြင်ဓာတ်ပုံ"</string>
</resources>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 0359779..aecbea6 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Vil du gi <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tilgang til denne enhetens posisjon?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Appen får bare tilgang til posisjonen når du bruker appen"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Vil du gi <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tilgang til enhetens posisjon <b>til enhver tid</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Appen har nå bare tilgang til posisjonen når du bruker den"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"åpne kalenderen din"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Vil du gi <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tilgang til kalenderen din?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Trykk for å sjekke hva som er blokkert."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Innstillinger"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Ventemodus"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV-enheten slås snart av. Trykk på en knapp for å holde den på."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Enheten slås snart av. Trykk for å holde den på."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"vises over andre apper på skjermen"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Direktedeling er ikke tilgjengelig"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Appliste"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Denne appen har ikke fått tillatelse til å spille inn, men kan ta opp lyd med denne USB-enheten."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Start"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Tilbake"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Nylige apper"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Varsler"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Hurtiginnstillinger"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Dialogboks for å slå av/på"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Slå delt skjerm av/på"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Låseskjerm"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Skjermdump"</string>
</resources>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index 2617086..a6f37dd 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> लाई यो यन्त्रको स्थानमाथि पहुँच राख्न दिने हो?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"तपाईंले अनुप्रयोग प्रयोग गरिरहेका बेला मात्र उक्त अनुप्रयोगले स्थानमाथि पहुँच राख्न सक्ने छ"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> लाई यस यन्त्रको स्थानमाथि <b>जुनसुकै बेला</b> पहुँच गर्न दिने हो?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"तपाईंले अनुप्रयोग प्रयोग गरिरहँदा मात्र उक्त अनुप्रयोगले हाल स्थानमाथि मात्र पहुँच गर्न सक्छ"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"पात्रो"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"तपाईंको पात्रोमाथि पहुँच गर्नुहोस्"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> लाई आफ्नो पात्रोमाथि पहुँच राख्न दिने हो?"</string>
@@ -1777,10 +1778,8 @@
<string name="package_updated_device_owner" msgid="1847154566357862089">"तपाईंका प्रशासकले अद्यावधिक गर्नुभएको"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"तपाईंका प्रशासकले मेट्नुभएको"</string>
<string name="confirm_battery_saver" msgid="639106420541753635">"ठिक छ"</string>
- <!-- no translation found for battery_saver_description_with_learn_more (1002571337088673987) -->
- <skip />
- <!-- no translation found for battery_saver_description (2307555792915978653) -->
- <skip />
+ <string name="battery_saver_description_with_learn_more" msgid="1002571337088673987">"ब्याट्रीको आयु लामो बनाउन ब्याट्री सेभरले:\n·अँध्यारो विषयवस्तु सक्रिय गर्छ\n·पृष्ठभूमिका गतिविधि, कतिपय भिजुअल प्रभाव तथा “Hey Google” जस्ता अन्य सुविधाहरू निष्क्रिय वा सीमित पार्छ।\n\n"<annotation id="url">"थप जान्नुहोस्"</annotation></string>
+ <string name="battery_saver_description" msgid="2307555792915978653">"ब्याट्रीको आयु लामो बनाउन ब्याट्री सेभरले:\n·अँध्यारो विषयवस्तु सक्रिय गर्छ\n·पृष्ठभूमिका गतिविधि, कतिपय भिजुअल प्रभाव तथा “Hey Google” जस्ता अन्य सुविधाहरू निष्क्रिय वा सीमित पार्छ।"</string>
<string name="data_saver_description" msgid="6015391409098303235">"डेटाको प्रयोगलाई कम गर्नमा मद्दतका लागि डेटा सर्भरले केही अनुप्रयोगहरूलाई पृष्ठभूमिमा डेटा पठाउन वा प्राप्त गर्नबाट रोक्दछ। तपाईँले हाल प्रयोग गरिरहनुभएको अनु्प्रयोगले डेटामाथि पहुँच राख्न सक्छ, तर त्यसले यो काम थोरै पटक गर्न सक्छ। उदाहरणका लागि यसको मतलब यो हुन सक्छ: तपाईँले छविहरूलाई ट्याप नगरेसम्म ती प्रदर्शन हुँदैनन्।"</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"डेटा सेभरलाई सक्रिय गर्ने हो?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"सक्रिय गर्नुहोस्"</string>
@@ -1971,9 +1970,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"रोक लगाइएका कुराहरू जाँच गर्न ट्याप गर्नुहोस्।"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"प्रणाली"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"सेटिङहरू"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"स्ट्यान्डबाई"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV यन्त्र चाँडै निष्क्रिय हुने छ; सक्रिय राख्न कुनै बटन थिच्नुहोस्।"</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"यो यन्त्र चाँडै निष्क्रिय हुने छ; सक्रिय राख्न थिच्नुहोस्।"</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"क्यामेरा"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"माइक्रोफोन"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"तपाईंको स्क्रिनका अन्य अनुप्रयोगहरूमा प्रदर्शन गरिँदै छ"</string>
@@ -2014,22 +2010,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"सीधै आदान प्रदान गर्ने सुविधा उपलब्ध छैन"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"अनुप्रयोगहरूको सूची"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"यो अनुप्रयोगलाई रेकर्ड गर्ने अनुमति प्रदान गरिएको छैन तर यसले यो USB यन्त्रमार्फत अडियो क्याप्चर गर्न सक्छ।"</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"गृहपृष्ठ"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"पछाडि फर्कनुहोस्"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"हालसालैका अनुप्रयोगहरू"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"सूचनाहरू"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"द्रुत सेटिङहरू"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"पावर संवाद"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"विभाजित स्क्रिन टगल गर्नुहोस्"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"लक स्क्रिन"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"स्क्रिनसट"</string>
</resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 43b4ede..684ea94 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -286,7 +286,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> toegang geven tot de locatie van dit apparaat?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"De app heeft alleen toegang tot de locatie wanneer je de app gebruikt"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Wil je <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> <b>altijd</b> toegang geven tot de locatie van dit apparaat?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"De app heeft momenteel alleen toegang tot de locatie wanneer je de app gebruikt"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"Deze app wil mogelijk altijd toegang tot je locatie, ook als je de app niet gebruikt. Je kunt dit toestaan via de "<annotation id="link">"instellingen"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Agenda"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"toegang krijgen tot je agenda"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> toegang geven tot je agenda?"</string>
@@ -1963,9 +1963,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tik om te controleren wat er is geblokkeerd."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Systeem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Instellingen"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Stand-by"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Het Android TV-apparaat wordt binnenkort uitgeschakeld. Druk op een knop om het ingeschakeld te houden."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Het apparaat wordt binnenkort uitgeschakeld. Druk om het ingeschakeld te houden."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Camera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Microfoon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"wordt weergegeven vóór andere apps op je scherm"</string>
@@ -2006,22 +2003,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Rechtstreeks delen is niet beschikbaar"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Lijst met apps"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Deze app heeft geen opnamerechten gekregen, maar zou audio kunnen vastleggen via dit USB-apparaat."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Homepage"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Terug"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Recente apps"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Meldingen"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Snelle instellingen"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Voedingsdialoogvenster"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Gesplitst scherm schakelen"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Scherm vergrendelen"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Screenshot"</string>
</resources>
diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml
index 68b76c8..6c53e16 100644
--- a/core/res/res/values-or/strings.xml
+++ b/core/res/res/values-or/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>କୁ ଏହି ଡିଭାଇସ୍ର ଲୋକେସନ୍ ଆକ୍ସେସ୍ କରିବା ପାଇଁ ଅନୁମତି ଦେବେ କି?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"ଆପଣ ଆପ୍ ବ୍ୟବହାର କରୁଥିବା ବେଳେ କେବଳ ଲୋକେସନ୍କୁ ଆପ୍ର ଆକ୍ସେସ୍ ରହିବ।"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>କୁ ଏହି ଡିଭାଇସ୍ର ଲୋକେସନ୍ ଆକ୍ସେସ୍ କରିବାକୁ <b>ସର୍ବଦା</b> ଅନୁମତି ଦେବେ କି?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"ବର୍ତ୍ତମାନ ଆପଣ କେବଳ ଆପ୍ ବ୍ୟବହାର କରୁଥିବା ବେଳେ ଆପ୍ ଆପଣଙ୍କ ଲୋକେସନ୍ ଆକ୍ସେସ୍ କରିପାରିବ"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"କ୍ୟାଲେଣ୍ଡର୍"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"ଆପଣଙ୍କ କ୍ୟାଲେଣ୍ଡର୍ ଆକ୍ସେସ୍ କରେ"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>କୁ ଆପଣଙ୍କ କ୍ୟାଲେଣ୍ଡର୍କୁ ଆକ୍ସେସ୍ କରିବା ପାଇଁ ଅନୁମତି ଦେବେ କି?"</string>
@@ -1771,10 +1772,8 @@
<string name="package_updated_device_owner" msgid="1847154566357862089">"ଆପଣଙ୍କ ଆଡମିନ୍ ଅପଡେଟ୍ କରିଛନ୍ତି"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"ଆପଣଙ୍କ ଆଡମିନ୍ ଡିଲିଟ୍ କରିଛନ୍ତି"</string>
<string name="confirm_battery_saver" msgid="639106420541753635">"ଠିକ୍ ଅଛି"</string>
- <!-- no translation found for battery_saver_description_with_learn_more (1002571337088673987) -->
- <skip />
- <!-- no translation found for battery_saver_description (2307555792915978653) -->
- <skip />
+ <string name="battery_saver_description_with_learn_more" msgid="1002571337088673987">"ବ୍ୟାଟେରୀ ଜୀବନ ବଢ଼ାଇବାକୁ ବ୍ୟାଟେରୀ ସେଭର୍:\n·ଗାଢା ଥିମ୍ ଚାଲୁ କରେ\n·ପୃଷ୍ଟପଟ କାର୍ଯ୍ୟକଳାପକୁ, କିଛି ଭିଜୁଆଲ୍ ପ୍ରଭାବଗୁଡ଼ିକୁ ଏବଂ “ହେ Google” ପରି ଅନ୍ୟ ଫିଚର୍କୁ ବନ୍ଦ ରଖେ କିମ୍ବା ପ୍ରତିବନ୍ଧିତ କରିଥାଏ\n\n"<annotation id="url">"ଅଧିକ ଜାଣନ୍ତୁ"</annotation></string>
+ <string name="battery_saver_description" msgid="2307555792915978653">"ବ୍ୟାଟେରୀ ଜୀବନ ବଢ଼ାଇବାକୁ ବ୍ୟାଟେରୀ ସେଭର୍:\n·ଗାଢା ଥିମ୍ ଚାଲୁ କରେ\n·ପୃଷ୍ଟପଟ କାର୍ଯ୍ୟକଳାପକୁ, କିଛି ଭିଜୁଆଲ୍ ପ୍ରଭାବଗୁଡ଼ିକୁ ଏବଂ “ହେ Google” ପରି ଅନ୍ୟ ଫିଚର୍କୁ ବନ୍ଦ ରଖେ କିମ୍ବା ପ୍ରତିବନ୍ଧିତ କରିଥାଏ"</string>
<string name="data_saver_description" msgid="6015391409098303235">"ଡାଟା ବ୍ୟବହାର କମ୍ କରିବାରେ ସାହାଯ୍ୟ କରିବାକୁ, ଡାଟା ସେଭର୍ ବ୍ୟାକ୍ଗ୍ରାଉଣ୍ଡରେ ଡାଟା ପଠାଇବା କିମ୍ବା ପ୍ରାପ୍ତ କରିବାକୁ କିଛି ଆପ୍କୁ ବାରଣ କରେ। ଆପଣ ବର୍ତ୍ତମାନ ବ୍ୟବହାର କରୁଥିବା ଆପ୍, ଡାଟା ଆକ୍ସେସ୍ କରିପାରେ, କିନ୍ତୁ ଏହା କମ୍ ଥର କରିପାରେ। ଏହାର ଅର୍ଥ ହୋଇପାରେ, ଯେପରି, ଆପଣ ଟାପ୍ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ଯେଉଁ ଇମେଜ୍ ଦେଖାଯାଏ ନାହିଁ।"</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"ଡାଟା ସେଭର୍ ଅନ୍ କରିବେ?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"ଅନ୍ କରନ୍ତୁ"</string>
@@ -1965,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"କ’ଣ ଅବରୋଧ ହୋଇଛି ଯାଞ୍ଚ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ।"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"ସିଷ୍ଟମ୍"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ସେଟିଙ୍ଗ"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"ଷ୍ଟାଣ୍ଡବାଏ"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android ଟିଭି ଡିଭାଇସ୍ ଶୀଘ୍ର ବନ୍ଦ ହୋଇଯିବ; ଏହା ଚାଲୁ ରଖିବା ପାଇଁ ଏକ ବଟନ୍ ଦବାନ୍ତୁ।"</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"ଡିଭାଇସ୍ ଶୀଘ୍ର ବନ୍ଦ ହୋଇଯିବ; ଚାଲୁ ରଖିବା ପାଇଁ ଦବାନ୍ତୁ।"</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"କ୍ୟାମେରା"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"ମାଇକ୍ରୋଫୋନ୍"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"ଆପଣଙ୍କ ସ୍କ୍ରୀନ୍ ଉପରେ ଥିବା ଅନ୍ୟ ଆପ୍ ଉପରେ ଦେଖାଦେବ"</string>
@@ -2008,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"ସିଧାସଳଖ ସେୟାର୍ ସୁବିଧା ଉପଲବ୍ଧ ନାହିଁ"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"ଆପ୍ସ ତାଲିକା"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"ଏହି ଆପ୍କୁ ରେକର୍ଡ କରିବାକୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ କିନ୍ତୁ ଏହି USB ଡିଭାଇସ୍ ଜରିଆରେ ଅଡିଓ କ୍ୟାପ୍ଚର୍ କରିପାରିବ।"</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"ମୂଳପୃଷ୍ଠା"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"ପଛକୁ ଫେରନ୍ତୁ"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"ବର୍ତ୍ତମାନର ଆପ୍ଗୁଡ଼ିକ"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ଖୋଲନ୍ତୁ"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"କ୍ୱିକ୍ ସେଟିଂସ୍ ଖୋଲନ୍ତୁ"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"ପାୱାର ଡାୟଲଗ୍ ଖୋଲନ୍ତୁ"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"ଦୁଇଟି ସ୍କ୍ରିନ୍ ମଧ୍ୟରେ ଟୋଗଲ୍ କରନ୍ତୁ"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"ସ୍କ୍ରିନ୍ ଲକ୍ କରନ୍ତୁ"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"ସ୍କ୍ରିନ୍ସଟ୍ ନିଅନ୍ତୁ"</string>
</resources>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index 63b5f53..0f27133 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"ਕੀ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ਨੂੰ ਇਸ ਡੀਵਾਈਸ ਦੇ ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੇਣੀ ਹੈ?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਐਪ ਦੀ ਵਰਤੋਂ ਕਰਨ ਵੇਲੇ ਹੀ ਐਪ ਕੋਲ ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚ ਹੋਵੇਗੀ"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"ਕੀ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ਨੂੰ ਹਰ ਵੇਲੇ <b>ਇਸ ਡੀਵਾਈਸ ਦੇ ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੇਣੀ ਹੈ</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਐਪ ਦੀ ਵਰਤੋਂ ਕਰਨ ਵੇਲੇ ਹੀ ਐਪ ਹੁਣ ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚ ਕਰ ਸਕੇਗੀ"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"ਕੈਲੰਡਰ"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"ਤੁਹਾਡੇ ਕੈਲੰਡਰ ਤੱਕ ਪਹੁੰਚ ਕਰਨ"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"ਕੀ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ਨੂੰ ਤੁਹਾਡੇ ਕੈਲੰਡਰ ਤੱਕ ਪਹੁੰਚ ਕਰਨੀ ਦੇਣੀ ਹੈ?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"ਟੈਪ ਕਰਕੇ ਦੋਖੋ ਕਿ ਕਿਹੜੀਆਂ ਚੀਜ਼ਾਂ ਬਲਾਕ ਕੀਤੀਆਂ ਗਈਆਂ ਹਨ।"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"ਸਿਸਟਮ"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ਸੈਟਿੰਗਾਂ"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"ਸਟੈਂਡਬਾਈ"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV ਡੀਵਾਈਸ ਜਲਦ ਹੀ ਬੰਦ ਹੋ ਜਾਵੇਗਾ; ਇਸਨੂੰ ਚਾਲੂ ਰੱਖਣ ਲਈ ਕੋਈ ਬਟਨ ਦਬਾਓ।"</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"ਡੀਵਾਈਸ ਜਲਦ ਹੀ ਬੰਦ ਹੋ ਜਾਵੇਗਾ, ਇਸਨੂੰ ਚਾਲੂ ਰੱਖਣ ਲਈ ਦਬਾਓ।"</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"ਕੈਮਰਾ"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"ਮਾਈਕ੍ਰੋਫ਼ੋਨ"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ \'ਤੇ ਹੋਰਾਂ ਐਪਾਂ ਉੱਪਰ ਦਿਖਾਇਆ ਜਾ ਰਿਹਾ ਹੈ"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"ਸਿੱਧਾ ਸਾਂਝਾ ਕਰਨ ਦੀ ਸੁਵਿਧਾ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"ਐਪ ਸੂਚੀ"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"ਇਸ ਐਪ ਨੂੰ ਰਿਕਾਰਡ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦਿੱਤੀ ਗਈ ਪਰ ਇਹ USB ਡੀਵਾਈਸ ਰਾਹੀਂ ਆਡੀਓ ਕੈਪਚਰ ਕਰ ਸਕਦੀ ਹੈ।"</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"ਹੋਮ"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"ਪਿੱਛੇ"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"ਹਾਲੀਆ ਐਪਾਂ"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"ਸੂਚਨਾਵਾਂ"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"ਪਾਵਰ ਵਿੰਡੋ"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"ਸਪਲਿਟ ਸਕ੍ਰੀਨ ਨੂੰ ਟੌਗਲ ਕਰੋ"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"ਲਾਕ ਸਕ੍ਰੀਨ"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"ਸਕ੍ਰੀਨਸ਼ਾਟ"</string>
</resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index bd695a9..38b982a 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -292,7 +292,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Zezwolić aplikacji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na dostęp do lokalizacji urządzenia?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Aplikacja będzie mieć dostęp do lokalizacji tylko wtedy, gdy będzie używana"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Zezwolić aplikacji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na <b>ciągły</b> dostęp do lokalizacji tego urządzenia?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Aplikacja obecnie ma dostęp do lokalizacji tylko wtedy, gdy jest używana"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"Aplikacja chce mieć stały dostęp do Twojej lokalizacji, nawet gdy nie jest używana. Zezwól w "<annotation id="link">"ustawieniach"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendarz"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"dostęp do kalendarza"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Zezwolić aplikacji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na dostęp do kalendarza?"</string>
@@ -566,7 +566,7 @@
<string name="permdesc_manageFace" msgid="8919637120670185330">"Zezwala na aktywowanie przez aplikację metody dodawania i usuwania szablonów twarzy."</string>
<string name="permlab_useFaceAuthentication" msgid="2565716575739037572">"używanie sprzętu do rozpoznawania twarzy"</string>
<string name="permdesc_useFaceAuthentication" msgid="4712947955047607722">"Zezwala na używanie przez aplikację sprzętu do rozpoznawania twarzy w uwierzytelniania"</string>
- <string name="face_recalibrate_notification_name" msgid="1913676850645544352">"Rozpoznanie twarzy"</string>
+ <string name="face_recalibrate_notification_name" msgid="1913676850645544352">"Rozpoznawanie twarzy"</string>
<string name="face_recalibrate_notification_title" msgid="4087620069451499365">"Zarejestruj swoją twarz ponownie"</string>
<string name="face_recalibrate_notification_content" msgid="5530308842361499835">"Aby poprawić rozpoznawanie, ponownie zarejestruj swoją twarz"</string>
<string name="face_acquired_insufficient" msgid="2767330364802375742">"Nie udało się zarejestrować danych twarzy. Spróbuj ponownie."</string>
@@ -595,12 +595,12 @@
<string name="face_error_timeout" msgid="981512090365729465">"Spróbuj rozpoznania twarzy ponownie."</string>
<string name="face_error_no_space" msgid="2712120617457553825">"Nie można przechowywać nowych danych twarzy. Usuń stare."</string>
<string name="face_error_canceled" msgid="283945501061931023">"Analiza twarzy została anulowana."</string>
- <string name="face_error_user_canceled" msgid="5317030072349668946">"Użytkownik anulował rozpoznanie twarzy."</string>
+ <string name="face_error_user_canceled" msgid="5317030072349668946">"Użytkownik anulował rozpoznawanie twarzy."</string>
<string name="face_error_lockout" msgid="3407426963155388504">"Zbyt wiele prób. Spróbuj ponownie później."</string>
- <string name="face_error_lockout_permanent" msgid="4723594314443097159">"Zbyt wiele prób. Rozpoznanie twarzy zostało wyłączone."</string>
+ <string name="face_error_lockout_permanent" msgid="4723594314443097159">"Zbyt wiele prób. Rozpoznawanie twarzy zostało wyłączone."</string>
<string name="face_error_unable_to_process" msgid="4940944939691171539">"Nie można zweryfikować twarzy. Spróbuj ponownie."</string>
- <string name="face_error_not_enrolled" msgid="4016937174832839540">"Rozpoznanie twarzy nie jest skonfigurowane."</string>
- <string name="face_error_hw_not_present" msgid="8302690289757559738">"To urządzenie nie obsługuje rozpoznania twarzy."</string>
+ <string name="face_error_not_enrolled" msgid="4016937174832839540">"Rozpoznawanie twarzy nie jest skonfigurowane."</string>
+ <string name="face_error_hw_not_present" msgid="8302690289757559738">"To urządzenie nie obsługuje rozpoznawania twarzy."</string>
<string name="face_name_template" msgid="7004562145809595384">"Twarz <xliff:g id="FACEID">%d</xliff:g>"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -899,7 +899,7 @@
<string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Rozwiń obszar odblokowania."</string>
<string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Odblokowanie przesunięciem."</string>
<string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Odblokowanie wzorem."</string>
- <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Rozpoznanie twarzy"</string>
+ <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Rozpoznawanie twarzy"</string>
<string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Odblokowanie kodem PIN."</string>
<string name="keyguard_accessibility_sim_pin_unlock" msgid="9149698847116962307">"Odblokowanie kodu PIN karty SIM."</string>
<string name="keyguard_accessibility_sim_puk_unlock" msgid="9106899279724723341">"Odblokowanie kodu PUK karty SIM."</string>
@@ -932,7 +932,7 @@
<string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$1$2$3"</string>
<string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
<string name="autofill_address_summary_format" msgid="4874459455786827344">"$1$2$3"</string>
- <string name="autofill_province" msgid="2231806553863422300">"Województwo"</string>
+ <string name="autofill_province" msgid="2231806553863422300">"Region"</string>
<string name="autofill_postal_code" msgid="4696430407689377108">"Kod pocztowy"</string>
<string name="autofill_state" msgid="6988894195520044613">"Stan"</string>
<string name="autofill_zip_code" msgid="8697544592627322946">"Kod pocztowy"</string>
@@ -2029,9 +2029,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Kliknij, by sprawdzić, co jest zablokowane."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Ustawienia"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Tryb gotowości"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Urządzenie z Androidem TV za chwilę się wyłączy. Naciśnij przycisk, by pozostało włączone."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Urządzenie za chwilę się wyłączy. Naciśnij, by pozostało włączone."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Aparat"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"wyświetla się nad innymi aplikacjami na ekranie"</string>
@@ -2074,22 +2071,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Udostępnianie bezpośrednie jest niedostępne"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Lista aplikacji"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Ta aplikacja nie ma uprawnień do nagrywania, ale może rejestrować dźwięk za pomocą tego urządzenia USB."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Ekran główny"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Wstecz"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Ostatnie aplikacje"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Powiadomienia"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Szybkie ustawienia"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Okno opcji zasilania"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Przełącz podzielony ekran"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Ekran blokady"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Zrzut ekranu"</string>
</resources>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index 45a2abd2..4d68520 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Permitir que o app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acesse o local deste dispositivo?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"O app só terá acesso ao local enquanto estiver sendo usado"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Permitir que o <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acesse o local do dispositivo <b>o tempo todo</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"No momento, o app só pode acessar o local enquanto estiver sendo usado"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Agenda"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"acesse sua agenda"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acesse sua agenda?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Toque para verificar o que está bloqueado."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Configurações"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Espera"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"O dispositivo Android TV entrará no modo de espera em breve. Pressione um botão para mantê-lo ativado."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"O dispositivo entrará no modo de espera em breve. Pressione para mantê-lo ativado."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Câmera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Microfone"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"exibindo sobre outros apps na sua tela"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Compartilhamento direto indisponível"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Lista de apps"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Este app não tem permissão de gravação, mas pode capturar áudio pelo dispositivo USB."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Início"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Voltar"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Apps recentes"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Notificações"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Configurações rápidas"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Caixa de diálogo de liga/desliga"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Ativar tela dividida"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Bloquear tela"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Capturar tela"</string>
</resources>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 0fd303f..42aa191 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Pretende permitir que a aplicação <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aceda à localização deste dispositivo?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"A aplicação tem acesso à localização apenas enquanto a estiver a utilizar"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Pretende permitir que a aplicação <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aceda <b>sempre</b> à localização deste dispositivo?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Atualmente, a aplicação pode aceder à localização apenas enquanto estiver a ser utilizada"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendário"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"aceder ao calendário"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Pretende permitir que a aplicação <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aceda ao calendário?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Toque para verificar o que está bloqueado."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Definições"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Modo de espera"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"O dispositivo Android TV irá desligar-se brevemente. Prima um botão para o manter ligado."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"O dispositivo irá desligar-se brevemente. Prima para o manter ligado."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Câmara"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Microfone"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"sobrepõe-se a outras aplicações no ecrã"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"A partilha direta não está disponível."</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Lista de aplicações"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Esta aplicação não recebeu autorização de gravação, mas pode capturar áudio através deste dispositivo USB."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Página inicial"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Anterior"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Aplicações recentes"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Notificações"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Definições rápidas"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Caixa de diálogo de energia"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Ativar/desativar o ecrã dividido"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Ecrã de bloqueio"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Captura de ecrã"</string>
</resources>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 45a2abd2..4d68520 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Permitir que o app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acesse o local deste dispositivo?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"O app só terá acesso ao local enquanto estiver sendo usado"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Permitir que o <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acesse o local do dispositivo <b>o tempo todo</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"No momento, o app só pode acessar o local enquanto estiver sendo usado"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Agenda"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"acesse sua agenda"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acesse sua agenda?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Toque para verificar o que está bloqueado."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistema"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Configurações"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Espera"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"O dispositivo Android TV entrará no modo de espera em breve. Pressione um botão para mantê-lo ativado."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"O dispositivo entrará no modo de espera em breve. Pressione para mantê-lo ativado."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Câmera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Microfone"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"exibindo sobre outros apps na sua tela"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Compartilhamento direto indisponível"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Lista de apps"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Este app não tem permissão de gravação, mas pode capturar áudio pelo dispositivo USB."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Início"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Voltar"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Apps recentes"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Notificações"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Configurações rápidas"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Caixa de diálogo de liga/desliga"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Ativar tela dividida"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Bloquear tela"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Capturar tela"</string>
</resources>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index a878628..8fc87d8 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -289,7 +289,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Permiteți <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> să acceseze locația acestui dispozitiv?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Aplicația va avea acces la locație doar atunci când o folosiți"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Permiteți aplicației <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> să acceseze locația dispozitivului <b>tot timpul</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Aplicația poate accesa locația numai când folosiți aplicația"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"Este posibil ca aplicația să dorească să vă acceseze în permanență locația, chiar și când nu o folosiți. Acordați această permisiune din "<annotation id="link">"setări"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendar"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"acceseze calendarul"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Permiteți <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> să vă acceseze calendarul?"</string>
@@ -1996,9 +1996,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Atingeți pentru a verifica ce este blocat."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Setări"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Standby"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Dispozitivul Android TV se va opri în curând. Apăsați un buton pentru a-l menține pornit."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Dispozitivul se va opri în curând. Apăsați pentru a-l menține pornit."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Cameră foto"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Microfon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"se afișează peste alte aplicații de pe ecran"</string>
@@ -2040,22 +2037,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Trimiterea directă nu este disponibilă"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Lista de aplicații"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Permisiunea de înregistrare nu a fost acordată aplicației, dar aceasta poate să înregistreze conținut audio prin intermediul acestui dispozitiv USB."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Pornire"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Înapoi"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Aplicații recente"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Notificări"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Setări rapide"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Power Dialog"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Activați ecranul împărțit"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Ecran de blocare"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Captură de ecran"</string>
</resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index aa94aa6..ce206d0 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -292,7 +292,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Разрешить приложению <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> доступ к данным о местоположении устройства?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Доступ к местоположению будет открыт, только пока вы пользуетесь приложением."</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Разрешить приложению \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" постоянный доступ к местоположению устройства?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Сейчас у приложения есть доступ к местоположению только во время его использования."</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Календарь"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"доступ к календарю"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Разрешить приложению <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> доступ к календарю?"</string>
@@ -2029,9 +2030,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Нажмите, чтобы проверить настройки."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Система"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Настройки"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Переход в режим ожидания"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Устройство Android TV скоро выключится. Чтобы этого не произошло, нажмите любую кнопку."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Устройство скоро выключится. Чтобы этого не произошло, нажмите любую кнопку или коснитесь экрана."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Камера"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Микрофон"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"показ поверх других окон"</string>
@@ -2074,22 +2072,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Функция Direct Share недоступна."</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Список приложений"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Приложению не разрешено записывать звук, однако оно может делать это с помощью этого USB-устройства."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Главный экран"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Назад"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Недавние приложения"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Уведомления"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Быстрые настройки"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Диалоговое окно питания"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Включить или выключить разделение экрана"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Заблокированный экран"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Скриншот"</string>
</resources>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
index ee261a54..d48d78e 100644
--- a/core/res/res/values-si/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g><b> වෙත මෙම උපාංගයේ ස්ථානය ලබා ගැනීමට ඉඩ දෙන්නද?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"ඔබ යෙදුම භාවිත කරන විට පමණක් යෙදුමට ස්ථානය වෙත ප්රවේශය ඇත"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> හට ඔබේ උපාංයේ ස්ථානය වෙත <b>සැම විටම</b> ප්රවේශ වීමට ඉඩ දෙන්නේද?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"යෙදුමට දැනට ඔබ යෙදුම භාවිත කරන විට පමණක් ස්ථානය වෙත ප්රවේශ විය හැක"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"දින දර්ශනය"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"ඔබේ දින දර්ශනයට පිවිසෙන්න"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g><b> වෙත ඔබගේ දින දර්ශනය ප්රවේශ කිරීමට ඉඩ දෙන්නද?"</string>
@@ -1965,9 +1966,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"අවහිර කර ඇති දේ පරීක්ෂා කිරීමට තට්ටු කරන්න."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"පද්ධතිය"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"සැකසීම්"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"පොරොත්තු"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV උපාංගය ඉක්මනින් ක්රියා විරහිත වනු ඇත; එය දිගටම ක්රියාත්මක කර තැබීමට බොත්තමක් ඔබන්න."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"උපාංගය ඉක්මනින් ක්රියා විරහිත වනු ඇත; එය දිගටම ක්රියාත්මක කර තැබීමට ඔබන්න."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"කැමරාව"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"මයික්රෆෝනය"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"ඔබගේ තිරය මත වෙනත් යෙදුම්වලට උඩින් සංදර්ශනය කරමින්"</string>
@@ -2008,22 +2006,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"ඍජු බෙදා ගැනීම නොලැබේ"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"යෙදුම් ලැයිස්තුව"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"මෙම යෙදුමට පටිගත කිරීම් අවසරයක් ලබා දී නොමැති නමුත් මෙම USB උපාංගය හරහා ශ්රව්ය ග්රහණය කර ගත හැකිය."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"මුල් පිටුව"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"ආපසු"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"මෑත යෙදුම්"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"දැනුම්දීම්"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"ඉක්මන් සැකසීම්"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"බල සංවාදය"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"බෙදුම් තිරය ටොගල කරන්න"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"අගුලු තිරය"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"තිර රුව"</string>
</resources>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index ed4f68c..7123dba 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -292,7 +292,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Povoliť aplikácii <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> prístup k polohe tohto zariadenia?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Aplikácia bude mať prístup k polohe iba vtedy, keď ju budete používať"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Chcete povoliť aplikácii <xliff:g id="APP_NAME">%1$s</xliff:g> prístup k polohe tohto zariadenia po celý čas?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Aplikácia má momentálne prístup k polohe iba vtedy, keď ju budete používať"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendár"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"prístup ku kalendáru"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Povoliť aplikácii <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> prístup ku kalendáru?"</string>
@@ -2029,9 +2030,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Klepnutím skontrolujete, čo je blokované."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Systém"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Nastavenia"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Pohotovostný režim"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Zariadenie Android TV sa čoskoro vypne. Ak ho chcete ponechať zapnuté, stlačte ľubovoľné tlačidlo."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Zariadenie sa čoskoro vypne. Ak ho chcete ponechať zapnuté, stlačte ľubovoľné tlačidlo."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Fotoaparát"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofón"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"sa zobrazuje cez ďalšie aplikácie na obrazovke"</string>
@@ -2074,22 +2072,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Priame zdieľanie nie je k dispozícii"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Zoznam aplikácií"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Tejto aplikácii nebolo udelené povolenie na nahrávanie, ale môže nasnímať zvuk cez toto zariadenie USB."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Domov"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Späť"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Nedávne aplikácie"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Upozornenia"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Rýchle nastavenia"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Dialógové okno napájania"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Prepnúť rozdelenú obrazovku"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Uzamknúť obrazovku"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Snímka obrazovky"</string>
</resources>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index dc162a8..852073e 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -292,7 +292,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Dovolite aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> dostop do lokacije te naprave?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Aplikacija bo imela dostop do lokacije samo, ko aplikacijo uporabljate"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Dovolite aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>, da <b>ves čas</b> dostopa do lokacije te naprave?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Trenutno lahko aplikacija dostopa do lokacije samo, ko aplikacijo uporabljate"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"Ta aplikacija bo morda želela imeti stalen dostop do vaše lokacije, tudi ko aplikacije ne boste uporabljali. Omogočite v "<annotation id="link">"nastavitvah"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Koledar"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"dostop do koledarja"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Dovolite aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> dostop do koledarja?"</string>
@@ -2029,9 +2029,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Dotaknite se, da preverite, kaj je blokirano."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Nastavitve"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Stanje pripravljenosti"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Naprava Android TV se bo kmalu izklopila. Če tega ne želite, pritisnite poljuben gumb."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Naprava se bo kmalu izklopila. Če tega ne želite, pritisnite."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Fotoaparat"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"prekriva druge aplikacije na zaslonu"</string>
@@ -2074,22 +2071,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Neposredna skupna raba ni na voljo"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Seznam aplikacij"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Ta aplikacija sicer nima dovoljenja za snemanje, vendar bi lahko zajemala zvok prek te naprave USB."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Začetni zaslon"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Nazaj"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Nedavne aplikacije"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Obvestila"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Hitre nastavitve"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Pogovorno okno o porabi energije"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Preklop razdeljenega zaslona"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Zaklenjen zaslon"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Posnetek zaslona"</string>
</resources>
diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml
index 4973f9f..26b5932 100644
--- a/core/res/res/values-sq/strings.xml
+++ b/core/res/res/values-sq/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Të lejohet që <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> të ketë qasje te vendndodhja e kësaj pajisjeje?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Aplikacioni do të ketë qasje te vendndodhja vetëm kur po e përdor aplikacionin"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Të lejohet që <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> të qaset te vendndodhja e kësaj pajisjeje <b>gjatë të gjithë kohës</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Aplikacioni aktualisht mund të qaset te vendndodhja vetëm kur ti e përdor aplikacionin"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendari"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"qasje te kalendari yt"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Të lejohet që <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> të ketë qasje te kalendari yt?"</string>
@@ -1771,10 +1772,8 @@
<string name="package_updated_device_owner" msgid="1847154566357862089">"Përditësuar nga administratori"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"Fshirë nga administratori"</string>
<string name="confirm_battery_saver" msgid="639106420541753635">"Në rregull"</string>
- <!-- no translation found for battery_saver_description_with_learn_more (1002571337088673987) -->
- <skip />
- <!-- no translation found for battery_saver_description (2307555792915978653) -->
- <skip />
+ <string name="battery_saver_description_with_learn_more" msgid="1002571337088673987">"Për të rritur kohëzgjatjen e baterisë, \"Kursyesi i baterisë\":\n·Aktivizon \"Temën e errët\"\n·Çaktivizon ose kufizon aktivitetin në sfond, disa efekte vizuale dhe veçori të tjera si “Ok Google”\n\n"<annotation id="url">"Mëso më shumë"</annotation></string>
+ <string name="battery_saver_description" msgid="2307555792915978653">"Për të rritur kohëzgjatjen e baterisë, \"Kursyesi i baterisë\":\n·Aktivizon \"Temën e errët\"\n·Çaktivizon ose kufizon aktivitetin në sfond, disa efekte vizuale dhe veçori të tjera si “Ok Google”"</string>
<string name="data_saver_description" msgid="6015391409098303235">"Për të ndihmuar në reduktimin e përdorimit të të dhënave, \"Kursyesi i të dhënave\" pengon që disa aplikacione të dërgojnë apo të marrin të dhëna në sfond. Një aplikacion që po përdor aktualisht mund të ketë qasje te të dhënat, por këtë mund ta bëjë më rrallë. Kjo mund të nënkuptojë, për shembull, se imazhet nuk shfaqen kur troket mbi to."</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"Të aktivizohet \"Kursyesi i të dhënave\"?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"Aktivizo"</string>
@@ -1965,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Trokit për të shënuar atë që është bllokuar"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistemi"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Cilësimet"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Në gatishmëri"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Pajisja Android TV së shpejti do të fiket. Shtyp një buton për ta mbajtur të ndezur."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Pajisja së shpejti do të fiket. Shtype për ta mbajtur të ndezur."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofoni"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"po shfaqet mbi aplikacionet e tjera në ekranin tënd"</string>
@@ -2008,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Ndarja e drejtpërdrejtë nuk ofrohet"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Lista e aplikacioneve"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Këtij aplikacioni nuk i është dhënë leje për regjistrim, por mund të regjistrojë audio përmes kësaj pajisjeje USB."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Ekrani bazë"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Prapa"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Aplikacionet e fundit"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Njoftimet"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Cilësimet e shpejta"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Dialogu i energjisë"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Kalo tek ekrani i ndarë"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Ekrani i kyçjes"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Pamja e ekranit"</string>
</resources>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 48658bb..f314601 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -289,7 +289,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Желите ли да омогућите да <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> приступа локацији овог уређаја?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Апликација ће имати приступ локацији само док користите апликацију"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Желите ли да дозволите да <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> приступа локацији уређаја <b>у било ком тренутку</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Апликација тренутно може да приступа локацији само када користите апликацију"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"Ова апликација можда жели да приступа локацији све време, чак и када не користите апликацију. Омогућите у "<annotation id="link">"подешавањима"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Календар"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"приступи календару"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Желите ли да омогућите да <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> приступа календару?"</string>
@@ -1996,9 +1996,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Додирните да бисте проверили шта је блокирано."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Систем"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Подешавања"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Стање приправности"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV ће се ускоро искључити. Притисните дугме да би остао укључен."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Уређај ће се ускоро искључити. Притисните да би остао укључен."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Камера"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Микрофон"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"приказује се на екрану док користите друге апликације"</string>
@@ -2040,22 +2037,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Директно дељење није доступно"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Листа апликација"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Ова апликација нема дозволу за снимање, али би могла да снима звук помоћу овог USB уређаја."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Почетак"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Назад"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Недавне апликације"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Обавештења"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Брза подешавања"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Дијалог напајања"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Укључите/искључите подељени екран"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Закључани екран"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Снимак екрана"</string>
</resources>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 09a2513..d67ffa2 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Vill du ge <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> åtkomst till enhetens plats?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Appen får endast åtkomst till din plats när du använder den"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Vill du tillåta att <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> alltid får åtkomst till platsen för den här <b>enheten</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Appen har för närvarande endast åtkomst till din plats när du använder den"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"få tillgång till din kalender"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Vill du ge <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> åtkomst till din kalender?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Tryck om du vill se vad som blockeras."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Inställningar"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Viloläge"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV-enheten stängs snart av. Tryck på en knapp för att behålla den på."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Enheten stängs snart av. Tryck för att behålla den på."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"visar över andra appar på mobilen"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Dela direkt är inte tillgängligt"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Applista"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Appen har inte fått inspelningsbehörighet men kan spela in ljud via denna USB-enhet."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Startsida"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Tillbaka"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Senaste apparna"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Aviseringar"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Snabbinställningar"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Dialogruta för ström"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Aktivera och inaktivera delad skärm"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Låsskärm"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Skärmdump"</string>
</resources>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 483c39f..5713ef1 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -286,7 +286,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Ungependa kuiruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> itambue mahali kifaa kilipo?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Programu itafikia data ya mahali ulipo unapoitumia tu"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Je, ungependa kuruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ifikie kifaa cha mahali <b>kila wakati</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Programu sasa inaweza kufikia data ya mahali wakati unapoitumia tu"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"Huenda programu hii ikataka kufikia maelezo ya mahali ulipo kila wakati, hata wakati huitumii. Iruhusu katika "<annotation id="link">"mipangilio"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalenda"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"ifikie kalenda yako"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Ungependa kuiruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ifikie kalenda yako?"</string>
@@ -1963,9 +1963,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Gusa ili uangalie kipengee ambacho kimezuiwa."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Mfumo"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Mipangilio"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Hali tuli"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Kifaa cha Android TV kitazima hivi karibuni; bonyeza kitufe ili kisizime."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Kifaa kitazima hivi karibuni; bonyeza ili kisizime."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Maikrofoni"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"inachomoza kwenye programu zingine katika skrini yako"</string>
@@ -2006,22 +2003,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Huwezi kushiriki moja kwa moja"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Orodha ya programu"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Programu hii haijapewa ruhusa ya kurekodi lakini inaweza kurekodi sauti kupitia kifaa hiki cha USB."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Mwanzo"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Rudi nyuma"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Programu za Hivi Karibuni"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Arifa"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Mipangilio ya Haraka"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Kidirisha cha Nishati"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Geuza Skrini Iliyogawanywa"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Skrini Iliyofungwa"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Picha ya skrini"</string>
</resources>
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index 0c4e20e..cae06c3 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> இந்தச் சாதனத்தின் இருப்பிடத்தை அணுகுவதற்கு அனுமதிக்கவா?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"இந்த ஆப்ஸை நீங்கள் உபயோகிக்கும்போது மட்டுமே இருப்பிடத்தை அணுகும்"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ஆப்ஸிற்கு <b>எப்போதும்</b> இந்தச் சாதனத்தின் இருப்பிட அணுகலை அனுமதிக்கவா?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"நீங்கள் ஆப்ஸை உபயோகிக்கும்போது மட்டுமே அது இருப்பிடத்தை அணுக முடியும்"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"கேலெண்டர்"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"கேலெண்டரை அணுகலாம்"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"கேலெண்டரை அணுகுவதற்கு <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ஆப்ஸை அனுமதிக்கவா?"</string>
@@ -1342,7 +1343,7 @@
<string name="alert_windows_notification_channel_group_name" msgid="1463953341148606396">"பிற ஆப்ஸின் மேலே காட்டு"</string>
<string name="alert_windows_notification_channel_name" msgid="3116610965549449803">"<xliff:g id="NAME">%s</xliff:g> பிற ஆப்ஸின் மீது தோன்றுகிறது"</string>
<string name="alert_windows_notification_title" msgid="3697657294867638947">"<xliff:g id="NAME">%s</xliff:g> பிற ஆப்ஸின் மீது தோன்றுகிறது"</string>
- <string name="alert_windows_notification_message" msgid="8917232109522912560">"<xliff:g id="NAME">%s</xliff:g> இந்த அம்சத்தைப் பயன்படுத்த வேண்டாம் என நினைத்தால், அமைப்புகளைத் திறந்து அதை முடக்க, தட்டவும்."</string>
+ <string name="alert_windows_notification_message" msgid="8917232109522912560">"<xliff:g id="NAME">%s</xliff:g> இந்த அம்சத்தைப் பயன்படுத்த வேண்டாம் என நினைத்தால் இங்கு தட்டி அமைப்புகளைத் திறந்து இதை முடக்கவும்."</string>
<string name="alert_windows_notification_turn_off_action" msgid="2902891971380544651">"ஆஃப் செய்"</string>
<string name="ext_media_checking_notification_title" msgid="4411133692439308924">"<xliff:g id="NAME">%s</xliff:g>ஐச் சரிபார்க்கிறது…"</string>
<string name="ext_media_checking_notification_message" msgid="410185170877285434">"தற்போதைய உள்ளடக்கத்தை மதிப்பாய்வு செய்கிறது"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"எவற்றையெல்லாம் தடுக்கிறது என்பதைப் பார்க்க, தட்டவும்."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"சிஸ்டம்"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"அமைப்புகள்"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"இயக்க நேரம்"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV விரைவில் ஆஃப் ஆகலாம். இதைத் தொடர்ந்து ஆனில் வைக்க ஒரு பட்டனைத் தட்டவும்."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"இந்தச் சாதனம் விரைவில் ஆஃப் ஆகலாம். இதைத் தொடர்ந்து ஆனில் வைக்கத் தட்டவும்."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"கேமரா"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"மைக்ரோஃபோன்"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"உங்கள் திரையில் உள்ள பிற ஆப்ஸின் மேல் காட்டுகிறது"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"நேரடிப் பகிர்வு இல்லை"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"ஆப்ஸ் பட்டியல்"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"இந்த ஆப்ஸிற்கு ரெக்கார்டு செய்வதற்கான அனுமதி வழங்கப்படவில்லை, எனினும் இந்த USB சாதனம் மூலம் ஆடியோவைப் பதிவுசெய்ய முடியும்."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"முகப்பு"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"பின் செல்"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"சமீபத்திய ஆப்ஸ்"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"அறிவிப்புகள்"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"விரைவு அமைப்புகள்"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"பவர் உரையாடல்"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"திரைப் பிரிப்பை நிலைமாற்று"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"பூட்டுத் திரை"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"ஸ்கிரீன்ஷாட்"</string>
</resources>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index 1b3df6e..167cc9b 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -286,7 +286,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"ఈ పరికరం యొక్క లొకేషన్ను యాక్సెస్ చేయడానికి <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>ను అనుమతించాలా?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"మీరు యాప్ను ఉపయోగిస్తున్నప్పుడు మాత్రమే స్థానానికి యాప్ యాక్సెస్ కలిగి ఉంటుంది"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"ఈ పరికరం యొక్క లొకేషన్ను <b>అన్ని సమయాలలో</b> యాక్సెస్ చేయడానికి <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>ను అనుమతించాలా?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"యాప్ ప్రస్తుతం మీరు ఆ యాప్ను ఉపయోగిస్తున్నప్పుడు మాత్రమే స్థానాన్ని యాక్సెస్ చేయగలుగుతుంది"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"ఈ యాప్నకు మీ లొకేషన్ యాక్సెస్ అన్ని సమయాలలో, అంటే యాప్ను ఉపయోగించనప్పుడు కూడా, అవసరం ఉండవచ్చు. అనుమతిని ఇక్కడ ఇవ్వండి: "<annotation id="link">"సెట్టింగ్లు"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"క్యాలెండర్"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"మీ క్యాలెండర్ను యాక్సెస్ చేయడానికి"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"మీ క్యాలెండర్ని యాక్సెస్ చేయడానికి <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>ని అనుమతించాలా?"</string>
@@ -1340,9 +1340,9 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="alert_windows_notification_channel_group_name" msgid="1463953341148606396">"ఇతర యాప్ల ఎగువన ప్రదర్శన"</string>
- <string name="alert_windows_notification_channel_name" msgid="3116610965549449803">"<xliff:g id="NAME">%s</xliff:g> ఇతర అనువర్తనాలలో చూపబడుతోంది"</string>
- <string name="alert_windows_notification_title" msgid="3697657294867638947">"<xliff:g id="NAME">%s</xliff:g> ఇతర అనువర్తనాలలో చూపబడుతోంది"</string>
- <string name="alert_windows_notification_message" msgid="8917232109522912560">"<xliff:g id="NAME">%s</xliff:g> ఈ లక్షణాన్ని ఉపయోగించకూడదు అని మీరు అనుకుంటే, సెట్టింగ్లను తెరవడానికి నొక్కి, దీన్ని ఆఫ్ చేయండి."</string>
+ <string name="alert_windows_notification_channel_name" msgid="3116610965549449803">"<xliff:g id="NAME">%s</xliff:g> ఇతర యాప్లలో చూపబడుతోంది"</string>
+ <string name="alert_windows_notification_title" msgid="3697657294867638947">"<xliff:g id="NAME">%s</xliff:g> ఇతర యాప్లలో చూపబడుతోంది"</string>
+ <string name="alert_windows_notification_message" msgid="8917232109522912560">"<xliff:g id="NAME">%s</xliff:g> ఈ లక్షణాన్ని ఉపయోగించకూడదు అని మీరు అనుకుంటే, సెట్టింగ్లను తెరవడానికి ట్యాప్ చేసి, దీన్ని ఆఫ్ చేయండి."</string>
<string name="alert_windows_notification_turn_off_action" msgid="2902891971380544651">"ఆఫ్ చేయి"</string>
<string name="ext_media_checking_notification_title" msgid="4411133692439308924">"<xliff:g id="NAME">%s</xliff:g>ని తనిఖీ చేస్తోంది…"</string>
<string name="ext_media_checking_notification_message" msgid="410185170877285434">"ప్రస్తుత కంటెంట్ సమీక్షించబడుతోంది"</string>
@@ -1771,10 +1771,8 @@
<string name="package_updated_device_owner" msgid="1847154566357862089">"మీ నిర్వాహకులు నవీకరించారు"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"మీ నిర్వాహకులు తొలగించారు"</string>
<string name="confirm_battery_saver" msgid="639106420541753635">"సరే"</string>
- <!-- no translation found for battery_saver_description_with_learn_more (1002571337088673987) -->
- <skip />
- <!-- no translation found for battery_saver_description (2307555792915978653) -->
- <skip />
+ <string name="battery_saver_description_with_learn_more" msgid="1002571337088673987">"బ్యాటరీ జీవితకాలాన్ని పెంచడానికి, బ్యాటరీ సేవర్:\n ముదురు రంగు·థీమ్ను ఆన్ చేస్తుంది\n·నేపథ్య కార్యకలాపం, కొన్ని విజువల్ ఎఫెక్ట్స్ మరియు “Hey Google” వంటి ఇతర ఫీచర్లను ఆపివేస్తుంది లేదా పరిమితం చేస్తుంది\n\n"<annotation id="url">"మరింత తెలుసుకోండి"</annotation></string>
+ <string name="battery_saver_description" msgid="2307555792915978653">"బ్యాటరీ జీవితకాలాన్ని పెంచడానికి, బ్యాటరీ సేవర్:\n ముదురు రంగు·థీమ్ను ఆన్ చేస్తుంది\n·నేపథ్య కార్యకలాపం, కొన్ని విజువల్ ఎఫెక్ట్స్ మరియు “Hey Google” వంటి ఇతర ఫీచర్లను ఆపివేస్తుంది లేదా పరిమితం చేస్తుంది"</string>
<string name="data_saver_description" msgid="6015391409098303235">"డేటా వినియోగాన్ని తగ్గించడంలో డేటా సేవర్ సహాయకరంగా ఉంటుంది. బ్యాక్గ్రౌండ్లో కొన్ని యాప్లు డేటాను పంపకుండా లేదా స్వీకరించకుండా నిరోధిస్తుంది. మీరు ప్రస్తుతం ఉపయోగిస్తోన్న యాప్ డేటాను యాక్సెస్ చేయగలదు. కానీ అలా అరుదుగా చేయవచ్చు. ఉదాహరణకు, మీరు చిత్రాలను నొక్కే వరకు అవి ప్రదర్శించబడవు."</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"డేటా సేవర్ను ఆన్ చేయాలా?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"ఆన్ చేయి"</string>
@@ -1890,7 +1888,7 @@
<string name="app_category_image" msgid="4867854544519846048">"ఫోటోలు & చిత్రాలు"</string>
<string name="app_category_social" msgid="5842783057834965912">"సామాజికం & కమ్యూనికేషన్"</string>
<string name="app_category_news" msgid="7496506240743986873">"వార్తలు & వార్తాపత్రికలు"</string>
- <string name="app_category_maps" msgid="5878491404538024367">"మ్యాప్స్ & నావిగేషన్"</string>
+ <string name="app_category_maps" msgid="5878491404538024367">"Maps & నావిగేషన్"</string>
<string name="app_category_productivity" msgid="3742083261781538852">"ఉత్పాదకత"</string>
<string name="device_storage_monitor_notification_channel" msgid="3295871267414816228">"పరికర నిల్వ"</string>
<string name="adb_debugging_notification_channel_tv" msgid="5537766997350092316">"USB డీబగ్గింగ్"</string>
@@ -1965,9 +1963,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"బ్లాక్ చేయబడిన దాన్ని తనిఖీ చేయడానికి నొక్కండి."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"సిస్టమ్"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"సెట్టింగ్లు"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"స్టాండ్బై"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV పరికరం త్వరలో ఆపివేయబడుతుంది; దాన్ని ఆన్లో ఉంచడానికి బటన్ను నొక్కండి."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"పరికరం త్వరలో ఆపివేయబడుతుంది; దీన్ని ఆన్లో ఉంచడానికి నొక్కండి."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"కెమెరా"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"మైక్రోఫోన్"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"మీ స్క్రీన్పై ఇతర యాప్ల ద్వారా ప్రదర్శించబడుతోంది"</string>
@@ -2008,22 +2003,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"డైరెక్ట్ షేర్ అందుబాటులో లేదు"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"యాప్ల జాబితా"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"ఈ యాప్కు రికార్డ్ చేసే అనుమతి మంజూరు కాలేదు, అయినా ఈ USB పరికరం ద్వారా ఆడియోను క్యాప్చర్ చేయగలదు."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"హోమ్"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"వెనుకకు"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"ఇటీవలి యాప్లు"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"నోటిఫికేషన్లు"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"శీఘ్ర సెట్టింగ్లు"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"పవర్ డైలాగ్ను తెరువు"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"స్క్రీన్ విభజనను టోగుల్ చేయి"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"స్క్రీన్ను లాక్ చేయి"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"స్క్రీన్షాట్"</string>
</resources>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index ff1ea21..ab35008 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"อนุญาตให้<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>เข้าถึงตำแหน่งของอุปกรณ์นี้ไหม"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"แอปจะมีสิทธิ์เข้าถึงตำแหน่งในขณะที่คุณใช้แอปเท่านั้น"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"อนุญาตให้ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> เข้าถึงตำแหน่งของอุปกรณ์นี้<b>ตลอดเวลา</b>ไหม"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"ปัจจุบันแอปมีสิทธิ์เข้าถึงตำแหน่งในขณะที่คุณใช้แอปเท่านั้น"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"ปฏิทิน"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"เข้าถึงปฏิทิน"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"อนุญาตให้ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> เข้าถึงปฏิทินไหม"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"แตะเพื่อดูรายการที่ถูกบล็อก"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"ระบบ"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"การตั้งค่า"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"สแตนด์บาย"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"อุปกรณ์ Android TV จะปิดเครื่องในอีกไม่ช้า กดปุ่มเพื่อเปิดอุปกรณ์ต่อไป"</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"อุปกรณ์จะปิดเครื่องในอีกไม่ช้า กดเพื่อเปิดอุปกรณ์ต่อไป"</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"กล้อง"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"ไมโครโฟน"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"แสดงทับแอปอื่นๆ บนหน้าจอ"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"การแชร์โดยตรงไม่พร้อมใช้งาน"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"รายชื่อแอป"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"แอปนี้ไม่ได้รับอนุญาตให้บันทึกเสียงแต่จะบันทึกเสียงผ่านอุปกรณ์ USB นี้ได้"</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"หน้าแรก"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"กลับ"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"แอปล่าสุด"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"การแจ้งเตือน"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"การตั้งค่าด่วน"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"กล่องโต้ตอบพลังงาน"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"เปิด/ปิดการแบ่งหน้าจอ"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"หน้าจอล็อก"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"ภาพหน้าจอ"</string>
</resources>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 79c040f..0dccb4b 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Payagan ang <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na i-access ang lokasyon ng device na ito?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Magkakaroon lang ang app ng access sa lokasyon habang ginagamit mo ang app"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Payagan ang <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na <b>palaging</b> i-access ang lokasyon ng device na ito?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Kasalukuyang maa-access ng app ang lokasyon habang ginagamit mo lang ang app"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendaryo"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"i-access ang iyong kalendaryo"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Payagan ang <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> na i-access ang iyong kalendaryo?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"I-tap para tingnan kung ano ang naka-block."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"System"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Mga Setting"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Standby"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Mag-o-off na ang Android TV device; pumindot ng button para panatilihin itong naka-on."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Mag-o-off na ang device; pumindot para panatilihin itong naka-on."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Camera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikropono"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"ipinapakita sa ibabaw ng ibang app sa iyong screen"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Hindi available ang direktang pagbabahagi"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Listahan ng mga app"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Hindi nabigyan ng pahintulot ang app na ito para mag-record pero nakakapag-capture ito ng audio sa pamamagitan ng USB device na ito."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Home"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Bumalik"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Mga Kamakailang Apps"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Mga Notification"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Mga Mabilisang Setting"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Dialog ng Power"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"I-toggle ang Split Screen"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Lock Screen"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Screenshot"</string>
</resources>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index d6841f0..0a0e64d 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uygulamasının bu cihazın konumuna erişmesine izin verilsin mi?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Bu uygulama konum bilgisine yalnızca kullanıldığı sırada erişebilecektir"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uygulamasının bu cihazın konumuna <b>her zaman</b> erişmesine izin verilsin mi?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Uygulama şu anda yalnızca siz kullanırken konuma erişebilir"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Takvim"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"takviminize erişme"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uygulamasının takviminize erişmesine izin verilsin mi?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Nelerin engellendiğini kontrol etmek için dokunun."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Sistem"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Ayarlar"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Beklemeye alınıyor"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV cihazı kısa süre içinde kapanacak; açık tutmak için bir düğmeye basın."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Cihaz kısa süre içinde kapanacak; açık tutmak için düğmeye basın."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"ekranınızdaki diğer uygulamaların üzerinde görüntüleniyor"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Doğrudan paylaşım mevcut değil"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Uygulama listesi"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Bu uygulamaya ses kaydetme izni verilmedi ancak bu USB cihazı üzerinden sesleri yakalayabilir."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Ana Ekran"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Geri"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Son Uygulamalar"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Bildirimler"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Hızlı Ayarlar"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Güç İletişim Kutusu"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Bölünmüş Ekranı aç/kapat"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Kilit Ekranı"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Ekran görüntüsü"</string>
</resources>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 3412eb2..7cc5857 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -292,7 +292,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Надати додатку <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> доступ до геоданих пристрою?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Додаток матиме доступ до геоданих, лише коли ви ним користуєтеся"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Дозволити додатку <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> <b>завжди</b> отримувати доступ до геоданих цього пристрою?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Зараз додаток має доступ до геоданих, лише коли ви ним користуєтеся"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Календар"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"отримувати доступ до календаря"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Надати додатку <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> доступ до календаря?"</string>
@@ -2029,9 +2030,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Торкніться, щоб перевірити, що заблоковано."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Система"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Налаштування"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Режим очікування"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Незабаром пристрій Android TV буде вимкнено. Натисніть кнопку, щоб цього не сталося."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Незабаром пристрій буде вимкнено. Натисніть, щоб цього не сталося."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Камера"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Мікрофон"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"показ поверх інших додатків на екрані"</string>
@@ -2074,22 +2072,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Прямий обмін даними недоступний"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Список додатків"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Цей додаток не має дозволу на запис, але він може фіксувати звук через цей USB-пристрій."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"На головний екран"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Назад"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Нещодавні додатки"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Сповіщення"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Швидкі налаштування"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Відкрити вікно"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Розділити екран"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Заблокувати екран"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Знімок екрана"</string>
</resources>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index 003fd54..51895ae 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> کو اس آلہ کے مقام تک رسائی کی اجازت دیں؟"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"جب آپ ایپ استعمال کریں گے تبھی ایپ کو مقام تک رسائی حاصل ہوگی"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> کو اس آلہ کے مقام تک <b>ہر وقت</b> رسائی حاصل کرنے کی اجازت دیں؟"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"ایپ کو فی الحال صرف اسی صورت میں مقام تک رسائی حاصل ہو سکتی ہے جب ایپ آپ کے زير استعمال ہو"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"کیلنڈر"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"اپنے کیلنڈر تک رسائی حاصل کریں"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> کو آپ کے کیلنڈر تک رسائی کی اجازت دیں؟"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"مسدود کی گئی چیزوں کو چیک کرنے کے لیے تھپتھپائیں۔"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"سسٹم"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"ترتیبات"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"اسٹینڈ بائی"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV آلہ جلد ہی بند ہوجائے گا آن رکھنے کے ليے بٹن دبائیں۔"</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"آلہ جلد ہی بند ہوجائے گا اسے آن رکھنے کے ليے دبائیں۔"</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"کیمرا"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"مائیکروفون"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"آپ کی اسکرین پر دیگر ایپس پر دکھایا جا رہا ہے"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"بلاواسطہ اشتراک دستیاب نہیں ہے"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"ایپس کی فہرست"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"اس ایپ کو ریکارڈ کرنے کی اجازت عطا نہیں کی گئی ہے مگر اس USB آلہ کے ذریعے آڈیو کیپچر کر سکتی ہے۔"</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"گھر"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"پیچھے"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"حالیہ ایپس"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"اطلاعات"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"فوری ترتیبات"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"پاور ڈائیلاگ"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"اسپلٹ اسکرین ٹوگل کریں"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"مقفل اسکرین"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"اسکرین شاٹ"</string>
</resources>
diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml
index 83e99b9..5640c4d 100644
--- a/core/res/res/values-uz/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -286,7 +286,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uchun bu qurilmaning joylashuvi haqidagi axborotdan foydalanish ruxsati berilsinmi?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Bu ilovadan foydalanilayotdangina u joylashuv axborotidan foydalana oladi"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uchun bu qurilmaning joylashuvi haqidagi axborotdan <b>doim</b> foydalanish ruxsati berilsinmi?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Ilova hozirda joylashuv axborotidan faqat ilova ishlatilayotgandagina foydalana oladi"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"Bu ilova ishlamaganda ham joylashuvingiz axborotidan har doim foydalanmoqchi. Bunga "<annotation id="link">"sozlamalar"</annotation>" orqali ruxsat bering."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Taqvim"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"taqvimingizga kirish"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uchun taqvimingizga ruxsat berilsinmi?"</string>
@@ -1963,9 +1963,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Nimalar bloklanganini tekshirish uchun bosing"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Tizim"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Sozlamalar"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Kutib turing"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV qurilmasi oʻchish arafasida, yoniq qolishi uchun istalgan tugmani bosing."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Qurilma oʻchish arafasida, yoniq qolishi uchun istalgan tugmani bosing"</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Kamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Mikrofon"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"ekranda boshqa ilovalar ustidan ochiladi"</string>
@@ -2006,22 +2003,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Bevosita ulashuv ishlamaydi"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Ilovalar roʻyxati"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Bu ilovaga yozib olish ruxsati berilmagan, lekin shu USB orqali ovozlarni yozib olishi mumkin."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Bosh sahifa"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Orqaga"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Yaqinda ishlatilgan ilovalar"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Bildirishnomalar"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Tezkor sozlamalar"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Quvvat muloqot oynasi"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Ekranni ikkiga ajratish tugmasi"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Ekran qulfi"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Skrinshot"</string>
</resources>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 7b17de7..9bf7729 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Cho phép <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> truy cập vào vị trí của thiết bị này?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Ứng dụng này sẽ chỉ có quyền truy cập vào vị trí khi bạn đang sử dụng ứng dụng này"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Bạn muốn cho phép <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> truy cập vào vị trí của thiết bị này <b>trong mọi trường hợp</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Hiện tại, ứng dụng này chỉ có thể truy cập vào vị trí trong khi bạn dùng"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Lịch"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"truy cập lịch của bạn"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Cho phép <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> truy cập vào lịch của bạn?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Nhấn để xem những thông báo bị chặn."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Hệ thống"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Cài đặt"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Chế độ chờ"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Thiết bị Android TV sẽ sớm tắt. Hãy nhấn vào một nút để thiết bị vẫn bật."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Thiết bị sẽ sớm tắt. Hãy nhấn vào một nút để thiết bị vẫn bật."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Máy ảnh"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Micrô"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"hiển thị qua các ứng dụng khác trên màn hình của bạn"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Không thể chia sẻ trực tiếp"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Danh sách ứng dụng"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Ứng dụng này chưa được cấp quyền ghi âm nhưng vẫn có thể ghi âm thông qua thiết bị USB này."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Màn hình chính"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Quay lại"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Ứng dụng gần đây"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Thông báo"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Cài đặt nhanh"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Hộp thoại thao tác với nguồn"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Bật/tắt chế độ chia đôi màn hình"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Khóa màn hình"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Chụp ảnh màn hình"</string>
</resources>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index e29898f..7da1a07 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"要允许“<xliff:g id="APP_NAME">%1$s</xliff:g>”获取此设备的位置信息吗?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"只有当您使用该应用时,该应用才有权访问位置信息"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"要<b>一律允许</b>允许<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>访问此设备的位置信息吗?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"目前只有当您使用该应用时,该应用才能访问位置信息"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"日历"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"访问您的日历"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"允许<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>访问您的日历吗?"</string>
@@ -1771,10 +1772,8 @@
<string name="package_updated_device_owner" msgid="1847154566357862089">"已由您的管理员更新"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"已由您的管理员删除"</string>
<string name="confirm_battery_saver" msgid="639106420541753635">"确定"</string>
- <!-- no translation found for battery_saver_description_with_learn_more (1002571337088673987) -->
- <skip />
- <!-- no translation found for battery_saver_description (2307555792915978653) -->
- <skip />
+ <string name="battery_saver_description_with_learn_more" msgid="1002571337088673987">"为了延长电池续航时间,省电模式会执行以下操作:\n开启深色主题\n关闭或限制后台活动、部分视觉效果和其他功能,例如“Ok Google”\n\n"<annotation id="url">"了解详情"</annotation></string>
+ <string name="battery_saver_description" msgid="2307555792915978653">"为了延长电池续航时间,省电模式会执行以下操作:\n开启深色主题\n关闭或限制后台活动、部分视觉效果和其他功能,例如“Ok Google”"</string>
<string name="data_saver_description" msgid="6015391409098303235">"为了减少流量消耗,流量节省程序会阻止某些应用在后台收发数据。您当前使用的应用可以收发数据,但频率可能会降低。举例而言,这可能意味着图片只有在您点按之后才会显示。"</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"要开启流量节省程序吗?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"开启"</string>
@@ -1965,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"点按即可查看屏蔽内容。"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"系统"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"设置"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"待机"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV 设备即将关闭;按一下相应的按钮即可让设备保持开启状态。"</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"设备即将关闭;按一下即可让设备保持开启状态。"</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"相机"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"麦克风"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"显示在屏幕上其他应用的上层"</string>
@@ -2008,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"无法使用直接分享功能"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"应用列表"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"此应用未获得录音权限,但能通过此 USB 设备录制音频。"</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"主屏幕"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"返回"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"最近用过的应用"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"通知"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"快捷设置"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"电源对话框"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"开启/关闭分屏"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"锁定屏幕"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"屏幕截图"</string>
</resources>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index 40f0c94..0640953 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<b></b>存取此裝置的位置資訊嗎?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"只有在您使用此應用程式時,應用程式才能存取位置資訊"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"要允許<b>「<xliff:g id="APP_NAME">%1$s</xliff:g>」</b><b>長期</b>存取此裝置的位置資訊嗎?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"只有在您使用此應用程式時,應用程式才能存取位置資訊"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"日曆"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"存取您的日曆"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<b></b>存取您的日曆嗎?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"輕按即可查看封鎖內容。"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"系統"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"設定"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"待機"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV 裝置即將關閉,按下按鈕即可保持開啟。"</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"裝置即將關閉,輕按即可保持開啟。"</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"相機"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"麥克風"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"顯示在畫面上的其他應用程式上層"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"無法直接分享"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"應用程式清單"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"此應用程式尚未獲授予錄音權限,但可透過此 USB 裝置記錄音訊。"</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"主頁"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"返回"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"最近使用的應用程式"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"通知"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"快速設定"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"電源對話框"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"切換分割螢幕"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"將畫面上鎖"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"螢幕截圖"</string>
</resources>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 2fb155e..0263426 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -286,7 +286,8 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」存取這個裝置的位置資訊嗎?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"該應用程式只有在你使用時,才能存取位置資訊"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"要<b>一律允許</b>「<xliff:g id="APP_NAME">%1$s</xliff:g>」存取這個裝置的位置資訊嗎?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"目前應用程式只有在你使用時,才能存取位置資訊"</string>
+ <!-- no translation found for permgroupbackgroundrequestdetail_location (6969122401786527350) -->
+ <skip />
<string name="permgrouplab_calendar" msgid="5863508437783683902">"日曆"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"存取你的日曆"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」存取你的日曆嗎?"</string>
@@ -1963,9 +1964,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"輕觸即可查看遭封鎖的項目。"</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"系統"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"設定"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"待機"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Android TV 裝置即將關閉。如要讓裝置保持開啟狀態,請按下任一按鈕。"</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"裝置即將關閉。輕觸螢幕或按下按鈕即可讓裝置保持開啟狀態。"</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"相機"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"麥克風"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"顯示在畫面上的其他應用程式上層"</string>
@@ -2006,22 +2004,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"無法使用直接分享功能"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"應用程式清單"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"這個應用程式未取得錄製內容的權限,但可以透過這部 USB 裝置錄製音訊。"</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"主螢幕"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"返回"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"最近使用的應用程式"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"通知"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"快速設定"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"開啟電源對話方塊"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"切換分割畫面模式"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"螢幕鎖定"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"擷取螢幕畫面"</string>
</resources>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 2ecc835..bc02215 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -286,7 +286,7 @@
<string name="permgrouprequest_location" msgid="3788275734953323491">"Vumela i-<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ukuthi ingene kundawo yale divayisi?"</string>
<string name="permgrouprequestdetail_location" msgid="1347189607421252902">"Uhlelo lokusebenza luzoba nokufinyelela kuphela kundawo ngenkathi usebenzisa uhlelo lokusebenza"</string>
<string name="permgroupbackgroundrequest_location" msgid="5039063878675613235">"Vumela i-<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ukuze ifinyelele indawo yale divayisi <b>ngaso sonke isikhathi</b>?"</string>
- <string name="permgroupbackgroundrequestdetail_location" msgid="4597006851453417387">"Uhlelo lokusebenza manje lungafinyelela kundawo kuphela ngenkathi usebenzisa uhlelo lokusebenza"</string>
+ <string name="permgroupbackgroundrequestdetail_location" msgid="6969122401786527350">"Lolu hlelo lokusebenza lungafuna ukufinyelela indawo yakho ngaso sonke isikhathi, ngisho noma ungasebenzisi uhlelo lokusebenza. Vumela kokuthi "<annotation id="link">"izilungiselelo"</annotation>"."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Ikhalenda"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"finyelela kukhalenda yakho"</string>
<string name="permgrouprequest_calendar" msgid="289900767793189421">"Vumela i-<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ukuthi ifinyelele kukhalenda yakho?"</string>
@@ -1963,9 +1963,6 @@
<string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Thepha ukuze uhlole ukuthi yini evinjelwe."</string>
<string name="notification_app_name_system" msgid="4205032194610042794">"Isistimu"</string>
<string name="notification_app_name_settings" msgid="7751445616365753381">"Izilungiselelo"</string>
- <string name="standby_warning_title" msgid="9221585425153642453">"Ilindile"</string>
- <string name="standby_warning_message" product="tv" msgid="6373301881876406323">"Idivayisi ye-Android TV maduze izovalwa, cindezela inkinobho ukuze uyigcine ivuliwe."</string>
- <string name="standby_warning_message" product="default" msgid="5222741828239073484">"Idivayisi maduze izovalwa, cindezela ukuze uyigcine ivuliwe."</string>
<string name="notification_appops_camera_active" msgid="5050283058419699771">"Ikhamera"</string>
<string name="notification_appops_microphone_active" msgid="4335305527588191730">"Imakrofoni"</string>
<string name="notification_appops_overlay_active" msgid="633813008357934729">"iboniswa ngaphezulu kwezinye izinhlelo zokusebenza kusikrini sakho"</string>
@@ -2006,22 +2003,13 @@
<string name="chooser_no_direct_share_targets" msgid="997970693708458895">"Ukwabelana okuqondile akutholakali"</string>
<string name="chooser_all_apps_button_label" msgid="3631524352936289457">"Uhlu lwezinhlelo zokusebenza"</string>
<string name="usb_device_resolve_prompt_warn" msgid="5701272284724577469">"Lolu hlelo lokusebenza alunikeziwe imvume yokurekhoda kodwa lungathwebula umsindo ngale divayisi ye-USB."</string>
- <!-- no translation found for accessibility_system_action_home_label (6089400419441597916) -->
- <skip />
- <!-- no translation found for accessibility_system_action_back_label (8986628898117178971) -->
- <skip />
- <!-- no translation found for accessibility_system_action_recents_label (7607601657790855723) -->
- <skip />
- <!-- no translation found for accessibility_system_action_notifications_label (1578681904050072545) -->
- <skip />
- <!-- no translation found for accessibility_system_action_quick_settings_label (3885565587471448947) -->
- <skip />
- <!-- no translation found for accessibility_system_action_power_dialog_label (2299530700682199873) -->
- <skip />
- <!-- no translation found for accessibility_system_action_toggle_split_screen_label (2853334443686935668) -->
- <skip />
- <!-- no translation found for accessibility_system_action_lock_screen_label (2377933717780192594) -->
- <skip />
- <!-- no translation found for accessibility_system_action_screenshot_label (1933564892301816480) -->
- <skip />
+ <string name="accessibility_system_action_home_label" msgid="6089400419441597916">"Ikhaya"</string>
+ <string name="accessibility_system_action_back_label" msgid="8986628898117178971">"Emuva"</string>
+ <string name="accessibility_system_action_recents_label" msgid="7607601657790855723">"Izinhlelo zokusebenza zakamuva"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="1578681904050072545">"Izaziso"</string>
+ <string name="accessibility_system_action_quick_settings_label" msgid="3885565587471448947">"Izilungiselelo ezisheshayo"</string>
+ <string name="accessibility_system_action_power_dialog_label" msgid="2299530700682199873">"Ibhokisi lamandla"</string>
+ <string name="accessibility_system_action_toggle_split_screen_label" msgid="2853334443686935668">"Guqula ukuhlukanisa isikrini"</string>
+ <string name="accessibility_system_action_lock_screen_label" msgid="2377933717780192594">"Khiya isikrini"</string>
+ <string name="accessibility_system_action_screenshot_label" msgid="1933564892301816480">"Isithombe-skrini"</string>
</resources>
diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml
index f058985..8f2d6c3 100644
--- a/core/res/res/values/arrays.xml
+++ b/core/res/res/values/arrays.xml
@@ -175,7 +175,13 @@
</array>
<!-- Used in ResolverTargetActionsDialogFragment -->
- <string-array name="resolver_target_actions">
+ <string-array name="resolver_target_actions_pin">
+ <item>@string/pin_target</item>
+ <item>@string/app_info</item>
+ </string-array>
+
+ <string-array name="resolver_target_actions_unpin">
+ <item>@string/unpin_target</item>
<item>@string/app_info</item>
</string-array>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 42e62d7..0b198a7 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -704,96 +704,57 @@
<string name="permgrouplab_contacts">Contacts</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgroupdesc_contacts">access your contacts</string>
- <!-- Message shown to the user when the apps requests permission from this group. If ever possible this should stay below 80 characters (assuming the parameters takes 20 characters). Don't abbreviate until the message reaches 120 characters though. [CHAR LIMIT=120] -->
- <string name="permgrouprequest_contacts">Allow
- <b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g></b> to access your contacts?</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_location">Location</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgroupdesc_location">access this device\'s location</string>
- <!-- Message shown to the user when the apps requests permission from this group. If ever possible this should stay below 80 characters (assuming the parameters takes 20 characters). Don't abbreviate until the message reaches 120 characters though. [CHAR LIMIT=120] -->
- <string name="permgrouprequest_location">Allow
- <b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g></b> to access this device\'s location?</string>
- <!-- Subtitle of the message shown to the user when the apps requests permission to use the location only while app is in foreground [CHAR LIMIT=150]-->
- <string name="permgrouprequestdetail_location">The app will only have access to the location while you\u2019re using the app</string>
- <!-- Message shown to the user when the apps requests permission to use the location while app is in foreground and background. If ever possible this should stay below 80 characters (assuming the parameters takes 20 characters). Don't abbreviate until the message reaches 120 characters though. [CHAR LIMIT=120] -->
- <string name="permgroupbackgroundrequest_location">Allow
- <b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g></b> to access this device\u2019s location <b>all the time</b>?</string>
- <!-- Subtitle of the message shown to the user when the apps requests permission to use the location while app is in foreground and background. Try to keep the link annotation at the end of the string [CHAR LIMIT=150] -->
- <string name="permgroupbackgroundrequestdetail_location">This app may want to access your location all the time, even when you\u2019re not using the app. Allow in <annotation id="link">settings</annotation>.</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_calendar">Calendar</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgroupdesc_calendar">access your calendar</string>
- <!-- Message shown to the user when the apps requests permission from this group. If ever possible this should stay below 80 characters (assuming the parameters takes 20 characters). Don't abbreviate until the message reaches 120 characters though. [CHAR LIMIT=120] -->
- <string name="permgrouprequest_calendar">Allow
- <b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g></b> to access your calendar?</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_sms">SMS</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgroupdesc_sms">send and view SMS messages</string>
- <!-- Message shown to the user when the apps requests permission from this group. If ever possible this should stay below 80 characters (assuming the parameters takes 20 characters). Don't abbreviate until the message reaches 120 characters though. [CHAR LIMIT=120] -->
- <string name="permgrouprequest_sms">Allow
- <b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g></b> to send and view SMS messages?</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_storage">Storage</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgroupdesc_storage">access photos, media, and files on your device</string>
- <!-- Message shown to the user when the apps requests permission from this group. If ever possible this should stay below 80 characters (assuming the parameters takes 20 characters). Don't abbreviate until the message reaches 120 characters though. [CHAR LIMIT=120] -->
- <string name="permgrouprequest_storage">Allow
- <b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g></b> to access photos, media, and files on your device?</string>
<!-- Title of a category of application permissioncds, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_microphone">Microphone</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgroupdesc_microphone">record audio</string>
- <!-- Message shown to the user when the apps requests permission from this group. If ever possible this should stay below 80 characters (assuming the parameters takes 20 characters). Don't abbreviate until the message reaches 120 characters though. [CHAR LIMIT=120] -->
- <string name="permgrouprequest_microphone">Allow
- <b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g></b> to record audio?</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=40]-->
<string name="permgrouplab_activityRecognition">Physical activity</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=40]-->
<string name="permgroupdesc_activityRecognition">access your physical activity</string>
- <!-- Message shown to the user when the apps requests permission from this group. If ever possible this should stay below 80 characters (assuming the parameters takes 20 characters). Don't abbreviate until the message reaches 120 characters though. [CHAR LIMIT=120] -->
- <string name="permgrouprequest_activityRecognition">Allow
- <b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g></b> to access your physical activity?</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_camera">Camera</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgroupdesc_camera">take pictures and record video</string>
- <!-- Message shown to the user when the apps requests permission from this group. If ever possible this should stay below 80 characters (assuming the parameters takes 20 characters). Don't abbreviate until the message reaches 120 characters though. [CHAR LIMIT=120] -->
- <string name="permgrouprequest_camera">Allow
- <b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g></b> to take pictures and record video?</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_calllog">Call logs</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgroupdesc_calllog">read and write phone call log</string>
- <!-- Message shown to the user when the apps requests permission from this group. If ever possible this should stay below 80 characters (assuming the parameters takes 20 characters). Don't abbreviate until the message reaches 120 characters though. [CHAR LIMIT=120] -->
- <string name="permgrouprequest_calllog">Allow
- <b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g></b> to access your phone call logs?</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_phone">Phone</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgroupdesc_phone">make and manage phone calls</string>
<!-- Message shown to the user when the apps requests permission from this group. If ever possible this should stay below 80 characters (assuming the parameters takes 20 characters). Don't abbreviate until the message reaches 120 characters though. [CHAR LIMIT=120] -->
- <string name="permgrouprequest_phone">Allow
- <b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g></b> to make and manage phone calls?</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_sensors">Body sensors</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgroupdesc_sensors">access sensor data about your vital signs</string>
- <!-- Message shown to the user when the apps requests permission from this group. If ever possible this should stay below 80 characters (assuming the parameters takes 20 characters). Don't abbreviate until the message reaches 120 characters though. [CHAR LIMIT=120] -->
- <string name="permgrouprequest_sensors">Allow
- <b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g></b> to access sensor data about your vital signs?</string>
<!-- Title for the capability of an accessibility service to retrieve window content. -->
<string name="capability_title_canRetrieveWindowContent">Retrieve window content</string>
@@ -3064,9 +3025,9 @@
<string name="ok">OK</string>
<!-- Preference framework strings. -->
<string name="cancel">Cancel</string>
- <!-- Preference framework strings. -->
+ <!-- Preference framework strings. {@deprecated Do not use. Incorrectly matches android.R.string.ok rather than "yes".} -->
<string name="yes">OK</string>
- <!-- Preference framework strings. -->
+ <!-- Preference framework strings. {@deprecated Do not use. Incorrectly matches android.R.string.cancel rather than "no".} -->
<string name="no">Cancel</string>
<!-- This is the generic "attention" string to be used in attention dialogs. Typically
combined with setIconAttribute(android.R.attr.alertDialogIcon)
@@ -5006,6 +4967,10 @@
<string name="usb_mtp_launch_notification_description">Tap to view files</string>
<!-- Resolver target actions strings -->
+ <!-- Pin this app to the top of the Sharesheet app list. [CHAR LIMIT=60]-->
+ <string name="pin_target">Pin</string>
+ <!-- Un-pin this app in the Sharesheet, so that it is sorted normally. [CHAR LIMIT=60]-->
+ <string name="unpin_target">Unpin</string>
<!-- View application info for a target. -->
<string name="app_info">App info</string>
@@ -5359,4 +5324,7 @@
<string name="accessibility_system_action_lock_screen_label">Lock Screen</string>
<!-- Label for taking screenshot action [CHAR LIMIT=NONE] -->
<string name="accessibility_system_action_screenshot_label">Screenshot</string>
+
+ <!-- Accessibility description of caption view -->
+ <string name="accessibility_freeform_caption"><xliff:g id="app_name">%1$s</xliff:g> app in Pop-up window.</string>
</resources>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index e56bbf6..69a4447 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -2941,7 +2941,8 @@
<java-symbol type="color" name="notification_material_background_color" />
<!-- Resolver target actions -->
- <java-symbol type="array" name="resolver_target_actions" />
+ <java-symbol type="array" name="resolver_target_actions_pin" />
+ <java-symbol type="array" name="resolver_target_actions_unpin" />
<java-symbol type="array" name="non_removable_euicc_slots" />
@@ -3763,4 +3764,6 @@
<java-symbol type="string" name="accessibility_system_action_recents_label" />
<java-symbol type="string" name="accessibility_system_action_screenshot_label" />
<java-symbol type="string" name="accessibility_system_action_toggle_split_screen_label" />
+
+ <java-symbol type="string" name="accessibility_freeform_caption" />
</resources>
diff --git a/core/tests/coretests/src/android/hardware/display/BrightnessConfigurationTest.java b/core/tests/coretests/src/android/hardware/display/BrightnessConfigurationTest.java
index 823fca5..85aa118 100644
--- a/core/tests/coretests/src/android/hardware/display/BrightnessConfigurationTest.java
+++ b/core/tests/coretests/src/android/hardware/display/BrightnessConfigurationTest.java
@@ -23,13 +23,23 @@
import android.os.Parcel;
import android.util.Pair;
+import android.util.Xml;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
+import com.android.internal.util.FastXmlSerializer;
+
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
import java.util.Arrays;
@SmallTest
@@ -104,11 +114,15 @@
});
}
-
@Test
public void testParceledConfigIsEquivalent() {
BrightnessConfiguration.Builder builder =
new BrightnessConfiguration.Builder(LUX_LEVELS, NITS_LEVELS);
+ builder.setShouldCollectColorSamples(true);
+ builder.addCorrectionByCategory(3,
+ BrightnessCorrection.createScaleAndTranslateLog(1.0f, 2.0f));
+ builder.addCorrectionByPackageName("a.package.name",
+ BrightnessCorrection.createScaleAndTranslateLog(1.0f, 2.0f));
BrightnessConfiguration config = builder.build();
Parcel p = Parcel.obtain();
p.writeParcelable(config, 0 /*flags*/);
@@ -119,12 +133,49 @@
}
@Test
+ public void testWriteReadXml() throws IOException, XmlPullParserException {
+ BrightnessConfiguration.Builder builder =
+ new BrightnessConfiguration.Builder(LUX_LEVELS, NITS_LEVELS);
+ builder.setShouldCollectColorSamples(true);
+ builder.addCorrectionByCategory(3,
+ BrightnessCorrection.createScaleAndTranslateLog(1.0f, 2.0f));
+ builder.addCorrectionByPackageName("a.package.name",
+ BrightnessCorrection.createScaleAndTranslateLog(1.0f, 2.0f));
+ BrightnessConfiguration config = builder.build();
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ XmlSerializer out = new FastXmlSerializer();
+ out.setOutput(baos, StandardCharsets.UTF_8.name());
+ out.startDocument(null, true);
+ config.saveToXml(out);
+ out.endDocument();
+ baos.flush();
+
+ ByteArrayInputStream input = new ByteArrayInputStream(baos.toByteArray());
+ XmlPullParser parser = Xml.newPullParser();
+ parser.setInput(input, StandardCharsets.UTF_8.name());
+ BrightnessConfiguration loadedConfig = BrightnessConfiguration.loadFromXml(parser);
+
+ assertEquals(config, loadedConfig);
+ }
+
+ @Test
public void testEquals() {
BrightnessConfiguration.Builder builder =
new BrightnessConfiguration.Builder(LUX_LEVELS, NITS_LEVELS);
+ builder.setShouldCollectColorSamples(true);
+ builder.addCorrectionByCategory(3,
+ BrightnessCorrection.createScaleAndTranslateLog(1.0f, 2.0f));
+ builder.addCorrectionByPackageName("a.package.name",
+ BrightnessCorrection.createScaleAndTranslateLog(1.0f, 2.0f));
BrightnessConfiguration baseConfig = builder.build();
builder = new BrightnessConfiguration.Builder(LUX_LEVELS, NITS_LEVELS);
+ builder.setShouldCollectColorSamples(true);
+ builder.addCorrectionByCategory(3,
+ BrightnessCorrection.createScaleAndTranslateLog(1.0f, 2.0f));
+ builder.addCorrectionByPackageName("a.package.name",
+ BrightnessCorrection.createScaleAndTranslateLog(1.0f, 2.0f));
BrightnessConfiguration identicalConfig = builder.build();
assertEquals(baseConfig, identicalConfig);
assertEquals("hashCodes must be equal for identical configs",
@@ -133,14 +184,37 @@
float[] lux = Arrays.copyOf(LUX_LEVELS, LUX_LEVELS.length);
lux[lux.length - 1] = lux[lux.length - 1] * 2;
builder = new BrightnessConfiguration.Builder(lux, NITS_LEVELS);
+ builder.setShouldCollectColorSamples(true);
+ builder.addCorrectionByCategory(3,
+ BrightnessCorrection.createScaleAndTranslateLog(1.0f, 2.0f));
+ builder.addCorrectionByPackageName("a.package.name",
+ BrightnessCorrection.createScaleAndTranslateLog(1.0f, 2.0f));
BrightnessConfiguration luxDifferConfig = builder.build();
assertNotEquals(baseConfig, luxDifferConfig);
float[] nits = Arrays.copyOf(NITS_LEVELS, NITS_LEVELS.length);
nits[nits.length - 1] = nits[nits.length - 1] * 2;
builder = new BrightnessConfiguration.Builder(LUX_LEVELS, nits);
+ builder.setShouldCollectColorSamples(true);
+ builder.addCorrectionByCategory(3,
+ BrightnessCorrection.createScaleAndTranslateLog(1.0f, 2.0f));
+ builder.addCorrectionByPackageName("a.package.name",
+ BrightnessCorrection.createScaleAndTranslateLog(1.0f, 2.0f));
BrightnessConfiguration nitsDifferConfig = builder.build();
assertNotEquals(baseConfig, nitsDifferConfig);
+
+ builder = new BrightnessConfiguration.Builder(LUX_LEVELS, NITS_LEVELS);
+ builder.addCorrectionByCategory(3,
+ BrightnessCorrection.createScaleAndTranslateLog(1.0f, 2.0f));
+ builder.addCorrectionByPackageName("a.package.name",
+ BrightnessCorrection.createScaleAndTranslateLog(1.0f, 2.0f));
+ BrightnessConfiguration colorCollectionDiffers = builder.build();
+ assertNotEquals(baseConfig, colorCollectionDiffers);
+
+ builder = new BrightnessConfiguration.Builder(LUX_LEVELS, NITS_LEVELS);
+ builder.setShouldCollectColorSamples(true);
+ BrightnessConfiguration correctionsDiffer = builder.build();
+ assertNotEquals(baseConfig, correctionsDiffer);
}
private static void assertArrayEquals(float[] expected, float[] actual, String name) {
diff --git a/core/tests/coretests/src/com/android/internal/app/AbstractResolverComparatorTest.java b/core/tests/coretests/src/com/android/internal/app/AbstractResolverComparatorTest.java
new file mode 100644
index 0000000..36dd3e4
--- /dev/null
+++ b/core/tests/coretests/src/com/android/internal/app/AbstractResolverComparatorTest.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2019 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.internal.app;
+
+import static junit.framework.Assert.assertEquals;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ResolveInfo;
+import android.os.Message;
+
+import androidx.test.InstrumentationRegistry;
+
+import org.junit.Test;
+
+import java.util.List;
+
+public class AbstractResolverComparatorTest {
+
+ @Test
+ public void testPinned() {
+ ResolverActivity.ResolvedComponentInfo r1 = new ResolverActivity.ResolvedComponentInfo(
+ new ComponentName("package", "class"), new Intent(), new ResolveInfo()
+ );
+ r1.setPinned(true);
+
+ ResolverActivity.ResolvedComponentInfo r2 = new ResolverActivity.ResolvedComponentInfo(
+ new ComponentName("zackage", "zlass"), new Intent(), new ResolveInfo()
+ );
+
+ Context context = InstrumentationRegistry.getTargetContext();
+ AbstractResolverComparator comparator = getTestComparator(context);
+
+ assertEquals("Pinned ranks over unpinned", -1, comparator.compare(r1, r2));
+ assertEquals("Unpinned ranks under pinned", 1, comparator.compare(r2, r1));
+ }
+
+
+ @Test
+ public void testBothPinned() {
+ ResolveInfo pmInfo1 = new ResolveInfo();
+ pmInfo1.activityInfo = new ActivityInfo();
+ pmInfo1.activityInfo.packageName = "aaa";
+
+ ResolverActivity.ResolvedComponentInfo r1 = new ResolverActivity.ResolvedComponentInfo(
+ new ComponentName("package", "class"), new Intent(), pmInfo1);
+ r1.setPinned(true);
+
+ ResolveInfo pmInfo2 = new ResolveInfo();
+ pmInfo2.activityInfo = new ActivityInfo();
+ pmInfo2.activityInfo.packageName = "zzz";
+ ResolverActivity.ResolvedComponentInfo r2 = new ResolverActivity.ResolvedComponentInfo(
+ new ComponentName("zackage", "zlass"), new Intent(), pmInfo2);
+ r2.setPinned(true);
+
+ Context context = InstrumentationRegistry.getTargetContext();
+ AbstractResolverComparator comparator = getTestComparator(context);
+
+ assertEquals("Both pinned should rank alphabetically", -1, comparator.compare(r1, r2));
+ }
+
+ private AbstractResolverComparator getTestComparator(Context context) {
+ Intent intent = new Intent();
+
+ AbstractResolverComparator testComparator =
+ new AbstractResolverComparator(context, intent) {
+
+ @Override
+ int compare(ResolveInfo lhs, ResolveInfo rhs) {
+ // Used for testing pinning, so we should never get here --- the overrides should
+ // determine the result instead.
+ return 1;
+ }
+
+ @Override
+ void doCompute(List<ResolverActivity.ResolvedComponentInfo> targets) {}
+
+ @Override
+ float getScore(ComponentName name) {
+ return 0;
+ }
+
+ @Override
+ void handleResultMessage(Message message) {}
+ };
+ return testComparator;
+ }
+
+}
diff --git a/core/tests/screenshothelpertests/src/com/android/internal/util/ScreenshotHelperTest.java b/core/tests/screenshothelpertests/src/com/android/internal/util/ScreenshotHelperTest.java
index 8483645..e16d1ca 100644
--- a/core/tests/screenshothelpertests/src/com/android/internal/util/ScreenshotHelperTest.java
+++ b/core/tests/screenshothelpertests/src/com/android/internal/util/ScreenshotHelperTest.java
@@ -19,7 +19,7 @@
import static android.view.WindowManager.TAKE_SCREENSHOT_FULLSCREEN;
import static android.view.WindowManager.TAKE_SCREENSHOT_SELECTED_REGION;
-import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
@@ -80,8 +80,8 @@
CountDownLatch lock = new CountDownLatch(1);
mScreenshotHelper.takeScreenshot(TAKE_SCREENSHOT_FULLSCREEN, false, false, timeoutMs,
mHandler,
- worked -> {
- assertFalse(worked);
+ uri -> {
+ assertNull(uri);
lock.countDown();
});
diff --git a/framework_jarjar_rules.txt b/framework_jarjar_rules.txt
new file mode 100644
index 0000000..77b9ee6
--- /dev/null
+++ b/framework_jarjar_rules.txt
@@ -0,0 +1,2 @@
+rule android.hidl.** android.internal.hidl.@1
+rule com.google.android.exoplayer2.** android.media.internal.exo.@1
diff --git a/jarjar_rules_hidl.txt b/jarjar_rules_hidl.txt
deleted file mode 100644
index 4b2331d..0000000
--- a/jarjar_rules_hidl.txt
+++ /dev/null
@@ -1 +0,0 @@
-rule android.hidl.** android.internal.hidl.@1
diff --git a/media/Android.bp b/media/Android.bp
index 2f75e44..022fa9b 100644
--- a/media/Android.bp
+++ b/media/Android.bp
@@ -34,6 +34,11 @@
"android_system_stubs_current",
],
+ static_libs: [
+ "exoplayer2-core"
+ ],
+ jarjar_rules: "jarjar_rules.txt",
+
plugins: ["java_api_finder"],
}
@@ -41,6 +46,7 @@
name: "updatable-media-srcs",
srcs: [
":mediasession2-srcs",
+ ":mediaparser-srcs",
],
}
@@ -63,6 +69,13 @@
path: "apex/java",
}
+filegroup {
+ name: "mediaparser-srcs",
+ srcs: [
+ "apex/java/android/media/MediaParser.java"
+ ]
+}
+
metalava_updatable_media_args = " --error UnhiddenSystemApi " +
"--hide RequiresPermission " +
"--hide MissingPermission --hide BroadcastBehavior " +
diff --git a/media/apex/java/android/media/MediaParser.java b/media/apex/java/android/media/MediaParser.java
new file mode 100644
index 0000000..c06e283
--- /dev/null
+++ b/media/apex/java/android/media/MediaParser.java
@@ -0,0 +1,391 @@
+/*
+ * Copyright (C) 2019 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.media;
+
+import android.util.Pair;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * Parses media container formats and extracts contained media samples and metadata.
+ *
+ * <p>This class provides access to a battery of low-level media container parsers. Each instance of
+ * this class is associated to a specific media parser implementation which is suitable for
+ * extraction from a specific media container format. The media parser implementation assignment
+ * depends on the factory method (see {@link #create} and {@link #createByName}) used to create the
+ * instance.
+ *
+ * <p>Users must implement the following to use this class.
+ *
+ * <ul>
+ * <li>{@link Input}: Provides the media containers bytes to parse.
+ * <li>{@link OutputCallback}: Provides a sink for all extracted data and metadata.
+ * </ul>
+ *
+ * TODO: Add usage example here.
+ */
+// @HiddenApi
+public final class MediaParser {
+
+ /** Maps seek positions to corresponding positions in the stream. */
+ public interface SeekMap {
+
+ /** Returned by {@link #getDurationUs()} when the duration is unknown. */
+ int UNKNOWN_DURATION = Integer.MIN_VALUE;
+
+ /** Returns whether seeking is supported. */
+ boolean isSeekable();
+
+ /**
+ * Returns the duration of the stream in microseconds or {@link #UNKNOWN_DURATION} if the
+ * duration is unknown.
+ */
+ long getDurationUs();
+
+ /**
+ * Obtains {@link SeekPoint SeekPoints} for the specified seek time in microseconds.
+ *
+ * <p>{@code getSeekPoints(timeUs).first} contains the latest seek point for samples with
+ * timestamp equal to or smaller than {@code timeUs}.
+ *
+ * <p>{@code getSeekPoints(timeUs).second} contains the earlies seek point for samples with
+ * timestamp equal to or greater than {@code timeUs}. If a seek point exists for {@code
+ * timeUs}, the returned pair will contain the same {@link SeekPoint} twice.
+ *
+ * @param timeUs A seek time in microseconds.
+ * @return The corresponding {@link SeekPoint SeekPoints}.
+ */
+ Pair<SeekPoint, SeekPoint> getSeekPoints(long timeUs);
+ }
+
+ /** Defines a seek point in a media stream. */
+ public static final class SeekPoint {
+
+ /** A {@link SeekPoint} whose time and byte offset are both set to 0. */
+ public static final SeekPoint START = new SeekPoint(0, 0);
+
+ /** The time of the seek point, in microseconds. */
+ public final long mTimeUs;
+
+ /** The byte offset of the seek point. */
+ public final long mPosition;
+
+ /**
+ * @param timeUs The time of the seek point, in microseconds.
+ * @param position The byte offset of the seek point.
+ */
+ public SeekPoint(long timeUs, long position) {
+ this.mTimeUs = timeUs;
+ this.mPosition = position;
+ }
+
+ @Override
+ public String toString() {
+ return "[timeUs=" + mTimeUs + ", position=" + mPosition + "]";
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null || getClass() != obj.getClass()) {
+ return false;
+ }
+ SeekPoint other = (SeekPoint) obj;
+ return mTimeUs == other.mTimeUs && mPosition == other.mPosition;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = (int) mTimeUs;
+ result = 31 * result + (int) mPosition;
+ return result;
+ }
+ }
+
+ /** Provides input data to {@link MediaParser}. */
+ public interface Input {
+
+ /**
+ * Reads up to {@code readLength} bytes of data and stores them into {@code buffer},
+ * starting at index {@code offset}.
+ *
+ * <p>The call will block until at least one byte of data has been read.
+ *
+ * @param buffer The buffer into which the read data should be stored.
+ * @param offset The start offset into {@code buffer} at which data should be written.
+ * @param readLength The maximum number of bytes to read.
+ * @return The non-zero number of bytes read, or -1 if no data is available because the end
+ * of the input has been reached.
+ * @throws java.io.IOException If an error occurs reading from the source.
+ */
+ int read(byte[] buffer, int offset, int readLength)
+ throws IOException, InterruptedException;
+
+ /** Returns the current read position (byte offset) in the stream. */
+ long getPosition();
+
+ /** Returns the length of the input in bytes, or -1 if the length is unknown. */
+ long getLength();
+ }
+
+ /** Receives extracted media sample data and metadata from {@link MediaParser}. */
+ public interface OutputCallback {
+
+ /**
+ * Called when the number of tracks is defined.
+ *
+ * @param numberOfTracks The number of tracks in the stream.
+ */
+ void onTracksFound(int numberOfTracks);
+
+ /**
+ * Called when a {@link SeekMap} has been extracted from the stream.
+ *
+ * @param seekMap The extracted {@link SeekMap}.
+ */
+ void onSeekMap(SeekMap seekMap);
+
+ /**
+ * Called when the {@link MediaFormat} of the track is extracted from the stream.
+ *
+ * @param trackIndex The index of the track for which the {@link MediaFormat} was found.
+ * @param format The extracted {@link MediaFormat}.
+ */
+ void onFormat(int trackIndex, MediaFormat format);
+
+ /**
+ * Called to write sample data to the output.
+ *
+ * <p>Implementers must attempt to consume the entirety of the input, but should surface any
+ * thrown {@link IOException} caused by reading from {@code input}.
+ *
+ * @param trackIndex The index of the track to which the sample data corresponds.
+ * @param input The {@link Input} from which to read the data.
+ * @return
+ */
+ int onSampleData(int trackIndex, Input input) throws IOException, InterruptedException;
+
+ /**
+ * Defines the boundaries and metadata of an extracted sample.
+ *
+ * <p>The corresponding sample data will have already been passed to the output via calls to
+ * {@link #onSampleData}.
+ *
+ * @param trackIndex The index of the track to which the sample corresponds.
+ * @param timeUs The media timestamp associated with the sample, in microseconds.
+ * @param flags Flags associated with the sample. See {@link MediaCodec
+ * MediaCodec.BUFFER_FLAG_*}.
+ * @param size The size of the sample data, in bytes.
+ * @param offset The number of bytes that have been passed to {@link #onSampleData} since
+ * the last byte belonging to the sample whose metadata is being passed.
+ * @param cryptoData Encryption data required to decrypt the sample. May be null for
+ * unencrypted samples.
+ */
+ void onSampleCompleted(
+ int trackIndex,
+ long timeUs,
+ int flags,
+ int size,
+ int offset,
+ MediaCodec.CryptoInfo cryptoData);
+ }
+
+ /**
+ * Controls the behavior of extractors' implementations.
+ *
+ * <p>DESIGN NOTE: For setting flags like workarounds and special behaviors for adaptive
+ * streaming.
+ */
+ public static final class Parameters {
+
+ // TODO: Implement.
+
+ }
+
+ /** Holds the result of an {@link #advance} invocation. */
+ public static final class ResultHolder {
+
+ /** Creates a new instance with {@link #result} holding {@link #ADVANCE_RESULT_CONTINUE}. */
+ public ResultHolder() {
+ result = ADVANCE_RESULT_CONTINUE;
+ }
+
+ /**
+ * May hold {@link #ADVANCE_RESULT_END_OF_INPUT}, {@link #ADVANCE_RESULT_CONTINUE}, {@link
+ * #ADVANCE_RESULT_SEEK}.
+ */
+ public int result;
+
+ /**
+ * If {@link #result} holds {@link #ADVANCE_RESULT_SEEK}, holds the stream position required
+ * from the passed {@link Input} to the next {@link #advance} call. If {@link #result} does
+ * not hold {@link #ADVANCE_RESULT_SEEK}, the value of this variable is undefined and should
+ * be ignored.
+ */
+ public long seekPosition;
+ }
+
+ /**
+ * Thrown if all extractors implementations provided to {@link #create} failed to sniff the
+ * input content.
+ */
+ // @HiddenApi
+ public static final class UnrecognizedInputFormatException extends IOException {
+
+ /**
+ * Creates a new instance which signals that the extractors with the given names failed to
+ * parse the input.
+ */
+ public static UnrecognizedInputFormatException createForExtractors(
+ String... extractorNames) {
+ StringBuilder builder = new StringBuilder();
+ builder.append("None of the available extractors ( ");
+ builder.append(extractorNames[0]);
+ for (int i = 1; i < extractorNames.length; i++) {
+ builder.append(", ");
+ builder.append(extractorNames[i]);
+ }
+ builder.append(") could read the stream.");
+ return new UnrecognizedInputFormatException(builder.toString());
+ }
+
+ private UnrecognizedInputFormatException(String extractorNames) {
+ super(extractorNames);
+ }
+ }
+
+ // Public constants.
+
+ /**
+ * Returned by {@link #advance} if the {@link Input} passed to the next {@link #advance} is
+ * required to provide data continuing from the position in the stream reached by the returning
+ * call.
+ */
+ public static final int ADVANCE_RESULT_CONTINUE = -1;
+ /** Returned by {@link #advance} if the end of the {@link Input} was reached. */
+ public static final int ADVANCE_RESULT_END_OF_INPUT = -2;
+ /**
+ * Returned by {@link #advance} when its next call expects a specific stream position, which
+ * will be held by {@link ResultHolder#seekPosition}.
+ */
+ public static final int ADVANCE_RESULT_SEEK = -3;
+
+ // Instance creation methods.
+
+ /**
+ * Creates an instance backed by the extractor with the given {@code name}. The returned
+ * instance will attempt extraction without sniffing the content.
+ *
+ * @param name The name of the extractor that will be associated with the created instance.
+ * @param outputCallback The {@link OutputCallback} to which track data and samples are pushed.
+ * @param parameters Parameters that control specific aspects of the behavior of the extractors.
+ * @return A new instance.
+ */
+ public static MediaParser createByName(
+ String name, OutputCallback outputCallback, Parameters parameters) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Creates an instance whose backing extractor will be selected by sniffing the content during
+ * the first {@link #advance} call. Extractor implementations will sniff the content in order of
+ * appearance in {@code extractorNames}.
+ *
+ * @param outputCallback The {@link OutputCallback} to track data and samples are obtained.
+ * @param parameters Parameters that control specific aspects of the behavior of the extractors.
+ * @param extractorNames The names of the extractors to sniff the content with. If empty, a
+ * default array of names is used.
+ * @return A new instance.
+ */
+ public static MediaParser create(
+ OutputCallback outputCallback, Parameters parameters, String... extractorNames) {
+ throw new UnsupportedOperationException();
+ }
+
+ // Misc static methods.
+
+ /**
+ * Returns an immutable list with the names of the extractors that are suitable for container
+ * formats with the given {@code mimeTypes}. If an empty string is passed, all available
+ * extractors' names are returned.
+ *
+ * <p>TODO: Replace string with media type object.
+ */
+ public static List<String> getExtractorNames(String mimeTypes) {
+ throw new UnsupportedOperationException();
+ }
+
+ // Public methods.
+
+ /**
+ * Returns the name of the backing extractor implementation.
+ *
+ * <p>If this instance was creating using {@link #createByName}, the provided name is returned.
+ * If this instance was created using {@link #create}, this method will return null until the
+ * first call to {@link #advance}, after which the name of the backing extractor implementation
+ * is returned.
+ *
+ * @return The name of the backing extractor implementation, or null if the backing extractor
+ * implementation has not yet been selected.
+ */
+ public String getExtractorName() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Makes progress in the extraction of the input media stream, unless the end of the input has
+ * been reached.
+ *
+ * <p>This method will block until some progress has been made.
+ *
+ * <p>If this instance was created using {@link #create}. the first call to this method will
+ * sniff the content with the extractors with the provided names.
+ *
+ * @param input The {@link Input} from which to obtain the media container data.
+ * @param resultHolder The {@link ResultHolder} into which the result of the operation will be
+ * written.
+ * @throws UnrecognizedInputFormatException
+ */
+ public void advance(Input input, ResultHolder resultHolder)
+ throws IOException, InterruptedException {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Seeks within the media container being extracted.
+ *
+ * <p>Following a call to this method, the {@link Input} passed to the next invocation of {@link
+ * #advance} must provide data starting from {@link SeekPoint#mPosition} in the stream.
+ *
+ * @param seekPoint The {@link SeekPoint} to seek to.
+ */
+ public void seek(SeekPoint seekPoint) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Releases any acquired resources.
+ *
+ * <p>After calling this method, this instance becomes unusable and no other methods should be
+ * invoked. DESIGN NOTE: Should be removed. There shouldn't be any resource for releasing.
+ */
+ public void release() {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/media/jarjar_rules.txt b/media/jarjar_rules.txt
new file mode 100644
index 0000000..d89d9d3
--- /dev/null
+++ b/media/jarjar_rules.txt
@@ -0,0 +1 @@
+rule com.google.android.exoplayer2.** android.media.internal.exo.@1
diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java
index 5ac6f7f..ce4aac9 100644
--- a/media/java/android/media/ExifInterface.java
+++ b/media/java/android/media/ExifInterface.java
@@ -1443,7 +1443,9 @@
private ByteOrder mExifByteOrder = ByteOrder.BIG_ENDIAN;
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
private boolean mHasThumbnail;
- // The following values used for indicating a thumbnail position.
+ private boolean mHasThumbnailStrips;
+ private boolean mAreThumbnailStripsConsecutive;
+ // Used to indicate the position of the thumbnail (includes offset to EXIF data segment).
private int mThumbnailOffset;
private int mThumbnailLength;
private byte[] mThumbnailBytes;
@@ -1574,7 +1576,8 @@
mFilename = null;
if (shouldBeExifDataOnly) {
- if (!isExifDataOnly(inputStream)) {
+ inputStream = new BufferedInputStream(inputStream, SIGNATURE_CHECK_SIZE);
+ if (!isExifDataOnly((BufferedInputStream) inputStream)) {
Log.w(TAG, "Given data does not follow the structure of an Exif-only data.");
return;
}
@@ -2262,10 +2265,12 @@
/**
* Returns the offset and length of thumbnail inside the image file, or
- * {@code null} if there is no thumbnail.
+ * {@code null} if either there is no thumbnail or the thumbnail bytes are stored
+ * non-consecutively.
*
* @return two-element array, the offset in the first value, and length in
- * the second, or {@code null} if no thumbnail was found.
+ * the second, or {@code null} if no thumbnail was found or the thumbnail strips are
+ * not placed consecutively.
* @throws IllegalStateException if {@link #saveAttributes()} has been
* called since the underlying file was initially parsed, since
* that means offsets may have changed.
@@ -2277,13 +2282,12 @@
}
if (mHasThumbnail) {
- if (mIsExifDataOnly) {
- return new long[] { mThumbnailOffset + mExifOffset, mThumbnailLength };
+ if (mHasThumbnailStrips && !mAreThumbnailStripsConsecutive) {
+ return null;
}
return new long[] { mThumbnailOffset, mThumbnailLength };
- } else {
- return null;
}
+ return null;
}
/**
@@ -2741,20 +2745,17 @@
return true;
}
- private static boolean isExifDataOnly(InputStream inputStream) {
- try {
- byte[] signatureCheckBytes = new byte[IDENTIFIER_EXIF_APP1.length];
- inputStream.read(signatureCheckBytes);
- if (Arrays.equals(signatureCheckBytes, IDENTIFIER_EXIF_APP1)) {
- return true;
- }
- } catch (IOException e) {
- if (DEBUG) {
- Log.w(TAG,
- "Encountered error while checking whether input stream is Exif data only");
+ private static boolean isExifDataOnly(BufferedInputStream in) throws IOException {
+ in.mark(IDENTIFIER_EXIF_APP1.length);
+ byte[] signatureCheckBytes = new byte[IDENTIFIER_EXIF_APP1.length];
+ in.read(signatureCheckBytes);
+ in.reset();
+ for (int i = 0; i < IDENTIFIER_EXIF_APP1.length; i++) {
+ if (signatureCheckBytes[i] != IDENTIFIER_EXIF_APP1[i]) {
+ return false;
}
}
- return false;
+ return true;
}
/**
@@ -2828,10 +2829,9 @@
final long offset = start + IDENTIFIER_EXIF_APP1.length;
final byte[] value = Arrays.copyOfRange(bytes,
IDENTIFIER_EXIF_APP1.length, bytes.length);
- readExifSegment(value, imageType);
-
// Save offset values for handleThumbnailFromJfif() function
mExifOffset = (int) offset;
+ readExifSegment(value, imageType);
} else if (ArrayUtils.startsWith(bytes, IDENTIFIER_XMP_APP1)) {
// See XMP Specification Part 3: Storage in Files, 1.1.3 JPEG, Table 6
final long offset = start + IDENTIFIER_XMP_APP1.length;
@@ -3136,6 +3136,8 @@
if (in.read(bytes) != length) {
throw new IOException("Can't read exif");
}
+ // Save offset values for handling thumbnail and attribute offsets.
+ mExifOffset = offset;
readExifSegment(bytes, IFD_TYPE_PRIMARY);
}
@@ -3148,13 +3150,13 @@
}
private void getStandaloneAttributes(ByteOrderedDataInputStream in) throws IOException {
+ in.skipBytes(IDENTIFIER_EXIF_APP1.length);
// TODO: Need to handle potential OutOfMemoryError
byte[] data = new byte[in.available()];
in.readFully(data);
- readExifSegment(data, IFD_TYPE_PRIMARY);
-
- // Save offset values for handleThumbnailFromJfif() function
+ // Save offset values for handling thumbnail and attribute offsets.
mExifOffset = IDENTIFIER_EXIF_APP1.length;
+ readExifSegment(data, IFD_TYPE_PRIMARY);
}
/**
@@ -3335,13 +3337,11 @@
+ "\n recorded CRC value: " + dataCrcValue + ", calculated CRC "
+ "value: " + crc.getValue());
}
-
+ // Save offset values for handleThumbnailFromJfif() function
+ mExifOffset = bytesRead;
readExifSegment(data, IFD_TYPE_PRIMARY);
validateImages();
-
- // Save offset values for handleThumbnailFromJfif() function
- mExifOffset = bytesRead;
break;
} else {
// Skip to next chunk
@@ -3396,6 +3396,8 @@
throw new IOException("Failed to read given length for given PNG chunk "
+ "type: " + byteArrayToHexString(code));
}
+ // Save offset values for handling thumbnail and attribute offsets.
+ mExifOffset = bytesRead;
readExifSegment(payload, IFD_TYPE_PRIMARY);
break;
} else {
@@ -3416,8 +3418,6 @@
bytesRead += skipped;
}
}
- // Save offset values for handleThumbnailFromJfif() function
- mExifOffset = bytesRead;
} catch (EOFException e) {
// Should not reach here. Will only reach here if the file is corrupted or
// does not follow the WebP specifications
@@ -3448,7 +3448,7 @@
// Write EXIF APP1 segment
dataOutputStream.writeByte(MARKER);
dataOutputStream.writeByte(MARKER_APP1);
- writeExifSegment(dataOutputStream, 6);
+ writeExifSegment(dataOutputStream);
byte[] bytes = new byte[4096];
@@ -3565,7 +3565,7 @@
new ByteOrderedDataOutputStream(exifByteArrayOutputStream,
ByteOrder.BIG_ENDIAN);
// Store Exif data in separate byte array
- writeExifSegment(exifDataOutputStream, 0);
+ writeExifSegment(exifDataOutputStream);
byte[] exifBytes =
((ByteArrayOutputStream) exifDataOutputStream.mOutputStream).toByteArray();
// Write EXIF chunk data
@@ -3835,7 +3835,7 @@
continue;
}
- final int bytesOffset = dataInputStream.peek();
+ final int bytesOffset = dataInputStream.peek() + mExifOffset;
final byte[] bytes = new byte[(int) byteCount];
dataInputStream.readFully(bytes);
ExifAttribute attribute = new ExifAttribute(dataFormat, numberOfComponents,
@@ -3965,29 +3965,17 @@
int thumbnailOffset = jpegInterchangeFormatAttribute.getIntValue(mExifByteOrder);
int thumbnailLength = jpegInterchangeFormatLengthAttribute.getIntValue(mExifByteOrder);
- switch (mMimeType) {
- case IMAGE_TYPE_JPEG:
- case IMAGE_TYPE_RAF:
- case IMAGE_TYPE_RW2:
- case IMAGE_TYPE_PNG:
- case IMAGE_TYPE_WEBP:
- thumbnailOffset += mExifOffset;
- break;
- case IMAGE_TYPE_ORF:
- // Update offset value since RAF files have IFD data preceding MakerNote data.
- thumbnailOffset += mOrfMakerNoteOffset;
- break;
+ if (mMimeType == IMAGE_TYPE_ORF) {
+ // Update offset value since RAF files have IFD data preceding MakerNote data.
+ thumbnailOffset += mOrfMakerNoteOffset;
}
// The following code limits the size of thumbnail size not to overflow EXIF data area.
thumbnailLength = Math.min(thumbnailLength, in.getLength() - thumbnailOffset);
- if (DEBUG) {
- Log.d(TAG, "Setting thumbnail attributes with offset: " + thumbnailOffset
- + ", length: " + thumbnailLength);
- }
if (thumbnailOffset > 0 && thumbnailLength > 0) {
mHasThumbnail = true;
- mThumbnailOffset = thumbnailOffset;
+ // Need to add mExifOffset, which is the offset to the EXIF data segment
+ mThumbnailOffset = thumbnailOffset + mExifOffset;
mThumbnailLength = thumbnailLength;
mThumbnailCompression = DATA_JPEG;
@@ -3995,12 +3983,16 @@
&& mSeekableFileDescriptor == null) {
// TODO: Need to handle potential OutOfMemoryError
// Save the thumbnail in memory if the input doesn't support reading again.
- byte[] thumbnailBytes = new byte[thumbnailLength];
- in.seek(thumbnailOffset);
+ byte[] thumbnailBytes = new byte[mThumbnailLength];
+ in.seek(mThumbnailOffset);
in.readFully(thumbnailBytes);
mThumbnailBytes = thumbnailBytes;
}
}
+ if (DEBUG) {
+ Log.d(TAG, "Setting thumbnail attributes with offset: " + thumbnailOffset
+ + ", length: " + thumbnailLength);
+ }
}
}
@@ -4018,12 +4010,16 @@
long[] stripByteCounts =
convertToLongArray(stripByteCountsAttribute.getValue(mExifByteOrder));
- if (stripOffsets == null) {
- Log.w(TAG, "stripOffsets should not be null.");
+ if (stripOffsets == null || stripOffsets.length == 0) {
+ Log.w(TAG, "stripOffsets should not be null or have zero length.");
return;
}
- if (stripByteCounts == null) {
- Log.w(TAG, "stripByteCounts should not be null.");
+ if (stripByteCounts == null || stripByteCounts.length == 0) {
+ Log.w(TAG, "stripByteCounts should not be null or have zero length.");
+ return;
+ }
+ if (stripOffsets.length != stripByteCounts.length) {
+ Log.w(TAG, "stripOffsets and stripByteCounts should have same length.");
return;
}
@@ -4034,10 +4030,18 @@
int bytesRead = 0;
int bytesAdded = 0;
+ mHasThumbnail = mHasThumbnailStrips = mAreThumbnailStripsConsecutive = true;
for (int i = 0; i < stripOffsets.length; i++) {
int stripOffset = (int) stripOffsets[i];
int stripByteCount = (int) stripByteCounts[i];
+ // Check if strips are consecutive
+ // TODO: Add test for non-consecutive thumbnail image
+ if (i < stripOffsets.length - 1
+ && stripOffset + stripByteCount != stripOffsets[i + 1]) {
+ mAreThumbnailStripsConsecutive = false;
+ }
+
// Skip to offset
int skipBytes = stripOffset - bytesRead;
if (skipBytes < 0) {
@@ -4057,10 +4061,13 @@
stripBytes.length);
bytesAdded += stripBytes.length;
}
-
- mHasThumbnail = true;
mThumbnailBytes = totalStripBytes;
- mThumbnailLength = totalStripBytes.length;
+
+ if (mAreThumbnailStripsConsecutive) {
+ // Need to add mExifOffset, which is the offset to the EXIF data segment
+ mThumbnailOffset = (int) stripOffsets[0] + mExifOffset;
+ mThumbnailLength = totalStripBytes.length;
+ }
}
}
@@ -4218,8 +4225,7 @@
}
// Writes an Exif segment into the given output stream.
- private int writeExifSegment(ByteOrderedDataOutputStream dataOutputStream,
- int exifOffsetFromBeginning) throws IOException {
+ private int writeExifSegment(ByteOrderedDataOutputStream dataOutputStream) throws IOException {
// The following variables are for calculating each IFD tag group size in bytes.
int[] ifdOffsets = new int[EXIF_TAGS.length];
int[] ifdDataSizes = new int[EXIF_TAGS.length];
@@ -4278,7 +4284,9 @@
}
// Calculate IFD offsets.
- int position = 8; // 8 bytes are for TIFF headers
+ // 8 bytes are for TIFF headers: 2 bytes (byte order) + 2 bytes (identifier) + 4 bytes
+ // (offset of IFDs)
+ int position = 8;
for (int ifdType = 0; ifdType < EXIF_TAGS.length; ++ifdType) {
if (!mAttributes[ifdType].isEmpty()) {
ifdOffsets[ifdType] = position;
@@ -4289,7 +4297,8 @@
int thumbnailOffset = position;
mAttributes[IFD_TYPE_THUMBNAIL].put(JPEG_INTERCHANGE_FORMAT_TAG.name,
ExifAttribute.createULong(thumbnailOffset, mExifByteOrder));
- mThumbnailOffset = exifOffsetFromBeginning + thumbnailOffset;
+ // Need to add mExifOffset, which is the offset to the EXIF data segment
+ mThumbnailOffset = thumbnailOffset + mExifOffset;
position += mThumbnailLength;
}
diff --git a/media/java/android/media/tv/tuner/FrontendSettings.java b/media/java/android/media/tv/tuner/FrontendSettings.java
new file mode 100644
index 0000000..3782cc6
--- /dev/null
+++ b/media/java/android/media/tv/tuner/FrontendSettings.java
@@ -0,0 +1,274 @@
+/*
+ * Copyright 2019 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.media.tv.tuner;
+
+import android.media.tv.tuner.TunerConstants.FrontendSettingsType;
+
+import java.util.List;
+
+/**
+ * @hide
+ */
+public abstract class FrontendSettings {
+ protected int mFrequency;
+
+ /**
+ * Returns the frontend type.
+ */
+ @FrontendSettingsType
+ public abstract int getType();
+
+ public int getFrequency() {
+ return mFrequency;
+ }
+
+ // TODO: use hal constants for enum fields
+ // TODO: javaDoc
+ // TODO: add builders and getters for other settings type
+
+ /**
+ * Frontend settings for analog.
+ */
+ public static class FrontendAnalogSettings extends FrontendSettings {
+ private int mAnalogType;
+ private int mSifStandard;
+
+ @Override
+ public int getType() {
+ return TunerConstants.FRONTEND_TYPE_ANALOG;
+ }
+
+ public int getAnalogType() {
+ return mAnalogType;
+ }
+
+ public int getSifStandard() {
+ return mSifStandard;
+ }
+
+ /**
+ * Creates a new builder object.
+ */
+ public static Builder newBuilder() {
+ return new Builder();
+ }
+
+ private FrontendAnalogSettings(int frequency, int analogType, int sifStandard) {
+ mFrequency = frequency;
+ mAnalogType = analogType;
+ mSifStandard = sifStandard;
+ }
+
+ /**
+ * Builder for FrontendAnalogSettings.
+ */
+ public static class Builder {
+ private int mFrequency;
+ private int mAnalogType;
+ private int mSifStandard;
+
+ private Builder() {}
+
+ /**
+ * Sets frequency.
+ */
+ public Builder setFrequency(int frequency) {
+ mFrequency = frequency;
+ return this;
+ }
+
+ /**
+ * Sets analog type.
+ */
+ public Builder setAnalogType(int analogType) {
+ mAnalogType = analogType;
+ return this;
+ }
+
+ /**
+ * Sets sif standard.
+ */
+ public Builder setSifStandard(int sifStandard) {
+ mSifStandard = sifStandard;
+ return this;
+ }
+
+ /**
+ * Builds a FrontendAnalogSettings instance.
+ */
+ public FrontendAnalogSettings build() {
+ return new FrontendAnalogSettings(mFrequency, mAnalogType, mSifStandard);
+ }
+ }
+ }
+
+ /**
+ * Frontend settings for ATSC.
+ */
+ public static class FrontendAtscSettings extends FrontendSettings {
+ public int modulation;
+
+ @Override
+ public int getType() {
+ return TunerConstants.FRONTEND_TYPE_ATSC;
+ }
+ }
+
+ /**
+ * Frontend settings for ATSC-3.
+ */
+ public static class FrontendAtsc3Settings extends FrontendSettings {
+ public int bandwidth;
+ public byte demodOutputFormat;
+ public List<FrontendAtsc3PlpSettings> plpSettings;
+
+ @Override
+ public int getType() {
+ return TunerConstants.FRONTEND_TYPE_ATSC3;
+ }
+ }
+
+ /**
+ * Frontend settings for DVBS.
+ */
+ public static class FrontendDvbsSettings extends FrontendSettings {
+ public int modulation;
+ public FrontendDvbsCodeRate coderate;
+ public int symbolRate;
+ public int rolloff;
+ public int pilot;
+ public int inputStreamId;
+ public byte standard;
+
+ @Override
+ public int getType() {
+ return TunerConstants.FRONTEND_TYPE_DVBS;
+ }
+ }
+
+ /**
+ * Frontend settings for DVBC.
+ */
+ public static class FrontendDvbcSettings extends FrontendSettings {
+ public int modulation;
+ public long fec;
+ public int symbolRate;
+ public int outerFec;
+ public byte annex;
+ public int spectralInversion;
+
+ @Override
+ public int getType() {
+ return TunerConstants.FRONTEND_TYPE_DVBC;
+ }
+ }
+
+ /**
+ * Frontend settings for DVBT.
+ */
+ public static class FrontendDvbtSettings extends FrontendSettings {
+ public int transmissionMode;
+ public int bandwidth;
+ public int constellation;
+ public int hierarchy;
+ public int hpCoderate;
+ public int lpCoderate;
+ public int guardInterval;
+ public boolean isHighPriority;
+ public byte standard;
+ public boolean isMiso;
+ public int plpMode;
+ public byte plpId;
+ public byte plpGroupId;
+
+ @Override
+ public int getType() {
+ return TunerConstants.FRONTEND_TYPE_DVBT;
+ }
+ }
+
+ /**
+ * Frontend settings for ISDBS.
+ */
+ public static class FrontendIsdbsSettings extends FrontendSettings {
+ public int streamId;
+ public int streamIdType;
+ public int modulation;
+ public int coderate;
+ public int symbolRate;
+ public int rolloff;
+
+ @Override
+ public int getType() {
+ return TunerConstants.FRONTEND_TYPE_ISDBS;
+ }
+ }
+
+ /**
+ * Frontend settings for ISDBS-3.
+ */
+ public static class FrontendIsdbs3Settings extends FrontendSettings {
+ public int streamId;
+ public int streamIdType;
+ public int modulation;
+ public int coderate;
+ public int symbolRate;
+ public int rolloff;
+
+ @Override
+ public int getType() {
+ return TunerConstants.FRONTEND_TYPE_ISDBS3;
+ }
+ }
+
+ /**
+ * Frontend settings for ISDBT.
+ */
+ public static class FrontendIsdbtSettings extends FrontendSettings {
+ public int modulation;
+ public int bandwidth;
+ public int coderate;
+ public int guardInterval;
+ public int serviceAreaId;
+
+ @Override
+ public int getType() {
+ return TunerConstants.FRONTEND_TYPE_ISDBT;
+ }
+ }
+
+ /**
+ * PLP settings for ATSC-3.
+ */
+ public static class FrontendAtsc3PlpSettings {
+ public byte plpId;
+ public int modulation;
+ public int interleaveMode;
+ public int codeRate;
+ public int fec;
+ }
+
+ /**
+ * Code rate for DVBS.
+ */
+ public static class FrontendDvbsCodeRate {
+ public long fec;
+ public boolean isLinear;
+ public boolean isShortFrames;
+ public int bitsPer1000Symbol;
+ }
+}
diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java
index c91325a..82cef2e 100644
--- a/media/java/android/media/tv/tuner/Tuner.java
+++ b/media/java/android/media/tv/tuner/Tuner.java
@@ -16,6 +16,7 @@
package android.media.tv.tuner;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.media.tv.tuner.TunerConstants.DemuxPidType;
import android.os.Handler;
@@ -78,6 +79,7 @@
* Native method to open frontend of the given ID.
*/
private native Frontend nativeOpenFrontendById(int id);
+ private native int nativeTune(int type, FrontendSettings settings);
private native Filter nativeOpenFilter(int type, int subType, int bufferSize);
@@ -207,6 +209,13 @@
}
}
+ /**
+ * Tunes the frontend to using the settings given.
+ */
+ public int tune(@NonNull FrontendSettings settings) {
+ return nativeTune(settings.getType(), settings);
+ }
+
private List<Integer> getFrontendIds() {
mFrontendIds = nativeGetFrontendIds();
return mFrontendIds;
diff --git a/media/java/android/media/tv/tuner/TunerConstants.java b/media/java/android/media/tv/tuner/TunerConstants.java
index 01f9367..458cb16 100644
--- a/media/java/android/media/tv/tuner/TunerConstants.java
+++ b/media/java/android/media/tv/tuner/TunerConstants.java
@@ -75,6 +75,21 @@
public static final int DEMUX_T_PID = 1;
public static final int DEMUX_MMPT_PID = 2;
+ @IntDef({FRONTEND_SETTINGS_ANALOG, FRONTEND_SETTINGS_ATSC, FRONTEND_SETTINGS_ATSC3,
+ FRONTEND_SETTINGS_DVBS, FRONTEND_SETTINGS_DVBC, FRONTEND_SETTINGS_DVBT,
+ FRONTEND_SETTINGS_ISDBS, FRONTEND_SETTINGS_ISDBS3, FRONTEND_SETTINGS_ISDBT})
+ public @interface FrontendSettingsType {}
+
+ public static final int FRONTEND_SETTINGS_ANALOG = 1;
+ public static final int FRONTEND_SETTINGS_ATSC = 2;
+ public static final int FRONTEND_SETTINGS_ATSC3 = 3;
+ public static final int FRONTEND_SETTINGS_DVBS = 4;
+ public static final int FRONTEND_SETTINGS_DVBC = 5;
+ public static final int FRONTEND_SETTINGS_DVBT = 6;
+ public static final int FRONTEND_SETTINGS_ISDBS = 7;
+ public static final int FRONTEND_SETTINGS_ISDBS3 = 8;
+ public static final int FRONTEND_SETTINGS_ISDBT = 9;
+
private TunerConstants() {
}
}
diff --git a/media/jni/android_media_MediaDataSource.cpp b/media/jni/android_media_MediaDataSource.cpp
index 9705b91..0cb4b2d 100644
--- a/media/jni/android_media_MediaDataSource.cpp
+++ b/media/jni/android_media_MediaDataSource.cpp
@@ -26,7 +26,6 @@
#include <nativehelper/JNIHelp.h>
#include <binder/MemoryDealer.h>
-#include <drm/drm_framework_common.h>
#include <media/stagefright/foundation/ADebug.h>
#include <nativehelper/ScopedLocalRef.h>
@@ -161,8 +160,4 @@
return String8::format("JMediaDataSource(pid %d, uid %d)", getpid(), getuid());
}
-sp<DecryptHandle> JMediaDataSource::DrmInitialization(const char * /* mime */) {
- return NULL;
-}
-
} // namespace android
diff --git a/media/jni/android_media_MediaDataSource.h b/media/jni/android_media_MediaDataSource.h
index 39405d2..378baf4 100644
--- a/media/jni/android_media_MediaDataSource.h
+++ b/media/jni/android_media_MediaDataSource.h
@@ -47,7 +47,6 @@
virtual void close();
virtual uint32_t getFlags();
virtual String8 toString();
- virtual sp<DecryptHandle> DrmInitialization(const char *mime);
private:
// Protect all member variables with mLock because this object will be
diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp
index f5202fc..5216906 100644
--- a/media/jni/android_media_tv_Tuner.cpp
+++ b/media/jni/android_media_tv_Tuner.cpp
@@ -31,6 +31,9 @@
using ::android::hardware::tv::tuner::V1_0::DemuxMmtpPid;
using ::android::hardware::tv::tuner::V1_0::DemuxTpid;
using ::android::hardware::tv::tuner::V1_0::DemuxTsFilterType;
+using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSettings;
+using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSifStandard;
+using ::android::hardware::tv::tuner::V1_0::FrontendAnalogType;
using ::android::hardware::tv::tuner::V1_0::ITuner;
using ::android::hardware::tv::tuner::V1_0::Result;
@@ -263,6 +266,15 @@
id);
}
+int JTuner::tune(const FrontendSettings& settings) {
+ if (mFe == NULL) {
+ ALOGE("frontend is not initialized");
+ return (int)Result::INVALID_STATE;
+ }
+ Result result = mFe->tune(settings);
+ return (int)result;
+}
+
bool JTuner::openDemux() {
if (mTuner == nullptr) {
return false;
@@ -417,6 +429,32 @@
return demuxPid;
}
+static FrontendSettings getFrontendSettings(JNIEnv *env, int type, jobject settings) {
+ FrontendSettings frontendSettings;
+ jclass clazz = env->FindClass("android/media/tv/tuner/FrontendSettings");
+ jfieldID freqField = env->GetFieldID(clazz, "frequency", "I");
+ uint32_t freq = static_cast<uint32_t>(env->GetIntField(clazz, freqField));
+
+ // TODO: handle the other 8 types of settings
+ if (type == 1) {
+ // analog
+ clazz = env->FindClass("android/media/tv/tuner/FrontendSettings$FrontendAnalogSettings");
+ FrontendAnalogType analogType =
+ static_cast<FrontendAnalogType>(
+ env->GetIntField(settings, env->GetFieldID(clazz, "mAnalogType", "I")));
+ FrontendAnalogSifStandard sifStandard =
+ static_cast<FrontendAnalogSifStandard>(
+ env->GetIntField(settings, env->GetFieldID(clazz, "mSifStandard", "I")));
+ FrontendAnalogSettings frontendAnalogSettings {
+ .frequency = freq,
+ .type = analogType,
+ .sifStandard = sifStandard,
+ };
+ frontendSettings.analog(frontendAnalogSettings);
+ }
+ return frontendSettings;
+}
+
static sp<IFilter> getFilter(JNIEnv *env, jobject filter) {
return (IFilter *)env->GetLongField(filter, gFields.filterContext);
}
@@ -476,6 +514,11 @@
return tuner->openFrontendById(id);
}
+static int android_media_tv_Tuner_tune(JNIEnv *env, jobject thiz, jint type, jobject settings) {
+ sp<JTuner> tuner = getTuner(env, thiz);
+ return tuner->tune(getFrontendSettings(env, type, settings));
+}
+
static jobject android_media_tv_Tuner_get_lnb_ids(JNIEnv *env, jobject thiz) {
sp<JTuner> tuner = getTuner(env, thiz);
return tuner->getLnbIds();
@@ -612,6 +655,8 @@
(void *)android_media_tv_Tuner_get_frontend_ids },
{ "nativeOpenFrontendById", "(I)Landroid/media/tv/tuner/Tuner$Frontend;",
(void *)android_media_tv_Tuner_open_frontend_by_id },
+ { "nativeTune", "(ILandroid/media/tv/tuner/FrontendSettings;)I",
+ (void *)android_media_tv_Tuner_tune },
{ "nativeOpenFilter", "(III)Landroid/media/tv/tuner/Tuner$Filter;",
(void *)android_media_tv_Tuner_open_filter },
{ "nativeGetLnbIds", "()Ljava/util/List;",
diff --git a/media/jni/android_media_tv_Tuner.h b/media/jni/android_media_tv_Tuner.h
index 3bf6ec8..f856791 100644
--- a/media/jni/android_media_tv_Tuner.h
+++ b/media/jni/android_media_tv_Tuner.h
@@ -34,6 +34,7 @@
using ::android::hardware::tv::tuner::V1_0::FrontendId;
using ::android::hardware::tv::tuner::V1_0::FrontendScanMessage;
using ::android::hardware::tv::tuner::V1_0::FrontendScanMessageType;
+using ::android::hardware::tv::tuner::V1_0::FrontendSettings;
using ::android::hardware::tv::tuner::V1_0::IDemux;
using ::android::hardware::tv::tuner::V1_0::IDescrambler;
using ::android::hardware::tv::tuner::V1_0::IDvr;
@@ -95,6 +96,7 @@
sp<ITuner> getTunerService();
jobject getFrontendIds();
jobject openFrontendById(int id);
+ int tune(const FrontendSettings& settings);
jobject getLnbIds();
jobject openLnbById(int id);
jobject openFilter(DemuxFilterType type, int bufferSize);
diff --git a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouterManagerTest.java b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouterManagerTest.java
index 240e7d1..d0f7c78 100644
--- a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouterManagerTest.java
+++ b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouterManagerTest.java
@@ -82,6 +82,11 @@
public static final String CATEGORY_SPECIAL =
"com.android.mediarouteprovider.CATEGORY_SPECIAL";
+ // system routes
+ private static final String DEFAULT_ROUTE_ID = "DEFAULT_ROUTE";
+ private static final String CATEGORY_LIVE_AUDIO = "android.media.intent.category.LIVE_AUDIO";
+ private static final String CATEGORY_LIVE_VIDEO = "android.media.intent.category.LIVE_VIDEO";
+
private static final int TIMEOUT_MS = 5000;
private Context mContext;
@@ -90,13 +95,17 @@
private Executor mExecutor;
private String mPackageName;
- private static final List<String> CONTROL_CATEGORIES_ALL = new ArrayList();
- private static final List<String> CONTROL_CATEGORIES_SPECIAL = new ArrayList();
+ private static final List<String> CATEGORIES_ALL = new ArrayList();
+ private static final List<String> CATEGORIES_SPECIAL = new ArrayList();
+ private static final List<String> CATEGORIES_LIVE_AUDIO = new ArrayList<>();
static {
- CONTROL_CATEGORIES_ALL.add(CATEGORY_SAMPLE);
- CONTROL_CATEGORIES_ALL.add(CATEGORY_SPECIAL);
+ CATEGORIES_ALL.add(CATEGORY_SAMPLE);
+ CATEGORIES_ALL.add(CATEGORY_SPECIAL);
+ CATEGORIES_ALL.add(CATEGORY_LIVE_AUDIO);
- CONTROL_CATEGORIES_SPECIAL.add(CATEGORY_SPECIAL);
+ CATEGORIES_SPECIAL.add(CATEGORY_SPECIAL);
+
+ CATEGORIES_LIVE_AUDIO.add(CATEGORY_LIVE_AUDIO);
}
@Before
@@ -153,7 +162,7 @@
mRouter2.registerCallback(mExecutor, routerCallback);
Map<String, MediaRoute2Info> routes =
- waitAndGetRoutesWithManager(CONTROL_CATEGORIES_ALL);
+ waitAndGetRoutesWithManager(CATEGORIES_ALL);
CountDownLatch latch = new CountDownLatch(1);
MediaRouter2Manager.Callback callback = new MediaRouter2Manager.Callback() {
@@ -187,7 +196,7 @@
mManager.registerCallback(mExecutor, mockCallback);
Map<String, MediaRoute2Info> routes =
- waitAndGetRoutesWithManager(CONTROL_CATEGORIES_SPECIAL);
+ waitAndGetRoutesWithManager(CATEGORIES_SPECIAL);
Assert.assertEquals(1, routes.size());
Assert.assertNotNull(routes.get(ROUTE_ID_SPECIAL_CATEGORY));
@@ -203,7 +212,7 @@
MediaRouter2.Callback mockCallback = mock(MediaRouter2.Callback.class);
mRouter2.registerCallback(mExecutor, mockCallback);
- Map<String, MediaRoute2Info> routes = waitAndGetRoutes(CONTROL_CATEGORIES_SPECIAL);
+ Map<String, MediaRoute2Info> routes = waitAndGetRoutes(CATEGORIES_SPECIAL);
Assert.assertEquals(1, routes.size());
Assert.assertNotNull(routes.get(ROUTE_ID_SPECIAL_CATEGORY));
@@ -219,7 +228,7 @@
mManager.registerCallback(mExecutor, managerCallback);
mRouter2.registerCallback(mExecutor, routerCallback);
- Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(CONTROL_CATEGORIES_ALL);
+ Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(CATEGORIES_ALL);
MediaRoute2Info routeToSelect = routes.get(ROUTE_ID1);
assertNotNull(routeToSelect);
@@ -242,7 +251,7 @@
mRouter2.registerCallback(mExecutor, routerCallback);
- Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(CONTROL_CATEGORIES_ALL);
+ Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(CATEGORIES_ALL);
awaitOnRouteChangedManager(
() -> mManager.selectRoute(mPackageName, routes.get(ROUTE_ID1)),
@@ -264,7 +273,7 @@
@Test
public void testControlVolumeWithRouter() throws Exception {
- Map<String, MediaRoute2Info> routes = waitAndGetRoutes(CONTROL_CATEGORIES_ALL);
+ Map<String, MediaRoute2Info> routes = waitAndGetRoutes(CATEGORIES_ALL);
MediaRoute2Info volRoute = routes.get(ROUTE_ID_VARIABLE_VOLUME);
int originalVolume = volRoute.getVolume();
@@ -286,7 +295,7 @@
MediaRouter2.Callback mockCallback = mock(MediaRouter2.Callback.class);
mRouter2.registerCallback(mExecutor, mockCallback);
- Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(CONTROL_CATEGORIES_ALL);
+ Map<String, MediaRoute2Info> routes = waitAndGetRoutesWithManager(CATEGORIES_ALL);
MediaRoute2Info volRoute = routes.get(ROUTE_ID_VARIABLE_VOLUME);
int originalVolume = volRoute.getVolume();
@@ -309,7 +318,7 @@
public void testVolumeHandling() throws Exception {
MediaRouter2.Callback mockCallback = mock(MediaRouter2.Callback.class);
mRouter2.registerCallback(mExecutor, mockCallback);
- Map<String, MediaRoute2Info> routes = waitAndGetRoutes(CONTROL_CATEGORIES_ALL);
+ Map<String, MediaRoute2Info> routes = waitAndGetRoutes(CATEGORIES_ALL);
MediaRoute2Info fixedVolumeRoute = routes.get(ROUTE_ID_FIXED_VOLUME);
MediaRoute2Info variableVolumeRoute = routes.get(ROUTE_ID_VARIABLE_VOLUME);
@@ -321,6 +330,13 @@
mRouter2.unregisterCallback(mockCallback);
}
+ @Test
+ public void testDefaultRoute() throws Exception {
+ Map<String, MediaRoute2Info> routes = waitAndGetRoutes(CATEGORIES_LIVE_AUDIO);
+
+ assertNotNull(routes.get(DEFAULT_ROUTE_ID));
+ }
+
Map<String, MediaRoute2Info> waitAndGetRoutes(List<String> controlCategories) throws Exception {
CountDownLatch latch = new CountDownLatch(1);
MediaRouter2.Callback callback = new MediaRouter2.Callback() {
@@ -417,6 +433,7 @@
static Map<String, MediaRoute2Info> createRouteMap(List<MediaRoute2Info> routes) {
Map<String, MediaRoute2Info> routeMap = new HashMap<>();
for (MediaRoute2Info route : routes) {
+ // intentionally not route.getUniqueId() for convenience.
routeMap.put(route.getId(), route);
}
return routeMap;
diff --git a/packages/CarSystemUI/res/values/integers_car.xml b/packages/CarSystemUI/res/values/integers_car.xml
index d6c16cb..e53446e 100644
--- a/packages/CarSystemUI/res/values/integers_car.xml
+++ b/packages/CarSystemUI/res/values/integers_car.xml
@@ -20,11 +20,6 @@
<!-- Full screen user switcher column number TODO: move to support library-->
<integer name="user_fullscreen_switcher_num_col">3</integer>
- <!-- Number of milliseconds user can spend driving with the keyguard up. After that, we switch to Guest. -->
- <!-- If the number is negative, the feature is disabled.
- If it's zero, we switch to guest immediately as we start driving. -->
- <integer name="driving_on_keyguard_timeout_ms">-1</integer>
-
<!--Percentage of the screen height, from the bottom, that a notification panel being
partially closed at will result in it remaining open if released-->
<integer name="notification_settle_open_percentage">20</integer>
diff --git a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
index 4e5a3a6..bef769d 100644
--- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
+++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
@@ -24,7 +24,6 @@
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.car.Car;
-import android.car.drivingstate.CarDrivingStateEvent;
import android.car.drivingstate.CarUxRestrictionsManager;
import android.car.hardware.power.CarPowerManager.CarPowerStateListener;
import android.content.Context;
@@ -114,6 +113,7 @@
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.LightBarController;
import com.android.systemui.statusbar.phone.LightsOutNotifController;
+import com.android.systemui.statusbar.phone.LockscreenLockIconController;
import com.android.systemui.statusbar.phone.LockscreenWallpaper;
import com.android.systemui.statusbar.phone.NotificationGroupAlertTransferHelper;
import com.android.systemui.statusbar.phone.NotificationGroupManager;
@@ -121,6 +121,7 @@
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
+import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarter;
import com.android.systemui.statusbar.phone.StatusBarWindowController;
import com.android.systemui.statusbar.phone.StatusBarWindowViewController;
import com.android.systemui.statusbar.policy.BatteryController;
@@ -153,7 +154,10 @@
private static final float FLING_ANIMATION_MAX_TIME = 0.5f;
// acceleration rate for the fling animation
private static final float FLING_SPEED_UP_FACTOR = 0.6f;
+
private final ScrimController mScrimController;
+ private final StatusBarWindowViewController mStatusBarWindowViewController;
+ private final LockscreenLockIconController mLockscreenLockIconController;
private float mOpeningVelocity = DEFAULT_FLING_VELOCITY;
private float mClosingVelocity = DEFAULT_FLING_VELOCITY;
@@ -175,10 +179,8 @@
private final CarServiceProvider mCarServiceProvider;
private DeviceProvisionedController mDeviceProvisionedController;
- private DrivingStateHelper mDrivingStateHelper;
private PowerManagerHelper mPowerManagerHelper;
private FlingAnimationUtils mFlingAnimationUtils;
- private SwitchToGuestTimer mSwitchToGuestTimer;
private NotificationDataManager mNotificationDataManager;
private NotificationClickHandlerFactory mNotificationClickHandlerFactory;
private ScreenLifecycle mScreenLifecycle;
@@ -287,7 +289,8 @@
NotificationListener notificationListener,
ConfigurationController configurationController,
StatusBarWindowController statusBarWindowController,
- StatusBarWindowViewController.Builder statusBarWindowViewControllerBuild,
+ StatusBarWindowViewController statusBarWindowViewController,
+ LockscreenLockIconController lockscreenLockIconController,
DozeParameters dozeParameters,
ScrimController scrimController,
Lazy<LockscreenWallpaper> lockscreenWallpaperLazy,
@@ -304,6 +307,8 @@
Optional<Divider> dividerOptional,
SuperStatusBarViewFactory superStatusBarViewFactory,
LightsOutNotifController lightsOutNotifController,
+ StatusBarNotificationActivityStarter.Builder
+ statusBarNotificationActivityStarterBuilder,
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
ViewMediatorCallback viewMediatorCallback,
DismissCallbackRegistry dismissCallbackRegistry,
@@ -363,7 +368,8 @@
notificationListener,
configurationController,
statusBarWindowController,
- statusBarWindowViewControllerBuild,
+ statusBarWindowViewController,
+ lockscreenLockIconController,
dozeParameters,
scrimController,
null /* keyguardLiftController */,
@@ -380,11 +386,14 @@
remoteInputUriController,
dividerOptional,
lightsOutNotifController,
+ statusBarNotificationActivityStarterBuilder,
superStatusBarViewFactory,
statusBarKeyguardViewManager,
viewMediatorCallback,
dismissCallbackRegistry);
mScrimController = scrimController;
+ mStatusBarWindowViewController = statusBarWindowViewController;
+ mLockscreenLockIconController = lockscreenLockIconController;
mDeviceProvisionedController = deviceProvisionedController;
mCarServiceProvider = carServiceProvider;
mDrivingStateHelperLazy = drivingStateHelperLazy;
@@ -400,22 +409,22 @@
mScreenLifecycle = Dependency.get(ScreenLifecycle.class);
mScreenLifecycle.addObserver(mScreenObserver);
- // Notification bar related setup.
+ // Notification bar related setup.
mInitialBackgroundAlpha = (float) mContext.getResources().getInteger(
- R.integer.config_initialNotificationBackgroundAlpha) / 100;
+ R.integer.config_initialNotificationBackgroundAlpha) / 100;
if (mInitialBackgroundAlpha < 0 || mInitialBackgroundAlpha > 100) {
throw new RuntimeException(
- "Unable to setup notification bar due to incorrect initial background alpha"
- + " percentage");
+ "Unable to setup notification bar due to incorrect initial background alpha"
+ + " percentage");
}
float finalBackgroundAlpha = Math.max(
- mInitialBackgroundAlpha,
- (float) mContext.getResources().getInteger(
- R.integer.config_finalNotificationBackgroundAlpha) / 100);
+ mInitialBackgroundAlpha,
+ (float) mContext.getResources().getInteger(
+ R.integer.config_finalNotificationBackgroundAlpha) / 100);
if (finalBackgroundAlpha < 0 || finalBackgroundAlpha > 100) {
throw new RuntimeException(
- "Unable to setup notification bar due to incorrect final background alpha"
- + " percentage");
+ "Unable to setup notification bar due to incorrect final background alpha"
+ + " percentage");
}
mBackgroundAlphaDiff = finalBackgroundAlpha - mInitialBackgroundAlpha;
@@ -432,15 +441,6 @@
createBatteryController();
mCarBatteryController.startListening();
- // Used by onDrivingStateChanged and it can be called inside
- // DrivingStateHelper.connectToCarService()
- mSwitchToGuestTimer = new SwitchToGuestTimer(mContext);
-
- // Register a listener for driving state changes.
- mDrivingStateHelper = mDrivingStateHelperLazy.get();
- mDrivingStateHelper.setCarDrivingStateEventListener(this::onDrivingStateChanged);
- mDrivingStateHelper.connectToCarService();
-
mPowerManagerHelper = mPowerManagerHelperLazy.get();
mPowerManagerHelper.setCarPowerStateListener(mCarPowerStateListener);
mPowerManagerHelper.connectToCarService();
@@ -560,13 +560,6 @@
});
CarNotificationListener carNotificationListener = new CarNotificationListener();
mCarUxRestrictionManagerWrapper = new CarUxRestrictionManagerWrapper();
- mCarServiceProvider.addListener(car -> {
- CarUxRestrictionsManager carUxRestrictionsManager =
- (CarUxRestrictionsManager)
- car.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE);
- mCarUxRestrictionManagerWrapper.setCarUxRestrictionsManager(
- carUxRestrictionsManager);
- });
mNotificationDataManager = new NotificationDataManager();
mNotificationDataManager.setOnUnseenCountUpdateListener(
@@ -681,14 +674,21 @@
return handled || isTracking;
}
});
+ mCarServiceProvider.addListener(car -> {
+ CarUxRestrictionsManager carUxRestrictionsManager =
+ (CarUxRestrictionsManager)
+ car.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE);
+ mCarUxRestrictionManagerWrapper.setCarUxRestrictionsManager(
+ carUxRestrictionsManager);
- mNotificationViewController = new NotificationViewController(
- mNotificationView,
- PreprocessingManager.getInstance(mContext),
- carNotificationListener,
- mCarUxRestrictionManagerWrapper,
- mNotificationDataManager);
- mNotificationViewController.enable();
+ mNotificationViewController = new NotificationViewController(
+ mNotificationView,
+ PreprocessingManager.getInstance(mContext),
+ carNotificationListener,
+ mCarUxRestrictionManagerWrapper,
+ mNotificationDataManager);
+ mNotificationViewController.enable();
+ });
}
/**
@@ -906,20 +906,6 @@
}
}
- private void onDrivingStateChanged(CarDrivingStateEvent notUsed) {
- // Check if we need to start the timer every time driving state changes.
- startSwitchToGuestTimerIfDrivingOnKeyguard();
- }
-
- private void startSwitchToGuestTimerIfDrivingOnKeyguard() {
- if (mDrivingStateHelper.isCurrentlyDriving() && mState != StatusBarState.SHADE) {
- // We're driving while keyguard is up.
- mSwitchToGuestTimer.start();
- } else {
- mSwitchToGuestTimer.cancel();
- }
- }
-
@Override
protected void createUserSwitcher() {
UserSwitcherController userSwitcherController =
@@ -945,8 +931,6 @@
public void onStateChanged(int newState) {
super.onStateChanged(newState);
- startSwitchToGuestTimerIfDrivingOnKeyguard();
-
if (newState != StatusBarState.FULLSCREEN_USER_SWITCHER) {
hideUserSwitcher();
} else {
diff --git a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBarModule.java b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBarModule.java
index 4813d6d..6529868 100644
--- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBarModule.java
+++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBarModule.java
@@ -73,12 +73,14 @@
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.LightBarController;
import com.android.systemui.statusbar.phone.LightsOutNotifController;
+import com.android.systemui.statusbar.phone.LockscreenLockIconController;
import com.android.systemui.statusbar.phone.LockscreenWallpaper;
import com.android.systemui.statusbar.phone.NotificationGroupAlertTransferHelper;
import com.android.systemui.statusbar.phone.NotificationGroupManager;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
+import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarter;
import com.android.systemui.statusbar.phone.StatusBarWindowController;
import com.android.systemui.statusbar.phone.StatusBarWindowViewController;
import com.android.systemui.statusbar.policy.BatteryController;
@@ -160,7 +162,8 @@
NotificationListener notificationListener,
ConfigurationController configurationController,
StatusBarWindowController statusBarWindowController,
- StatusBarWindowViewController.Builder statusBarWindowViewControllerBuilder,
+ StatusBarWindowViewController statusBarWindowViewController,
+ LockscreenLockIconController lockscreenLockIconController,
DozeParameters dozeParameters,
ScrimController scrimController,
Lazy<LockscreenWallpaper> lockscreenWallpaperLazy,
@@ -177,6 +180,8 @@
Optional<Divider> dividerOptional,
SuperStatusBarViewFactory superStatusBarViewFactory,
LightsOutNotifController lightsOutNotifController,
+ StatusBarNotificationActivityStarter.Builder
+ statusBarNotificationActivityStarterBuilder,
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
ViewMediatorCallback viewMediatorCallback,
DismissCallbackRegistry dismissCallbackRegistry,
@@ -235,7 +240,8 @@
notificationListener,
configurationController,
statusBarWindowController,
- statusBarWindowViewControllerBuilder,
+ statusBarWindowViewController,
+ lockscreenLockIconController,
dozeParameters,
scrimController,
lockscreenWallpaperLazy,
@@ -252,6 +258,7 @@
dividerOptional,
superStatusBarViewFactory,
lightsOutNotifController,
+ statusBarNotificationActivityStarterBuilder,
statusBarKeyguardViewManager,
viewMediatorCallback,
dismissCallbackRegistry,
diff --git a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/SwitchToGuestTimer.java b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/SwitchToGuestTimer.java
deleted file mode 100644
index 0c91cba..0000000
--- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/SwitchToGuestTimer.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.systemui.statusbar.car;
-
-import android.car.userlib.CarUserManagerHelper;
-import android.content.Context;
-import android.os.CountDownTimer;
-import android.util.Log;
-
-import androidx.annotation.GuardedBy;
-
-import com.android.systemui.R;
-
-/**
- * Wrapper for a countdown timer that switches to Guest if the user has been driving with
- * the keyguard up for configurable number of seconds.
- */
-public class SwitchToGuestTimer {
- private static final String TAG = "SwitchToGuestTimer";
-
- // After how many ms CountdownTimer.onTick gets triggered.
- private static final int COUNTDOWN_INTERVAL_MS = 1000;
-
- private final CarUserManagerHelper mCarUserManagerHelper;
- private final Object mTimerLock;
- private final String mGuestName;
- private final int mTimeoutMs;
- private final boolean mEnabled;
-
- @GuardedBy("mTimerLock")
- private CountDownTimer mSwitchToGuestTimer;
-
- public SwitchToGuestTimer(Context context) {
- mCarUserManagerHelper = new CarUserManagerHelper(context);
- mGuestName = context.getResources().getString(R.string.car_guest);
- mTimeoutMs = context.getResources().getInteger(R.integer.driving_on_keyguard_timeout_ms);
-
- // Lock prevents multiple timers being started.
- mTimerLock = new Object();
-
- // If milliseconds to switch is a negative number, the feature is disabled.
- mEnabled = mTimeoutMs >= 0;
- }
-
- /**
- * Starts the timer if it's not already running.
- */
- public void start() {
- if (!mEnabled) {
- logD("Switching to guest after driving on keyguard is disabled.");
- return;
- }
-
- synchronized (mTimerLock) {
- if (mSwitchToGuestTimer != null) {
- logD("Timer is already running.");
- return;
- }
-
- mSwitchToGuestTimer = new CountDownTimer(mTimeoutMs, COUNTDOWN_INTERVAL_MS) {
- @Override
- public void onTick(long msUntilFinished) {
- logD("Ms until switching to guest: " + Long.toString(msUntilFinished));
- }
-
- @Override
- public void onFinish() {
- mCarUserManagerHelper.startGuestSession(mGuestName);
- cancel();
- }
- };
-
- logI("Starting timer");
- mSwitchToGuestTimer.start();
- }
- }
-
- /**
- * Cancels the running timer.
- */
- public void cancel() {
- synchronized (mTimerLock) {
- if (mSwitchToGuestTimer != null) {
- logI("Cancelling timer");
- mSwitchToGuestTimer.cancel();
- mSwitchToGuestTimer = null;
- }
- }
- }
-
- private void logD(String message) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, message);
- }
- }
-
- private void logI(String message) {
- if (Log.isLoggable(TAG, Log.INFO)) {
- Log.i(TAG, message);
- }
- }
-}
diff --git a/packages/SettingsLib/HelpUtils/Android.bp b/packages/SettingsLib/HelpUtils/Android.bp
index af60185..285131d 100644
--- a/packages/SettingsLib/HelpUtils/Android.bp
+++ b/packages/SettingsLib/HelpUtils/Android.bp
@@ -4,6 +4,10 @@
srcs: ["src/**/*.java"],
resource_dirs: ["res"],
+ libs: [
+ "androidx.annotation_annotation",
+ ],
+
sdk_version: "system_current",
min_sdk_version: "21",
}
diff --git a/packages/SettingsLib/HelpUtils/src/com/android/settingslib/HelpUtils.java b/packages/SettingsLib/HelpUtils/src/com/android/settingslib/HelpUtils.java
index 2d13b73..a77683d 100644
--- a/packages/SettingsLib/HelpUtils/src/com/android/settingslib/HelpUtils.java
+++ b/packages/SettingsLib/HelpUtils/src/com/android/settingslib/HelpUtils.java
@@ -33,6 +33,8 @@
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
+import androidx.annotation.VisibleForTesting;
+
import com.android.settingslib.widget.R;
import java.net.URISyntaxException;
@@ -45,7 +47,8 @@
public class HelpUtils {
private final static String TAG = HelpUtils.class.getSimpleName();
- private static final int MENU_HELP = Menu.FIRST + 100;
+ @VisibleForTesting
+ static final int MENU_HELP = Menu.FIRST + 100;
/**
* Help URL query parameter key for the preferred language.
@@ -68,11 +71,16 @@
*/
private static String sCachedVersionCode = null;
- /** Static helper that is not instantiable*/
- private HelpUtils() { }
+ /** Static helper that is not instantiable */
+ private HelpUtils() {
+ }
public static boolean prepareHelpMenuItem(Activity activity, Menu menu, String helpUri,
String backupContext) {
+ // menu contains help item, skip it
+ if (menu.findItem(MENU_HELP) != null) {
+ return false;
+ }
MenuItem helpItem = menu.add(0, MENU_HELP, 0, R.string.help_feedback_label);
helpItem.setIcon(R.drawable.ic_help_actionbar);
return prepareHelpMenuItem(activity, helpItem, helpUri, backupContext);
@@ -80,6 +88,10 @@
public static boolean prepareHelpMenuItem(Activity activity, Menu menu, int helpUriResource,
String backupContext) {
+ // menu contains help item, skip it
+ if (menu.findItem(MENU_HELP) != null) {
+ return false;
+ }
MenuItem helpItem = menu.add(0, MENU_HELP, 0, R.string.help_feedback_label);
helpItem.setIcon(R.drawable.ic_help_actionbar);
return prepareHelpMenuItem(activity, helpItem, activity.getString(helpUriResource),
@@ -90,11 +102,12 @@
* Prepares the help menu item by doing the following.
* - If the helpUrlString is empty or null, the help menu item is made invisible.
* - Otherwise, this makes the help menu item visible and sets the intent for the help menu
- * item to view the URL.
+ * item to view the URL.
*
* @return returns whether the help menu item has been made visible.
*/
- public static boolean prepareHelpMenuItem(final Activity activity, MenuItem helpMenuItem,
+ @VisibleForTesting
+ static boolean prepareHelpMenuItem(final Activity activity, MenuItem helpMenuItem,
String helpUriString, String backupContext) {
if (Global.getInt(activity.getContentResolver(), Global.DEVICE_PROVISIONED, 0) == 0) {
return false;
@@ -117,10 +130,10 @@
/**
* TODO: Enable metrics logger for @SystemApi (b/111552654)
*
- MetricsLogger.action(activity,
- MetricsEvent.ACTION_SETTING_HELP_AND_FEEDBACK,
- intent.getStringExtra(EXTRA_CONTEXT));
- */
+ MetricsLogger.action(activity,
+ MetricsEvent.ACTION_SETTING_HELP_AND_FEEDBACK,
+ intent.getStringExtra(EXTRA_CONTEXT));
+ */
try {
activity.startActivityForResult(intent, 0);
} catch (ActivityNotFoundException exc) {
@@ -212,6 +225,7 @@
/**
* Adds two query parameters into the Uri, namely the language code and the version code
* of the app's package as gotten via the context.
+ *
* @return the uri with added query parameters
*/
private static Uri uriWithAddedParameters(Context context, Uri baseUri) {
diff --git a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractImsStatusPreferenceController.java b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractImsStatusPreferenceController.java
index a5f4036..4c3e605 100644
--- a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractImsStatusPreferenceController.java
+++ b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractImsStatusPreferenceController.java
@@ -44,7 +44,7 @@
private static final String[] CONNECTIVITY_INTENTS = {
BluetoothAdapter.ACTION_STATE_CHANGED,
ConnectivityManager.CONNECTIVITY_ACTION,
- WifiManager.LINK_CONFIGURATION_CHANGED_ACTION,
+ WifiManager.ACTION_LINK_CONFIGURATION_CHANGED,
WifiManager.NETWORK_STATE_CHANGED_ACTION,
};
diff --git a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractIpAddressPreferenceController.java b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractIpAddressPreferenceController.java
index 24da72e..3bb3a0c 100644
--- a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractIpAddressPreferenceController.java
+++ b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractIpAddressPreferenceController.java
@@ -42,7 +42,7 @@
private static final String[] CONNECTIVITY_INTENTS = {
ConnectivityManager.CONNECTIVITY_ACTION,
- WifiManager.LINK_CONFIGURATION_CHANGED_ACTION,
+ WifiManager.ACTION_LINK_CONFIGURATION_CHANGED,
WifiManager.NETWORK_STATE_CHANGED_ACTION,
};
diff --git a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractWifiMacAddressPreferenceController.java b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractWifiMacAddressPreferenceController.java
index 097c028..b5f275b 100644
--- a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractWifiMacAddressPreferenceController.java
+++ b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractWifiMacAddressPreferenceController.java
@@ -44,7 +44,7 @@
private static final String[] CONNECTIVITY_INTENTS = {
ConnectivityManager.CONNECTIVITY_ACTION,
- WifiManager.LINK_CONFIGURATION_CHANGED_ACTION,
+ WifiManager.ACTION_LINK_CONFIGURATION_CHANGED,
WifiManager.NETWORK_STATE_CHANGED_ACTION,
};
diff --git a/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java b/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java
index ea3c1d9..092cbf3 100644
--- a/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java
+++ b/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java
@@ -222,7 +222,8 @@
}
}
- return TelephonyManager.from(mContext).createForSubscriptionId(subscriptionId);
+ return mContext.getSystemService(
+ TelephonyManager.class).createForSubscriptionId(subscriptionId);
}
public void setMobileDataEnabled(boolean enabled) {
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index ab274b5..9518f5c 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
@@ -748,20 +748,7 @@
|| (mConfig != null && mConfig.shared != config.shared)) {
return false;
}
-
- final int configSecurity = getSecurity(config);
- final WifiManager wifiManager = getWifiManager();
- switch (security) {
- case SECURITY_PSK_SAE_TRANSITION:
- return configSecurity == SECURITY_PSK
- || (wifiManager.isWpa3SaeSupported() && configSecurity == SECURITY_SAE);
- case SECURITY_OWE_TRANSITION:
- return configSecurity == SECURITY_NONE
- || (wifiManager.isEnhancedOpenSupported()
- && configSecurity == SECURITY_OWE);
- default:
- return security == configSecurity;
- }
+ return security == getSecurity(config);
}
public WifiConfiguration getConfig() {
@@ -1334,34 +1321,10 @@
mAccessPointListener = listener;
}
- private static final String sPskSuffix = "," + String.valueOf(SECURITY_PSK);
- private static final String sSaeSuffix = "," + String.valueOf(SECURITY_SAE);
- private static final String sPskSaeSuffix = "," + String.valueOf(SECURITY_PSK_SAE_TRANSITION);
- private static final String sOweSuffix = "," + String.valueOf(SECURITY_OWE);
- private static final String sOpenSuffix = "," + String.valueOf(SECURITY_NONE);
- private static final String sOweTransSuffix = "," + String.valueOf(SECURITY_OWE_TRANSITION);
-
private boolean isKeyEqual(String compareTo) {
if (mKey == null) {
return false;
}
-
- if (compareTo.endsWith(sPskSuffix) || compareTo.endsWith(sSaeSuffix)) {
- if (mKey.endsWith(sPskSaeSuffix)) {
- // Special handling for PSK-SAE transition mode. If the AP has advertised both,
- // we compare the key with both PSK and SAE for a match.
- return TextUtils.equals(mKey.substring(0, mKey.lastIndexOf(',')),
- compareTo.substring(0, compareTo.lastIndexOf(',')));
- }
- }
- if (compareTo.endsWith(sOpenSuffix) || compareTo.endsWith(sOweSuffix)) {
- if (mKey.endsWith(sOweTransSuffix)) {
- // Special handling for OWE/Open networks. If AP advertises OWE in transition mode
- // and we have an Open network saved, allow this connection to be established.
- return TextUtils.equals(mKey.substring(0, mKey.lastIndexOf(',')),
- compareTo.substring(0, compareTo.lastIndexOf(',')));
- }
- }
return mKey.equals(compareTo);
}
@@ -1698,8 +1661,6 @@
private static int getSecurity(ScanResult result) {
if (result.capabilities.contains("WEP")) {
return SECURITY_WEP;
- } else if (result.capabilities.contains("PSK+SAE")) {
- return SECURITY_PSK_SAE_TRANSITION;
} else if (result.capabilities.contains("SAE")) {
return SECURITY_SAE;
} else if (result.capabilities.contains("PSK")) {
@@ -1708,8 +1669,6 @@
return SECURITY_EAP_SUITE_B;
} else if (result.capabilities.contains("EAP")) {
return SECURITY_EAP;
- } else if (result.capabilities.contains("OWE_TRANSITION")) {
- return SECURITY_OWE_TRANSITION;
} else if (result.capabilities.contains("OWE")) {
return SECURITY_OWE;
}
@@ -1756,10 +1715,6 @@
return "SUITE_B";
} else if (security == SECURITY_OWE) {
return "OWE";
- } else if (security == SECURITY_PSK_SAE_TRANSITION) {
- return "PSK+SAE";
- } else if (security == SECURITY_OWE_TRANSITION) {
- return "OWE_TRANSITION";
}
return "NONE";
}
@@ -1937,4 +1892,16 @@
}
}
}
+
+ /**
+ * Lets the caller know if the network was cloned from another network
+ *
+ * @return true if the network is cloned
+ */
+ public boolean isCloned() {
+ if (mConfig == null) {
+ return false;
+ }
+ return mConfig.clonedNetworkConfigKey != null;
+ }
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
index d3bab5f..97fddc0 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
@@ -180,7 +180,7 @@
filter.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION);
filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION);
- filter.addAction(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION);
+ filter.addAction(WifiManager.ACTION_LINK_CONFIGURATION_CHANGED);
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.RSSI_CHANGED_ACTION);
@@ -866,7 +866,7 @@
fetchScansAndConfigsAndUpdateAccessPoints();
} else if (WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION.equals(action)
- || WifiManager.LINK_CONFIGURATION_CHANGED_ACTION.equals(action)) {
+ || WifiManager.ACTION_LINK_CONFIGURATION_CHANGED.equals(action)) {
fetchScansAndConfigsAndUpdateAccessPoints();
} else if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
// TODO(sghuman): Refactor these methods so they cannot result in duplicate
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java
index 7fac812..942ee4f 100644
--- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java
@@ -902,7 +902,7 @@
tracker.mReceiver.onReceive(
mContext, new Intent(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION));
tracker.mReceiver.onReceive(
- mContext, new Intent(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION));
+ mContext, new Intent(WifiManager.ACTION_LINK_CONFIGURATION_CHANGED));
verify(mockWifiListener, never()).onAccessPointsChanged();
@@ -920,7 +920,7 @@
tracker.mReceiver.onReceive(
mContext, new Intent(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION));
tracker.mReceiver.onReceive(
- mContext, new Intent(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION));
+ mContext, new Intent(WifiManager.ACTION_LINK_CONFIGURATION_CHANGED));
verify(mockWifiListener, never()).onAccessPointsChanged();
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/HelpUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/HelpUtilsTest.java
index 4d76331..4811d950 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/HelpUtilsTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/HelpUtilsTest.java
@@ -16,11 +16,15 @@
package com.android.settingslib;
+import static com.android.settingslib.HelpUtils.MENU_HELP;
+
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.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -35,6 +39,7 @@
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.provider.Settings;
+import android.view.Menu;
import android.view.MenuItem;
import org.junit.Before;
@@ -171,4 +176,34 @@
verify(item).setVisible(true);
verify(item).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}
+
+ @Test
+ public void prepareHelpMenuItem_noItem_addItem() {
+ final Menu item = mock(Menu.class);
+ when(item.findItem(MENU_HELP)).thenReturn(null);
+ when(item.add(0, MENU_HELP, 0,
+ com.android.settingslib.widget.R.string.help_feedback_label)).thenReturn(
+ mock(MenuItem.class));
+
+ HelpUtils.prepareHelpMenuItem(mActivity, item, TEST_HELP_URL, "backup_url");
+ HelpUtils.prepareHelpMenuItem(mActivity, item, 0, "backup_url");
+
+ verify(item, times(2)).add(0, MENU_HELP, 0,
+ com.android.settingslib.widget.R.string.help_feedback_label);
+ }
+
+ @Test
+ public void prepareHelpMenuItem_hasItem_notAddItem() {
+ final Menu item = mock(Menu.class);
+ when(item.findItem(MENU_HELP)).thenReturn(mock(MenuItem.class));
+ when(item.add(0, MENU_HELP, 0,
+ com.android.settingslib.widget.R.string.help_feedback_label)).thenReturn(
+ mock(MenuItem.class));
+
+ HelpUtils.prepareHelpMenuItem(mActivity, item, TEST_HELP_URL, "backup_url");
+ HelpUtils.prepareHelpMenuItem(mActivity, item, 0, "backup_url");
+
+ verify(item, never()).add(0, MENU_HELP, 0,
+ com.android.settingslib.widget.R.string.help_feedback_label);
+ }
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/IpAddressPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/IpAddressPreferenceControllerTest.java
index 76a26d9..a83d7e0 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/IpAddressPreferenceControllerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/IpAddressPreferenceControllerTest.java
@@ -63,7 +63,7 @@
new ConcreteIpAddressPreferenceController(mContext, mLifecycle);
final List<String> expectedIntents = Arrays.asList(
ConnectivityManager.CONNECTIVITY_ACTION,
- WifiManager.LINK_CONFIGURATION_CHANGED_ACTION,
+ WifiManager.ACTION_LINK_CONFIGURATION_CHANGED,
WifiManager.NETWORK_STATE_CHANGED_ACTION);
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/WifiMacAddressPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/WifiMacAddressPreferenceControllerTest.java
index 7c2f0a8..40b9b13 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/WifiMacAddressPreferenceControllerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/WifiMacAddressPreferenceControllerTest.java
@@ -84,7 +84,7 @@
public void testHasIntentFilters() {
final List<String> expectedIntents = Arrays.asList(
ConnectivityManager.CONNECTIVITY_ACTION,
- WifiManager.LINK_CONFIGURATION_CHANGED_ACTION,
+ WifiManager.ACTION_LINK_CONFIGURATION_CHANGED,
WifiManager.NETWORK_STATE_CHANGED_ACTION);
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/net/DataUsageControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/net/DataUsageControllerTest.java
index 3da5e76..f7bee30 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/net/DataUsageControllerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/net/DataUsageControllerTest.java
@@ -75,7 +75,7 @@
public void setUp() throws RemoteException {
MockitoAnnotations.initMocks(this);
when(mTelephonyManager.createForSubscriptionId(anyInt())).thenReturn(mTelephonyManager);
- when(mContext.getSystemService(Context.TELEPHONY_SERVICE)).thenReturn(mTelephonyManager);
+ when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
when(mContext.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE))
.thenReturn(mSubscriptionManager);
when(mContext.getSystemService(NetworkStatsManager.class)).thenReturn(mNetworkStatsManager);
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index cd64a388..ab433d2 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -232,9 +232,6 @@
<!-- to read and change hvac values in a car -->
<uses-permission android:name="android.car.permission.CONTROL_CAR_CLIMATE" />
- <!-- to be able to detect the driving state in a car-->
- <uses-permission android:name="android.car.permission.CAR_DRIVING_STATE" />
-
<!-- Permission necessary to change car audio volume through CarAudioManager -->
<uses-permission android:name="android.car.permission.CAR_CONTROL_AUDIO_VOLUME" />
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 66a8ade..ed8117c 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Hou aan om kennisgewings van hierdie program af te wys?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Stil"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Waarskuwings"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Borrel"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Help jou om te fokus sonder klank of vibrasie."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Kry jou aandag met klank of vibrasie."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Hou jou aandag met \'n swewende kortpad na hierdie inhoud toe."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Hierdie kennisgewings kan nie gewysig word nie."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Hierdie groep kennisgewings kan nie hier opgestel word nie"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Instaanbediener-kennisgewing"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Maak toe"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Stelselnavigasie is opgedateer. Gaan na Instellings toe om veranderinge te maak."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Gaan na Instellings toe om stelselnavigasie op te dateer"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Bystandmodus"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Die Android TV-toestel gaan binnekort afskakel; druk \'n knoppie om dit aan te hou."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Die toestel gaan binnekort afskakel; druk om dit aan te hou."</string>
</resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 3f02c95..025031f 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ከዚህ መተግበሪያ ማሳወቂያዎችን ማሳየት ይቀጥል?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"ፀጥ ያለ"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"ማንቃት"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"አረፋ"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"ያለ ድምፅ ወይም ንዝረት እርስዎ ትኩረት እንዲያደርጉ ያግዛል።"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"ከድምፅ ወይም ንዝረት ጋር የእርስዎን ትኩረት ይስባል።"</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"ለዚህ ይዞታ ከተንሳፋፊ አቋራጭ ጋር የእርስዎን ትኩረት ያቆያል።"</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"እነዚህ ማሳወቂያዎች ሊሻሻሉ አይችሉም።"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"የማሳወቂያዎች ይህ ቡድን እዚህ ላይ ሊዋቀር አይችልም"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"ተኪ ማሳወቂያ"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"አሰናብት"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"የስርዓት ዳሰሳ ተዘምኗል። ለውጦችን ለማድረግ ወደ ቅንብሮች ይሂዱ።"</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"የስርዓት ዳሰሳን ለማዘመን ወደ ቅንብሮች ይሂዱ"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"ተጠባባቂ"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"የAndroid TV መሣሪያው በቅርቡ ይጠፋል፣ እንደበራ ለማቆየት ይጫኑ።"</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"መሣሪያው በቅርቡ ይጠፋል፤ እንደበራ ለማቆየት ይጫኑ።"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 8c765ac..767343b 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -673,8 +673,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"هل تريد الاستمرار في تلقي إشعارات من هذا التطبيق؟"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"إشعار صامت"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"إشعار مصحوب بتنبيه صوتي"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"يساعدك هذا الإشعار على التركيز بدون صوت أو اهتزاز."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"يلفت هذا الإشعار انتباهك باستخدام الصوت والاهتزاز."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"يتعذّر تعديل هذه الإشعارات."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"يتعذّر ضبط مجموعة الإشعارات هذه هنا."</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"إشعار مستند إلى خادم وكيل"</string>
@@ -966,4 +970,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"تجاهل"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"تم تحديث التنقل داخل النظام. لإجراء التغييرات، يُرجى الانتقال إلى \"الإعدادات\"."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"الانتقال إلى \"الإعدادات\" لتعديل التنقل داخل النظام"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"وضع الاستعداد"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"سيتم إيقاف جهاز Android TV قريبًا، اضغط على أحد الأزرار لمواصلة تشغيله."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"سيتم إيقاف الجهاز قريبًا، اضغط لمواصلة تشغيله."</string>
</resources>
diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml
index 87be3eb..3197d4f 100644
--- a/packages/SystemUI/res/values-as/strings.xml
+++ b/packages/SystemUI/res/values-as/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"এই এপটোৰ জাননী দেখুওৱাই থাকিব লাগিবনে?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"নীৰৱ"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"সতৰ্ক কৰক"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"কোনো ধ্বনি অথবা কম্পন অবিহনে আপোনাক মনোযোগ দিয়াত সহায় কৰে।"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"ধ্বনি অথবা কম্পনৰ জৰিয়তে আপোনাৰ মনোযোগ আকৰ্ষণ কৰে।"</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"এই জাননীসমূহ সংশোধন কৰিব নোৱাৰি।"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"এই ধৰণৰ জাননীবোৰ ইয়াত কনফিগাৰ কৰিব পৰা নাযায়"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"প্ৰক্সি হিচাপে পঠিওৱা জাননী"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"অগ্ৰাহ্য কৰক"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"ছিষ্টেম নেভিগেশ্বন আপডে’ট কৰা হ’ল। সলনি কৰিবলৈ ছেটিংসমূহ-লৈ যাওক।"</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"ছিষ্টেম নেভিগেশ্বন আপডে’ট কৰিবলৈ ছেটিংসমূহ-লৈ যাওক"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"ষ্টেণ্ডবাই"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV ডিভাইচটো অতি সোনকালে অফ হ\'ব, এইটো অন ৰাখিবলৈ যিকোনো এটা বুটাম টিপক।"</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"এই ডিভাইচটো অতি সোনকালে অফ হ\'ব, এইটো অন ৰাখিবলৈ টিপক।"</string>
</resources>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index a756ac0..6ad64be 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Bu tətbiqin bildirişləri göstərilməyə davam edilsin?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Səssiz"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Siqnal"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Səs və ya vibrasiya olmadan fokuslanmağınıza kömək edir."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Səs və ya vibrasiya ilə diqqətinizi çəkir."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Bu bildirişlər dəyişdirilə bilməz."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Bu bildiriş qrupunu burada konfiqurasiya etmək olmaz"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Proksi bildirişi"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Kənarlaşdırın"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Sistem naviqasiyası yeniləndi. Dəyişiklik etmək üçün Ayarlara daxil olun."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Sistem naviqasiyasını yeniləmək üçün Ayarlara keçin"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Gözləmə rejimi"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV cihazı tezliklə sönəcək; aktiv saxlamaq üçün düyməyə basın."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Cihaz tezliklə sönəcək; aktiv saxlamaq üçün basın."</string>
</resources>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index a3232e1..1bc7121 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -664,8 +664,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Želite li da se obaveštenja iz ove aplikacije i dalje prikazuju?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Nečujno"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Upozoravanje"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Oblačić"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Pomaže vam da se koncentrišete bez zvuka ili vibracije."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Privlači vam pažnju pomoću zvuka ili vibracije."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Privlači vam pažnju pomoću plutajuće prečice do ovog sadržaja."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Ova obaveštenja ne mogu da se menjaju."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Ova grupa obaveštenja ne može da se konfiguriše ovde"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Obaveštenje preko proksija"</string>
@@ -951,4 +953,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Odbaci"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Navigacija sistema je ažurirana. Da biste uneli izmene, idite u Podešavanja."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Idite u Podešavanja da biste ažurirali navigaciju sistema"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Stanje pripravnosti"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV će se uskoro isključiti. Pritisnite dugme da bi ostao uključen."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Uređaj će se uskoro isključiti. Pritisnite da bi ostao uključen."</string>
</resources>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index ec90354..52d2848 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -669,8 +669,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Працягваць паказваць апавяшчэнні гэтай праграмы?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Бязгучны рэжым"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Абвесткі"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Не адцягвае ўвагу дзякуючы выключаным гуку і вібрацыі."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Прыцягвае ўвагу гукам і вібрацыяй."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Гэтыя апавяшчэнні нельга змяніць."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Тут канфігурыраваць гэту групу апавяшчэнняў забаронена"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Праксіраванае апавяшчэнне"</string>
@@ -958,4 +962,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Адхіліць"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Навігацыя ў сістэме абноўлена. Каб унесці змяненні, перайдзіце ў Налады."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Перайдзіце ў Налады, каб абнавіць параметры навігацыі ў сістэме"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Рэжым чакання"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Прылада Android TV неўзабаве выключыцца. Каб пакінуць яе ўключанай, націсніце кнопку."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Прылада неўзабаве выключыцца. Націсніце, каб пакінуць яе ўключанай."</string>
</resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 856c020..5429f84 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Да продължат ли да се показват известията от това приложение?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Тих режим"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Сигнализиране"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Помага ви да се фокусирате без звук или вибриране."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Привлича вниманието ви със звук или вибриране."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Тези известия не могат да бъдат променяни."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Тази група от известия не може да бъде конфигурирана тук"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Известие, получено чрез делегиране"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Отхвърляне"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Режимът за навигиране в системата е актуализиран. За да извършите промени, отворете настройките."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Отворете настройките, за да актуализирате режима за навигиране в системата"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Режим на готовност"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Устройството с Android TV скоро ще се изключи. Натиснете бутон, за да остане включено."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Устройството скоро ще се изключи. Натиснете, за да остане включено."</string>
</resources>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index 7c3f250f..0aa4ee9 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"এই অ্যাপের বিজ্ঞপ্তি পরেও দেখে যেতে চান?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"সাইলেন্ট"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"সতর্ক করুন"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"সাউন্ড বা ভাইব্রেশন ছাড়া ফোকাস করতে আপনাকে সাহায্য করে।"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"সাউন্ড বা ভাইব্রেশনের সাহায্যে দৃষ্টি আকর্ষণ করে।"</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"এই বিজ্ঞপ্তিগুলি পরিবর্তন করা যাবে না।"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"এই সমস্ত বিজ্ঞপ্তিকে এখানে কনফিগার করা যাবে না"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"প্রক্সি করা বিজ্ঞপ্তি"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"খারিজ করুন"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"সিস্টেম নেভিগেশন আপডেট হয়েছে। পরিবর্তন করার জন্য সেটিংসে যান।"</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"সিস্টেম নেভিগেশন আপডেট করতে সেটিংসে যান"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"স্ট্যান্ডবাই"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV ডিভাইস শীঘ্রই বন্ধ হয়ে যাবে, চালু রাখতে বোতাম প্রেস করুন।"</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"ডিভাইস শীঘ্রই বন্ধ হয়ে যাবে, চালু রাখতে প্রেস করুন।"</string>
</resources>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index 62cb309..a97e463 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -666,8 +666,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Nastaviti prikazivanje obavještenja iz ove aplikacije?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Nečujno"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Upozorenja"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Oblačić"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Pomaže vam da se koncentrirate bez zvuka ili vibracije."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Privlači vašu pažnju pomoću zvuka ili vibracije."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Privlači vašu pažnju pomoću plutajuće prečice do ovog sadržaja."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Ta obavještenja se ne mogu izmijeniti."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Ovdje nije moguće konfigurirati ovu grupu obavještenja"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Obavještenje preko proksi servera"</string>
@@ -953,4 +955,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Odbaci"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Navigiranje sistemom je ažurirano. Da izvršite promjene, idite u Postavke."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Idite u Postavke da ažurirate navigiranje sistemom"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Stanje mirovanja"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV uređaj će se uskoro isključiti. Pritisnite dugme da ostane uključen."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Uređaj će se uskoro isključiti. Pritisnite da ostane uključen."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 18dbd2c..4f65a6e 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Vols continuar rebent notificacions d\'aquesta aplicació?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Silenci"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Alertes"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Bombolla"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"T\'ajuda a concentrar-te sense so ni vibració."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Atrau la teva atenció amb so i vibració."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Atrau la teva atenció amb una drecera flotant a aquest contingut."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Aquestes notificacions no es poden modificar."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Aquest grup de notificacions no es pot configurar aquí"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Notificació mitjançant aplicació intermediària"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Omet"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"S\'ha actualitzat el sistema de navegació. Per fer canvis, ves a Configuració."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Ves a Configuració per actualitzar el sistema de navegació"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"En espera"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"El dispositiu Android TV s\'apagarà aviat; prem un botó per mantenir-lo encès."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"El dispositiu s\'apagarà aviat; prem per mantenir-lo encès."</string>
</resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 68800f0..803d576 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -667,8 +667,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Mají se oznámení z této aplikace nadále zobrazovat?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Ticho"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Upozornění"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Pomáhá vám soustředit se vypnutím zvuku a vibrací."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Upozorňuje vás pomocí zvuku a vibrací."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Tato oznámení nelze upravit."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Tuto skupinu oznámení tady nelze nakonfigurovat"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Zprostředkované oznámení"</string>
@@ -956,4 +960,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Zavřít"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Systémová navigace byla aktualizována. Chcete-li provést změny, přejděte do Nastavení."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Přejděte do Nastavení a aktualizujte systémovou navigaci"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Pohotovostní režim"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Zařízení Android TV se brzy vypne, stisknutím tlačítka ho ponecháte zapnuté."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Zařízení se brzy vypne, stisknutím ho ponecháte zapnuté."</string>
</resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index d3dbc6e..7b33b32 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Vil du fortsætte med at se notifikationer fra denne app?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Lydløs"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Underretninger"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Boble"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Ingen lyde eller vibrationer, der forstyrrer dig."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Fanger din opmærksomhed med lyd eller vibration."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Fastholder din opmærksomhed med en svævende genvej til indholdet."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Disse notifikationer kan ikke redigeres."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Du kan ikke konfigurere denne gruppe notifikationer her"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Proxyforbundet notifikation"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Afvis"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Systemnavigationen blev opdateret. Gå til Indstillinger for at foretage ændringer."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Gå til Indstillinger for at opdatere systemnavigationen"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Standby"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV-enheden slukker snart. Tryk på en knap for at holde den tændt."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Enheden slukker snart. Tryk for at holde den tændt."</string>
</resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 15f7876..46d36b2 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -665,8 +665,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Benachrichtigungen dieser App weiterhin anzeigen?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Lautlos"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Benachrichtigen"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Benachrichtigungen werden ohne Ton oder Vibration angekündigt, um deine Konzentration nicht zu stören."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Benachrichtigungen werden mit einem Ton oder einer Vibration angekündigt."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Diese Benachrichtigungen können nicht geändert werden."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Die Benachrichtigungsgruppe kann hier nicht konfiguriert werden"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Weitergeleitete Benachrichtigung"</string>
@@ -950,4 +954,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Schließen"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Systemsteuerungseinstellungen wurden angepasst. Änderungen kannst du in den Einstellungen vornehmen."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Gehe zu den Einstellungen, um die Systemsteuerung anzupassen"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Standby"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Das Android TV-Gerät wird demnächst abgeschaltet. Drücke eine Taste, damit es eingeschaltet bleibt."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Das Gerät wird demnächst abgeschaltet. Drücke beispielsweise eine Taste oder berühre den Bildschirm, damit es eingeschaltet bleibt."</string>
</resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index d30aec9..ebfc0eb 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Να συνεχίσουν να εμφανίζονται ειδοποιήσεις από αυτήν την εφαρμογή;"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Σίγαση"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Ειδοποίηση"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Φούσκα"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Σας βοηθά να συγκεντρωθείτε χωρίς ήχο και δόνηση."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Τραβά την προσοχή σας με ήχο ή δόνηση."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Κρατάει την προσοχή σας με μια κινούμενη συντόμευση προς αυτό το περιεχόμενο."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Δεν είναι δυνατή η τροποποίηση αυτών των ειδοποιήσεων"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Δεν είναι δυνατή η διαμόρφωση αυτής της ομάδας ειδοποιήσεων εδώ"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Ειδοποίηση μέσω διακομιστή μεσολάβησης"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Παράβλεψη"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Η πλοήγηση συστήματος ενημερώθηκε. Για να κάνετε αλλαγές, μεταβείτε στις Ρυθμίσεις."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Μεταβείτε στις Ρυθμίσεις για να ενημερώσετε την πλοήγηση συστήματος"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Κατάσταση αναμονής"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Η συσκευή Android TV σύντομα θα απενεργοποιηθεί. Πατήστε ένα κουμπί για να την κρατήσετε ενεργοποιημένη."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Η συσκευή σύντομα θα απενεργοποιηθεί. Πατήστε για να την κρατήσετε ενεργοποιημένη."</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index 1e50b5a..c7c5833 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Keep showing notifications from this app?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Silent"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Alerting"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Bubble"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Helps you focus without sound or vibration."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Gets your attention with sound or vibration."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Keeps your attention with a floating shortcut to this content."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"These notifications can\'t be modified."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"This group of notifications cannot be configured here"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Proxied notification"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Dismiss"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"System navigation updated. To make changes, go to Settings."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Go to Settings to update system navigation"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Standby"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"The Android TV device will soon turn off; press a button to keep it on."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"The device will soon turn off; press to keep it on."</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml
index b2a6e6a..c89abab 100644
--- a/packages/SystemUI/res/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Keep showing notifications from this app?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Silent"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Alerting"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Bubble"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Helps you focus without sound or vibration."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Gets your attention with sound or vibration."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Keeps your attention with a floating shortcut to this content."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"These notifications can\'t be modified."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"This group of notifications cannot be configured here"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Proxied notification"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Dismiss"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"System navigation updated. To make changes, go to Settings."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Go to Settings to update system navigation"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Standby"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"The Android TV device will soon turn off; press a button to keep it on."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"The device will soon turn off; press to keep it on."</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 1e50b5a..c7c5833 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Keep showing notifications from this app?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Silent"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Alerting"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Bubble"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Helps you focus without sound or vibration."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Gets your attention with sound or vibration."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Keeps your attention with a floating shortcut to this content."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"These notifications can\'t be modified."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"This group of notifications cannot be configured here"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Proxied notification"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Dismiss"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"System navigation updated. To make changes, go to Settings."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Go to Settings to update system navigation"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Standby"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"The Android TV device will soon turn off; press a button to keep it on."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"The device will soon turn off; press to keep it on."</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 1e50b5a..c7c5833 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Keep showing notifications from this app?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Silent"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Alerting"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Bubble"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Helps you focus without sound or vibration."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Gets your attention with sound or vibration."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Keeps your attention with a floating shortcut to this content."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"These notifications can\'t be modified."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"This group of notifications cannot be configured here"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Proxied notification"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Dismiss"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"System navigation updated. To make changes, go to Settings."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Go to Settings to update system navigation"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Standby"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"The Android TV device will soon turn off; press a button to keep it on."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"The device will soon turn off; press to keep it on."</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml
index 568fdb5..a561001 100644
--- a/packages/SystemUI/res/values-en-rXC/strings.xml
+++ b/packages/SystemUI/res/values-en-rXC/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Keep showing notifications from this app?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Silent"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Alerting"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Bubble"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Helps you focus without sound or vibration."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Gets your attention with sound or vibration."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Keeps your attention with a floating shortcut to this content."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"These notifications can\'t be modified."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"This group of notifications cannot be configured here"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Proxied notification"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Dismiss"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"System navigation updated. To make changes, go to Settings."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Go to Settings to update system navigation"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Standby"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"The Android TV device will soon turn off; press a button to keep it on."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"The device will soon turn off; press to keep it on."</string>
</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 46b402e..bc51e06 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"¿Quieres seguir viendo las notificaciones de esta app?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Silencio"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Alertas"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Cuadro"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Te ayuda a concentrarte sin sonar ni vibrar."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Capta tu atención con sonido o vibración."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Retiene tu atención con un acceso directo flotante a este contenido."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"No se pueden modificar estas notificaciones."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"No se puede configurar aquí este grupo de notificaciones"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Notificación almacenada en proxy"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Ignorar"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Se actualizó el sistema de navegación. Para hacer cambios, ve a Configuración."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Ve a Configuración para actualizar la navegación del sistema"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"En espera"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Pronto se apagará el dispositivo Android TV; presiona un botón para mantenerlo encendido."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Pronto se apagará el dispositivo; presiona para mantenerlo encendido."</string>
</resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index d45bf9f..99fac8c 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"¿Quieres seguir viendo las notificaciones de esta aplicación?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Silencio"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Alertas"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Burbuja"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Te ayuda a concentrarte sin sonido ni vibración."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Llama tu atención con sonido o vibración."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Llama tu atención con un acceso directo flotante a este contenido."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Estas notificaciones no se pueden modificar."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Este grupo de notificaciones no se puede configurar aquí"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Notificación mediante proxy"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Cerrar"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Se ha actualizado la navegación del sistema. Para hacer cambios, ve a Ajustes."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Ve a Ajustes para actualizar la navegación del sistema"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"En espera"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"El dispositivo Android TV pronto se apagará; pulsa un botón para evitarlo."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"El dispositivo pronto se apagará si no interactúas con él."</string>
</resources>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index 3f7c835..b2b7152 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Kas jätkata selle rakenduse märguannete kuvamist?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Hääletu"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Teavitamine"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Aitab teil keskenduda (heli või vibreerimine puudub)."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Haarab heli või vibreerimisega teie tähelepanu."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Neid märguandeid ei saa muuta."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Seda märguannete rühma ei saa siin seadistada"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Puhvriga märguanne"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Loobu"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Süsteemis navigeerimine on värskendatud. Muutmiseks avage jaotis Seaded."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Süsteemi navigeerimise värskendamiseks avage jaotis Seaded"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Ooterežiim"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV seade lülitub varsti välja; selle aktiivsena hoidmiseks vajutage nuppu."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Seade lülitub värsti välja; selle aktiivsena hoidmiseks vajutage nuppu."</string>
</resources>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index 841abde..4eb57db 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -239,9 +239,9 @@
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Hegaldi modua aktibatu egin da."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="2960643943620637020">"isiltasun osoa"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="3357131899365865386">"alarmak soilik"</string>
- <string name="accessibility_quick_settings_dnd" msgid="5555155552520665891">"Ez molestatu."</string>
- <string name="accessibility_quick_settings_dnd_changed_off" msgid="2757071272328547807">"Desaktibatu egin da \"Ez molestatu\" eginbidea."</string>
- <string name="accessibility_quick_settings_dnd_changed_on" msgid="6808220653747701059">"Aktibatu egin da \"Ez molestatu\" modua."</string>
+ <string name="accessibility_quick_settings_dnd" msgid="5555155552520665891">"Ez molestatzeko modua."</string>
+ <string name="accessibility_quick_settings_dnd_changed_off" msgid="2757071272328547807">"Desaktibatu egin da ez molestatzeko modua."</string>
+ <string name="accessibility_quick_settings_dnd_changed_on" msgid="6808220653747701059">"Aktibatu egin da ez molestatzeko modua."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"Bluetooth-a."</string>
<string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth konexioa desaktibatuta dago."</string>
<string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth konexioa aktibatuta dago."</string>
@@ -306,7 +306,7 @@
<string name="start_dreams" msgid="5640361424498338327">"Pantaila-babeslea"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
<string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Aukera gehiago ikusteko, eduki sakatuta ikonoak"</string>
- <string name="quick_settings_dnd_label" msgid="7112342227663678739">"Ez molestatu"</string>
+ <string name="quick_settings_dnd_label" msgid="7112342227663678739">"Ez molestatzeko modua"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Lehentasunezkoak soilik"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alarmak soilik"</string>
<string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Isiltasun osoa"</string>
@@ -469,7 +469,7 @@
<string name="manage_notifications_text" msgid="2386728145475108753">"Kudeatu"</string>
<string name="notification_section_header_gentle" msgid="4372438504154095677">"Soinurik gabeko jakinarazpenak"</string>
<string name="accessibility_notification_section_header_gentle_clear_all" msgid="4286716295850400959">"Garbitu soinurik gabeko jakinarazpen guztiak"</string>
- <string name="dnd_suppressing_shade_text" msgid="1904574852846769301">"\"Ez molestatu\" moduak pausatu egin ditu jakinarazpenak"</string>
+ <string name="dnd_suppressing_shade_text" msgid="1904574852846769301">"Ez molestatzeko moduak pausatu egin ditu jakinarazpenak"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Hasi"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Ez dago jakinarazpenik"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Baliteke profila kontrolatuta egotea"</string>
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Aplikazio honen jakinarazpenak erakusten jarraitzea nahi duzu?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Isila"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Ohartarazlea"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Burbuila"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Ez du egiten soinu edo dardararik, arretarik gal ez dezazun."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Arreta erakartzen du soinua eta dardara eginda."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Eduki honetarako lasterbide gainerakor bat eskaintzen dizu, arretarik gal ez dezazun."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Jakinarazpen horiek ezin dira aldatu."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Jakinarazpen talde hau ezin da konfiguratu hemen"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Proxy bidezko jakinarazpena"</string>
@@ -745,9 +747,9 @@
<string name="keyboard_shortcut_group_applications_youtube" msgid="6555453761294723317">"YouTube"</string>
<string name="keyboard_shortcut_group_applications_calendar" msgid="9043614299194991263">"Calendar"</string>
<string name="tuner_full_zen_title" msgid="4540823317772234308">"Erakutsi bolumena kontrolatzeko aukerekin"</string>
- <string name="volume_and_do_not_disturb" msgid="1750270820297253561">"Ez molestatu"</string>
+ <string name="volume_and_do_not_disturb" msgid="1750270820297253561">"Ez molestatzeko modua"</string>
<string name="volume_dnd_silent" msgid="4363882330723050727">"Bolumen-botoietarako lasterbidea"</string>
- <string name="volume_up_silent" msgid="7545869833038212815">"Irten \"Ez molestatu\" egoeratik bolumena igotzean"</string>
+ <string name="volume_up_silent" msgid="7545869833038212815">"Irten ez molestatzeko modutik bolumena igotzean"</string>
<string name="battery" msgid="7498329822413202973">"Bateria"</string>
<string name="clock" msgid="7416090374234785905">"Erlojua"</string>
<string name="headset" msgid="4534219457597457353">"Mikrofonodun entzungailua"</string>
@@ -891,10 +893,10 @@
<string name="mobile_carrier_text_format" msgid="3241721038678469804">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g> (<xliff:g id="MOBILE_DATA_TYPE">%2$s</xliff:g>)"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi konexioa desaktibatuta dago"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth konexioa desaktibatuta dago"</string>
- <string name="dnd_is_off" msgid="6167780215212497572">"\"Ez molestatu\" modua desaktibatuta dago"</string>
- <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"\"Ez molestatu\" modua aktibatu du arau automatiko batek (<xliff:g id="ID_1">%s</xliff:g>)."</string>
- <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"\"Ez molestatu\" modua aktibatu du aplikazio batek (<xliff:g id="ID_1">%s</xliff:g>)."</string>
- <string name="qs_dnd_prompt_auto_rule_app" msgid="2599343675391111951">"\"Ez molestatu\" modua aktibatu du arau automatiko edo aplikazio batek."</string>
+ <string name="dnd_is_off" msgid="6167780215212497572">"Ez molestatzeko modua desaktibatuta dago"</string>
+ <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"Ez molestatzeko modua aktibatu du arau automatiko batek (<xliff:g id="ID_1">%s</xliff:g>)."</string>
+ <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"Ez molestatzeko modua aktibatu du aplikazio batek (<xliff:g id="ID_1">%s</xliff:g>)."</string>
+ <string name="qs_dnd_prompt_auto_rule_app" msgid="2599343675391111951">"Ez molestatzeko modua aktibatu du arau automatiko edo aplikazio batek."</string>
<string name="qs_dnd_until" msgid="3469471136280079874">"<xliff:g id="ID_1">%s</xliff:g> arte"</string>
<string name="qs_dnd_keep" msgid="1825009164681928736">"Utzi bere horretan"</string>
<string name="qs_dnd_replace" msgid="8019520786644276623">"Ordeztu"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Baztertu"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Eguneratu da sistemaren nabigazioa. Aldaketak egiteko, joan Ezarpenak atalera."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Sistemaren nabigazioa eguneratzeko, joan Ezarpenak atalera"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Egonean"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV gailua laster itzaliko da; sakatu botoi bat piztuta mantentzeko."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Gailua laster itzaliko da; sakatu piztuta mantentzeko."</string>
</resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 4f04220..5b7ab56 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"نمایش اعلان از این برنامه ادامه یابد؟"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"بیصدا"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"هشدار دادن"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"حباب"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"به شما کمک میکند بدون صدا یا لرزش تمرکز کنید."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"با صدا یا لرزش توجه شما را جلب میکند."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"با میانبری شناور به این محتوا، توجهتان را جلب میکند."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"این اعلانها قابل اصلاح نیستند."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"نمیتوانید این گروه اعلانها را در اینجا پیکربندی کنید"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"اعلانهای دارای پراکسی"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"رد کردن"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"پیمایش سیستم بهروزرسانی شد. برای انجام تغییرات به «تنظیمات» بروید."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"برای بهروزرسانی پیمایش سیستم، به «تنظیمات» بروید"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"آمادهبهکار"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"دستگاه Android TV بهزودی خاموش میشود، برای روشن نگهداشتن آن، دکمهای را فشار دهید."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"دستگاه بهزودی خاموش میشود، برای روشن نگهداشتن آن فشار دهید."</string>
</resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 63bc925..30e687c 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Jatketaanko ilmoitusten näyttämistä tästä sovelluksesta?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Äänetön"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Hälyttää"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Kupla"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Keskittyminen on helpompaa ilman ääntä tai värinää."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Kiinnittää huomion äänellä tai värinällä"</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Kelluva sisällön pikakuvake säilyttää huomiosi"</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Näitä ilmoituksia ei voi muokata"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Tätä ilmoitusryhmää ei voi määrittää tässä"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Välitetty ilmoitus"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Ohita"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Järjestelmän navigointitapa vaihdettu. Voit muuttaa sitä asetuksista."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Vaihda järjestelmän navigointitapaa asetuksista"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Virransäästötila"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV ‑laite sammuu pian. Pidä se päällä painamalla painiketta."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Laite sammuu pian. Pidä se päällä painamalla jotakin."</string>
</resources>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index df8b8e4..205cf27 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Continuer à afficher les notifications de cette application?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Mode silencieux"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Alertes"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Vous aider à vous concentrer, sans son ni vibration."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Attire votre attention à l\'aide de sons et de vibrations."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Ces notifications ne peuvent pas être modifiées"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Ce groupe de notifications ne peut pas être configuré ici"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Notification par mandataire"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Fermer"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"La navigation système a été mise à jour. Pour apporter des modifications, accédez au menu Paramètres."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Accédez au menu Paramètres pour mettre à jour la navigation système"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Veille"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"L\'appareil Android TV va bientôt s\'éteindre. Appuyez sur un bouton pour le laisser allumé."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"L\'appareil va bientôt s\'éteindre. Interagissez avec lui pour le laisser allumé."</string>
</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 90a6987..9fdda0c 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Continuer d\'afficher les notifications de cette application ?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Silencieux"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Alertes"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Sans sons ni vibrations, vous aide à vous concentrer."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Attire votre attention à l\'aide de sons ou de vibrations."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Impossible de modifier ces notifications."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Vous ne pouvez pas configurer ce groupe de notifications ici"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Notification de proxy"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Ignorer"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Navigation système mise à jour. Pour apporter des modifications, accédez aux paramètres."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Accédez aux paramètres pour mettre à jour la navigation système"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Mode Veille imminent"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"L\'appareil Android TV va bientôt passer en mode Veille. Appuyez sur un bouton pour qu\'il reste allumé."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"L\'appareil va bientôt passer en mode Veille. Appuyez dessus pour qu\'il reste allumé."</string>
</resources>
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index a029e19..9edaf5d 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Queres seguir mostrando as notificacións desta aplicación?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Silenciosas"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Con alertas"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Axúdache a centrarte sen son nin vibración."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Chama a túa atención con son ou vibración."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Estas notificacións non se poden modificar."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Aquí non se pode configurar este grupo de notificacións"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Notificación mediante proxy"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Ignorar"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Actualizouse a navegación do sistema. Para facer cambios, vai a Configuración."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Para actualizar a navegación do sistema, vai a Configuración"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Modo de espera"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Pronto se apagará o dispositivo Android TV. Preme un botón para mantelo acendido."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Pronto se apagará o teléfono. Tócao para mantelo acendido."</string>
</resources>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index 95d7f41..79d67a1 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"આ ઍપમાંથી નોટિફિકેશન બતાવવાનું ચાલુ રાખીએ?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"સાઇલન્ટ"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"અલર્ટ કરવાનું ચાલુ રાખો"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"તમને સાઉન્ડ અથવા વાઇબ્રેશન વિના ફોકસ કરવામાં સહાય કરે છે."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"સાઉન્ડ અથવા વાઇબ્રેશન વિના તમારું ધ્યાન દોરે છે."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"આ નોટિફિકેશનમાં કોઈ ફેરફાર થઈ શકશે નહીં."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"નોટિફિકેશનના આ ગ્રૂપની ગોઠવણી અહીં કરી શકાશે નહીં"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"પ્રૉક્સી નોટિફિકેશન"</string>
@@ -846,7 +850,7 @@
<string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"છોડી દેવા માટે નીચે ખેંચો"</string>
<string name="pip_menu_title" msgid="4707292089961887657">"મેનૂ"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ચિત્રમાં-ચિત્રની અંદર છે"</string>
- <string name="pip_notification_message" msgid="5619512781514343311">"જો તમે નથી ઈચ્છતા કે <xliff:g id="NAME">%s</xliff:g> આ સુવિધાનો ઉપયોગ કરે, તો સેટિંગ્સ ખોલવા માટે ટૅપ કરો અને તે સુવિધાને બંધ કરો."</string>
+ <string name="pip_notification_message" msgid="5619512781514343311">"જો તમે નથી ઇચ્છતા કે <xliff:g id="NAME">%s</xliff:g> આ સુવિધાનો ઉપયોગ કરે, તો સેટિંગ ખોલવા માટે ટૅપ કરો અને તેને બંધ કરો."</string>
<string name="pip_play" msgid="1417176722760265888">"ચલાવો"</string>
<string name="pip_pause" msgid="8881063404466476571">"થોભાવો"</string>
<string name="pip_skip_to_next" msgid="1948440006726306284">"આગલા પર જાઓ"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"છોડી દો"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"સિસ્ટમ નૅવિગેશન અપડેટ કર્યું. ફેરફારો કરવા માટે, સેટિંગ પર જાઓ."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"સિસ્ટમ નૅવિગેશનને અપડેટ કરવા માટે સેટિંગ પર જાઓ"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"સ્ટૅન્ડબાય"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android ટીવી ડિવાઇસ ટૂંક સમયમાં બંધ થશે; તેને ચાલુ રાખવા માટે બટન દબાવો."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"ડિવાઇસ ટૂંક સમયમાં બંધ થશે; તેને ચાલુ રાખવા માટે દબાવો."</string>
</resources>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 4c6edc1..aa163ab 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"इस ऐप्लिकेशन से जुड़ी सूचनाएं दिखाना जारी रखें?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"आवाज़ के बिना सूचनाएं दिखाएं"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"चेतावनी वाली सूचनाएं"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"आवाज़ या वाइब्रेशन न होने की वजह से आप काम में ध्यान लगा पाते हैं."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"आवाज़ या वाइब्रेशन होने की वजह से आपका ध्यान सूचनाओं पर जाता है."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"ये सूचनाएं नहीं बदली जा सकती हैं."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"सूचनाओं के इस समूह को यहां कॉन्फ़िगर नहीं किया जा सकता"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"प्रॉक्सी सूचना"</string>
@@ -845,7 +849,7 @@
<string name="pip_phone_settings" msgid="8080777499521528521">"सेटिंग"</string>
<string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"खारिज करने के लिए नीचे खींचें और छोड़ें"</string>
<string name="pip_menu_title" msgid="4707292089961887657">"मेन्यू"</string>
- <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> पिक्चर में पिक्चर के अंदर है"</string>
+ <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> \"पिक्चर में पिक्चर\" के अंदर है"</string>
<string name="pip_notification_message" msgid="5619512781514343311">"अगर आप नहीं चाहते कि <xliff:g id="NAME">%s</xliff:g> इस सुविधा का उपयोग करे, तो सेटिंग खोलने के लिए टैप करें और उसे बंद करें ."</string>
<string name="pip_play" msgid="1417176722760265888">"चलाएं"</string>
<string name="pip_pause" msgid="8881063404466476571">"रोकें"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"खारिज करें"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"सिस्टम नेविगेशन अपडेट हो गया. बदलाव करने के लिए \'सेटिंग\' पर जाएं."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"सिस्टम नेविगेशन अपडेट करने के लिए \'सेटिंग\' में जाएं"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"स्टैंडबाई"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV डिवाइस जल्द ही बंद हो जाएगा. इसे चालू रखने के लिए किसी बटन को दबाएं."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"डिवाइस जल्द ही बंद हो जाएगा. इसे चालू रखने के लिए स्क्रीन पर टैप करें या किसी बटन को दबाएं."</string>
</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index e633878..4943dc6 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -664,8 +664,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Želite li da se obavijesti te aplikacije nastave prikazivati?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Bešumno"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Upozoravanje"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Oblačić"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Pomaže vam da se usredotočite bez zvučnih signala i vibracija."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Privlači vašu pažnju zvučnim signalima ili vibracijama."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Održava vam pozornost pomoću plutajućeg prečaca ovom sadržaju."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Te se obavijesti ne mogu izmijeniti."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Ta se grupa obavijesti ne može konfigurirati ovdje"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Obavijest poslana putem proxyja"</string>
@@ -951,4 +953,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Odbaci"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Ažurirana je navigacija sustavom. Možete je promijeniti u Postavkama."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Navigaciju sustavom možete ažurirati u Postavkama"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Stanje mirovanja"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Uređaj Android TV uskoro će se isključiti. Pritisnite gumb da bi ostao uključen."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Uređaj će se uskoro isključiti. Pritisnite da bi ostao uključen."</string>
</resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 299e318..f2233cd 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Továbbra is megjelenjenek az alkalmazás értesítései?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Néma"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Figyelemfelkeltő"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Hangjelzés és rezgés nélkül segít a koncentrálásban."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Figyelemfelkeltő a hangjelzésnek és rezgésnek köszönhetően."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Ezeket az értesítéseket nem lehet módosítani."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Az értesítések jelen csoportját itt nem lehet beállítani"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Továbbított értesítés"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Elvetés"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"A rendszer-navigáció módja megváltozott. Módosításához nyissa meg a Beállításokat."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"A rendszer-navigációs lehetőségeket a Beállításokban módosíthatja"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Készenléti mód"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Az Android TV eszköz hamarosan kikapcsol. Nyomja meg valamelyik gombot, hogy bekapcsolva tarthassa."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Az eszköz hamarosan kikapcsol. Nyomja meg, hogy bekapcsolva tarthassa."</string>
</resources>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index 6291d5d..bbc5ef4 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Ցուցադրե՞լ ծանուցումներ այս հավելվածից։"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Անձայն"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Ծանուցումներ"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Ծանուցումները գալիս են առանց ձայնի և թրթռոցի։"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Ծանուցումները գալիս են ձայնով կամ թրթռոցով։"</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Այս ծանուցումները չեն կարող փոփոխվել:"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Ծանուցումների տվյալ խումբը հնարավոր չէ կարգավորել այստեղ"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Ծանուցումն ուղարկվել է պրոքսի սերվերի միջոցով"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Փակել"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Համակարգի նավիգացիան թարմացվեց: Փոփոխություններ անելու համար անցեք կարգավորումներ:"</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Թարմացրեք համակարգի նավիգացիան կարգավորումներում"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Սպասման ռեժիմ"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV սարքը շուտով կանջատվի: Սեղմեք որևէ կոճակ՝ միացրած թողնելու համար:"</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Սարքը շուտով կանջատվի: Սեղմեք՝ միացրած թողնելու համար:"</string>
</resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index b9eaddf..e17e5f9 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Terus tampilkan notifikasi dari aplikasi ini?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Senyap"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Pemberitahuan"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Balon"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Membantu Anda tetap fokus tanpa suara atau getaran."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Menarik perhatian Anda dengan suara atau getaran."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Menjaga perhatian dengan pintasan floating ke konten ini."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Notifikasi ini tidak dapat diubah."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Grup notifikasi ini tidak dapat dikonfigurasi di sini"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Notifikasi proxy"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Tutup"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Navigasi sistem diupdate. Untuk melakukan perubahan, buka Setelan."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Buka Setelan untuk mengupdate navigasi sistem"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Siaga"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Perangkat Android TV akan segera dinonaktifkan; tekan tombol untuk terus menyalakannya."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Perangkat akan segera dinonaktifkan, tekan untuk terus menyalakannya."</string>
</resources>
diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml
index f98b943..00776a9 100644
--- a/packages/SystemUI/res/values-is/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Sýna áfram tilkynningar frá þessu forriti?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Hljóðlaust"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Viðvörun"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Blaðra"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Auðveldar þér að einbeita þér án hljóðs eða titrings."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Fangar athygli þína með hljóði eða titringi."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Fangar athygli þína með fljótandi flýtileið á þetta efni."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Ekki er hægt að breyta þessum tilkynningum."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Ekki er hægt að stilla þessar tilkynningar hér"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Staðgengilstilkynning"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Hunsa"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Kerfisstjórnun uppfærð. Þú getur breytt þessu í stillingunum."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Farðu í stillingar til að uppfæra kerfisstjórnun"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Biðstaða"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV tækið slekkur á sér fljótlega. Ýttu á takka til að það slokkni ekki á því."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Tækið slekkur á sér fljótlega. Ýttu á takka til að það slokkni ekki á því."</string>
</resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index c08cdd3..2c27009 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Continuare a ricevere notifiche da questa app?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Modalità silenziosa"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Avvisi"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Fumetto"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Favorisce la tua concentrazione grazie all\'assenza di suono o vibrazione."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Richiama la tua attenzione con suono o vibrazione."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Mantiene la tua attenzione con una scorciatoia mobile a questi contenuti."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Impossibile modificare queste notifiche."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Qui non è possibile configurare questo gruppo di notifiche"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Notifica inviata al proxy"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Ignora"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Navigazione del sistema aggiornata. Per apportare modifiche, usa le Impostazioni."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Usa le Impostazioni per aggiornare la navigazione del sistema"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Standby"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"A breve il dispositivo Android TV si spegnerà. Premi un pulsante per tenerlo acceso."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"A breve il dispositivo si spegnerà. Premi per tenerlo acceso."</string>
</resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index fc0c640..64074a8 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -667,8 +667,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"שנמשיך להציג לך התראות מהאפליקציה הזאת?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"שקט"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"שליחת התראות"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"עוזרת להתרכז ללא צלילים או רטט."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"מעוררת תשומת לב באמצעות צלילים או רטט."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"לא ניתן לשנות את ההתראות האלה."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"לא ניתן להגדיר כאן את קבוצת ההתראות הזו"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"התראה דרך שרת proxy"</string>
@@ -956,4 +960,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"סגירה"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"הניווט במערכת עודכן. אפשר לערוך שינויים דרך ההגדרות."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"יש לעבור להגדרות כדי לעדכן את הניווט במערכת"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"המתנה"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"מכשיר Android TV ייכבה בקרוב. יש ללחוץ על לחצן כלשהו כדי שהוא ימשיך לפעול."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"המכשיר ייכבה בקרוב, יש ללחוץ כדי שהוא ימשיך לפעול."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 351ace80..684c16e 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"このアプリからの通知を今後も表示しますか?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"サイレント"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"アラートを受け取る"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"バブル"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"音やバイブレーションが作動しないため、通知に煩わされずに済みます。"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"音やバイブレーションで通知をお知らせします。"</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"このコンテンツのフローティング ショートカットで通知をお知らせします。"</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"これらの通知は変更できません。"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"このグループの通知はここでは設定できません"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"代理通知"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"閉じる"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"システム ナビゲーションを更新しました。変更するには [設定] に移動してください。"</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"システム ナビゲーションを更新するには [設定] に移動してください"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"スタンバイ"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV デバイスはまもなく OFF になります。ON 状態を維持するには、ボタンを押してください。"</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"このデバイスはまもなく OFF になります。ON 状態を維持するには、ボタンを押してください。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index 8c10ea4..e205586 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"გაგრძელდეს შეტყობინებათა ჩვენება ამ აპიდან?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"ჩუმი"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"გამაფრთხილებელი"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"ბუშტი"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"გეხმარებათ ფოკუსირებაში ხმის ან ვიბრაციის უქონლობის გამო."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"იპყრობს თქვენს ყურადღებას ხმით ან ვიბრაციით."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"იპყრობს თქვენს ყურადღებას ამ კონტენტის მოლივლივე მალსახმობით."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"ამ შეტყობინებების შეცვლა შეუძლებელია."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"შეტყობინებების ამ ჯგუფის კონფიგურირება აქ შეუძლებელია"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"პროქსირებული შეტყობინება"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"დახურვა"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"სისტემური ნავიგაცია განახლდა. ცვლილებების შესატანად გადადით პარამეტრებზე."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"სისტემური ნავიგაციის გასაახლებლად გადადით პარამეტრებზე"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"მოლოდინის რეჟიმი"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV მოწყობილობა მალე გამოირთვება, დააჭირეთ ღილაკს, რომ ჩართული დარჩეს."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"მოწყობილობა მალე გამოირთვება, დააჭირეთ, რომ ჩართული დარჩეს."</string>
</resources>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index c646715..1c288f1 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Осы қолданбаның хабарландырулары көрсетілсін бе?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Дыбыссыз"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Ескертулер"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Көпіршік"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Хабарландырулар келгенде, дыбыс шықпайды не дірілдемейді"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Хабарландырулар келгенде, дыбыс шығады не дірілдейді"</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Осы мазмұнға бекітілген қалқымалы таңбашамен назарыңызды өзіне тартады."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Бұл хабарландыруларды өзгерту мүмкін емес."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Мұндай хабарландырулар бұл жерде конфигурацияланбайды."</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Прокси-сервер арқылы жіберілген хабарландыру"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Жабу"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Жүйе навигациясы жаңартылды. Өзгерту енгізу үшін \"Параметрлер\" бөліміне өтіңіз."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Жүйе навигациясын жаңарту үшін \"Параметрлер\" бөліміне өтіңіз."</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Күту режимі"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV құрылғысы жақын арада өшеді. Оны қосулы қалдыру үшін басыңыз."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Құрылғы жақын арада өшеді. Оны қосулы қалдыру үшін басыңыз."</string>
</resources>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index 042ffd8..dd28931 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"បន្តបង្ហាញការជូនដំណឹងពីកម្មវិធីនេះ?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"ស្ងាត់"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"បញ្ចេញសំឡេង"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"ពពុះ"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"ជួយឱ្យអ្នកផ្តោតអារម្មណ៍ ដោយមិនឮសំឡេង ឬការញ័រ។"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"ធ្វើឱ្យអ្នកចាប់អារម្មណ៍តាមរយៈសំឡេង ឬការញ័រ។"</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"ធ្វើឱ្យអ្នកចាប់អារម្មណ៍ដោយប្រើផ្លូវកាត់អណ្ដែតសម្រាប់ខ្លឹមសារនេះ។"</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"មិនអាចកែប្រែការជូនដំណឹងទាំងនេះបានទេ។"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"មិនអាចកំណត់រចនាសម្ព័ន្ធក្រុមការជូនដំណឹងនេះនៅទីនេះបានទេ"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"ការជូនដំណឹងជាប្រូកស៊ី"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"ច្រានចោល"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"បានធ្វើបច្ចុប្បន្នភាពការរុករកក្នុងប្រព័ន្ធ។ ដើម្បីធ្វើការផ្លាស់ប្ដូរ សូមចូលទៅកាន់ការកំណត់។"</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"ចូលទៅកាន់ការកំណត់ ដើម្បីធ្វើបច្ចុប្បន្នភាពការរុករកក្នុងប្រព័ន្ធ"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"ផ្អាកដំណើរការ"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"ឧបករណ៍ Android TV នឹងបិទក្នុងពេលឆាប់ៗនេះ សូមចុចប៊ូតុងដើម្បីបន្តបើកឧបករណ៍។"</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"ឧបករណ៍នឹងបិទក្នុងពេលឆាប់ៗនេះ សូមចុចដើម្បីបន្តបើកឧបករណ៍។"</string>
</resources>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index f208298..3a4918b 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ಈ ಅಪ್ಲಿಕೇಶನ್ನಿಂದ ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸುತ್ತಲೇ ಇರಬೇಕೆ?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"ನಿಶ್ಶಬ್ದ"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"ಎಚ್ಚರಿಸಲಾಗುತ್ತಿದೆ"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"ಶಬ್ದ ಅಥವಾ ವೈಬ್ರೇಷನ್ ಇರದಂತೆ ನಿಮಗೆ ಗಮನಹರಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"ಧ್ವನಿ ಅಥವಾ ವೈಬ್ರೇಷನ್ ಮೂಲಕ ನಿಮ್ಮ ಗಮನವನ್ನು ಸೆಳೆಯುತ್ತದೆ."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ಮಾರ್ಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"ಈ ಗುಂಪಿನ ಅಧಿಸೂಚನೆಗಳನ್ನು ಇಲ್ಲಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿರುವುದಿಲ್ಲ"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"ಪ್ರಾಕ್ಸಿ ಮಾಡಿದ ಅಧಿಸೂಚನೆಗಳು"</string>
@@ -845,7 +849,7 @@
<string name="pip_phone_settings" msgid="8080777499521528521">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"ವಜಾಗೊಳಿಸಲು ಕೆಳಕ್ಕೆ ಡ್ರ್ಯಾಗ್ ಮಾಡಿ"</string>
<string name="pip_menu_title" msgid="4707292089961887657">"ಮೆನು"</string>
- <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ಚಿತ್ರದಲ್ಲಿನ ಚಿತ್ರದಲ್ಲಿದೆ"</string>
+ <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ಚಿತ್ರದಲ್ಲಿ ಚಿತ್ರವಾಗಿದೆ"</string>
<string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g> ಈ ವೈಶಿಷ್ಟ್ಯ ಬಳಸುವುದನ್ನು ನೀವು ಬಯಸದಿದ್ದರೆ, ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಲು ಮತ್ತು ಅದನ್ನು ಆಫ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="pip_play" msgid="1417176722760265888">"ಪ್ಲೇ"</string>
<string name="pip_pause" msgid="8881063404466476571">"ವಿರಾಮಗೊಳಿಸಿ"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"ವಜಾಗೊಳಿಸಿ"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"ಸಿಸ್ಟಂ ನ್ಯಾವಿಗೇಷನ ಅಪ್ಡೇಟ್ ಮಾಡಲಾಗಿದೆ ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡಲು, ಸೆಟ್ಟಿಂಗ್ಗಳಿಗೆ ಹೋಗಿ."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"ಸಿಸ್ಟಂ ನ್ಯಾವಿಗೇಷನ್ ಅಪ್ಡೇಟ್ ಮಾಡಲು ಸೆಟ್ಟಿಂಗ್ಗಳಿಗೆ ಹೋಗಿ"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"ಸ್ಟ್ಯಾಂಡ್ಬೈ"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"ಈ Android TV ಸಾಧನವು ಶೀಘ್ರವೇ ಆಫ್ ಆಗುತ್ತದೆ; ಇದನ್ನು ಆನ್ನಲ್ಲಿಡಲು ಬಟನ್ ಅನ್ನು ಒತ್ತಿರಿ."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"ಈ ಸಾಧನವು ಶೀಘ್ರವೇ ಆಫ್ ಆಗುತ್ತದೆ; ಇದನ್ನು ಆನ್ನಲ್ಲಿಡಲು ಒತ್ತಿರಿ."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index c57d98f..2848a49 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"이 앱의 알림을 계속 표시하시겠습니까?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"무음"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"주의를 끄는 알림"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"소리나 진동 없이 집중할 수 있도록 도와줍니다"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"소리나 진동으로 알립니다."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"이 알림은 수정할 수 없습니다."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"이 알림 그룹은 여기에서 설정할 수 없습니다."</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"프록시를 통한 알림"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"닫기"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"시스템 탐색이 업데이트되었습니다. 변경하려면 설정으로 이동하세요."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"설정으로 이동하여 시스템 탐색을 업데이트하세요."</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"대기"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV가 곧 꺼집니다. 계속 사용하려면 버튼을 누르세요."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"기기가 곧 꺼집니다. 계속 사용하려면 누르세요."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index b712d62..7a5e568 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Бул колдонмонун эскертмелери көрсөтүлө берсинби?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Үнсүз"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Шашылыш билдирүү"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Үн же дирилдөөсүз ой топтоого жардам берет."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Билдирүүдөн үн чыгат же дирилдейт."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Бул билдирмелерди өзгөртүүгө болбойт."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Бул билдирмелердин тобун бул жерде конфигурациялоого болбойт"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Прокси билдирмеси"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Жабуу"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Тутум чабыттоосу жаңыртылды. Өзгөртүү үчүн, Жөндөөлөргө өтүңүз."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Тутум чабыттоосун жаңыртуу үчүн Жөндөөлөргө өтүңүз"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Көшүү режими"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV түзмөгү жакында өчүрүлөт, аны күйүк боюнча калтыруу үчүн баскычты басыңыз."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Түзмөк жакында өчүрүлөт, күйүк боюнча калтыруу үчүн басып коюңуз."</string>
</resources>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index 7440be7..550923c 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ສະແດງການແຈ້ງເຕືອນຈາກແອັບນີ້ຕໍ່ໄປບໍ?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"ປິດສຽງ"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"ການເຕືອນ"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"ຟອງ"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"ຊ່ວຍທ່ານມີສະມາທິໂດຍບໍ່ໃຊ້ສຽງ ຫຼື ການສັ່ນເຕືອນ."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"ດຶງຄວາມສົນໃຈຂອງທ່ານດ້ວຍສຽງ ຫຼື ການສັ່ນເຕືອນ."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"ເອົາໃຈໃສ່ທາງລັດແບບລອຍໄປຫາເນື້ອຫານີ້."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"ບໍ່ສາມາດແກ້ໄຂການແຈ້ງເຕືອນເຫຼົ່ານີ້ໄດ້."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"ບໍ່ສາມາດຕັ້ງຄ່າກຸ່ມການແຈ້ງເຕືອນນີ້ຢູ່ບ່ອນນີ້ໄດ້"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"ການແຈ້ງເຕືອນແບບພຣັອກຊີ"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"ປິດໄວ້"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"ອັບເດດການນຳທາງລະບົບແລ້ວ. ເພື່ອປ່ຽນແປງ, ກະລຸນາໄປທີ່ການຕັ້ງຄ່າ."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"ໄປທີ່ການຕັ້ງຄ່າເພື່ອອັບເດດການນຳທາງລະບົບ"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"ສະແຕນບາຍ"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"ອຸປະກອນ Android TV ຈະປິດໃນອີກບໍ່ດົນ, ກົດປຸ່ມໃດໜຶ່ງເພື່ອເປີດມັນໄວ້ຕໍ່."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"ອຸປະກອນຈະປິດໃນອີກບໍ່ດົນ, ກົດເພື່ອເປີດມັນໄວ້ຕໍ່."</string>
</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 4a2281d..584f5db 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -667,8 +667,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Toliau rodyti iš šios programos gautus pranešimus?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Tylūs"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Įspėti"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Debesėlis"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Padeda atkreipti dėmesį be garso arba vibravimo."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Atkreipia dėmesį garsu arba vibravimu."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Naudojant slankųjį spartųjį klavišą lengviau sutelkti dėmesį į šį turinį."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Šių pranešimų keisti negalima."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Šios grupės pranešimai čia nekonfigūruojami"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Per tarpinį serverį gautas pranešimas"</string>
@@ -956,4 +958,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Atmesti"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Sistemos naršymo funkcijos atnaujintos. Jei norite pakeisti, eikite į skiltį „Nustatymai“."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Eikite į skiltį „Nustatymai“, kad atnaujintumėte sistemos naršymo funkcijas"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Budėjimo laikas"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"„Android TV“ įrenginys netrukus išsijungs. Paspauskite mygtuką, kad jis liktų įjungtas."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Įrenginys netrukus išsijungs. Paspauskite, kad jis liktų įjungtas."</string>
</resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 2505636..807a0d8 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -664,8 +664,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Vai turpināt rādīt paziņojumus no šīs lietotnes?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Klusums"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Brīdinājumu saņemšana"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Palīdz jums koncentrēties, nenovēršot uzmanību ar skaņu vai vibrāciju."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Jūsu uzmanība tiek piesaistīta ar skaņas vai vibrācijas signālu."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Šos paziņojumus nevar modificēt."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Šeit nevar konfigurēt šo paziņojumu grupu."</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Starpniekservera paziņojums"</string>
@@ -951,4 +955,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Nerādīt"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Sistēmas navigācija ir atjaunināta. Lai veiktu izmaiņas, atveriet iestatījumus."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Atveriet iestatījumus, lai atjauninātu sistēmas navigāciju"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Gaidstāve"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV ierīce drīz izslēgsies. Nospiediet pogu, lai tā paliktu ieslēgta."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Ierīce drīz izslēgsies. Nospiediet, lai tā paliktu ieslēgta."</string>
</resources>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index d2eab61..8b10719 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Дали да продолжат да се прикажуваат известувања од апликацијава?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Тивко"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Предупредувај"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Балонче"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Ви помага да се концентрирате без звук или вибрации."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Ви го привлекува вниманието со звук или вибрации."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Ви го задржува вниманието со лебдечка кратенка на содржинава."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Овие известувања не може да се изменат"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Оваа група известувања не може да се конфигурира тука"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Известување преку прокси"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Отфрли"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Навигацијата на системот е ажурирана. За да извршите промени, одете во „Поставки“."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Одете во „Поставки“ за да ја ажурирате навигацијата на системот"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Подготвеност"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Уредот со Android TV наскоро ќе се исклучи, притиснете копче за да остане вклучен."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Уредот наскоро ќе се исклучи, притиснете за да остане вклучен."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index ca79e12..a013409 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ഈ ആപ്പിൽ നിന്നുള്ള അറിയിപ്പുകൾ തുടർന്നും കാണിക്കണോ?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"നിശബ്ദം"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"മുന്നറിയിപ്പ് നൽകൽ"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"ശബ്ദമോ വൈബ്രേഷനോ ഇല്ലാതെ ശ്രദ്ധ കേന്ദ്രീകരിക്കാൻ നിങ്ങളെ സഹായിക്കുന്നു."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"ശബ്ദമോ വെെബ്രേഷനോ ഉപയോഗിച്ച് നിങ്ങളുടെ ശ്രദ്ധ ക്ഷണിക്കുന്നു."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"ഈ അറിയിപ്പുകൾ പരിഷ്ക്കരിക്കാനാവില്ല."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"അറിയിപ്പുകളുടെ ഈ ഗ്രൂപ്പ് ഇവിടെ കോണ്ഫിഗര് ചെയ്യാൻ കഴിയില്ല"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"പ്രോക്സി അറിയിപ്പ്"</string>
@@ -845,8 +849,8 @@
<string name="pip_phone_settings" msgid="8080777499521528521">"ക്രമീകരണം"</string>
<string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"തള്ളിക്കളയാൻ താഴേക്ക് വലിച്ചിടുക"</string>
<string name="pip_menu_title" msgid="4707292089961887657">"മെനു"</string>
- <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ചിത്രത്തിനുള്ളിലെ ചിത്രത്തിലാണ്"</string>
- <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g> ഈ ഫീച്ചർ ഉപയോഗിക്കുന്നതിൽ നിങ്ങൾക്ക് താൽപ്പര്യമില്ലെങ്കിൽ, ടാപ്പുചെയ്ത് ക്രമീകരണം തുറന്ന് അത് ഓഫാക്കുക."</string>
+ <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ചിത്രത്തിനുള്ളിൽ ചിത്രം രീതിയിലാണ്"</string>
+ <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g> ഈ ഫീച്ചർ ഉപയോഗിക്കേണ്ടെങ്കിൽ, ടാപ്പ് ചെയ്ത് ക്രമീകരണം തുറന്ന് അത് ഓഫാക്കുക."</string>
<string name="pip_play" msgid="1417176722760265888">"പ്ലേ ചെയ്യുക"</string>
<string name="pip_pause" msgid="8881063404466476571">"താൽക്കാലികമായി നിർത്തുക"</string>
<string name="pip_skip_to_next" msgid="1948440006726306284">"അടുത്തതിലേക്ക് പോകുക"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"ഡിസ്മിസ് ചെയ്യുക"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"സിസ്റ്റം നാവിഗേഷൻ അപ്ഡേറ്റ് ചെയ്തു. മാറ്റങ്ങൾ വരുത്താൻ ക്രമീകരണത്തിലേക്ക് പോവുക."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"സിസ്റ്റം നാവിഗേഷൻ അപ്ഡേറ്റ് ചെയ്യാൻ ക്രമീകരണത്തിലേക്ക് പോവുക"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"സ്റ്റാൻഡ്ബൈ"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android ടിവി ഉടൻ ഓഫാകും, ഓണാക്കി നിർത്താൻ ഒരു ബട്ടൺ അമർത്തുക."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"ഉപകരണം ഉടൻ ഓഫാകും, ഓണാക്കി നിർത്താൻ അമർത്തുക."</string>
</resources>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index 50bb578..fc07a8a 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Энэ аппаас мэдэгдэл харуулсан хэвээр байх уу?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Чимээгүй"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Дуутай"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Дуу эсвэл чичиргээгүйгээр танд төвлөрөхөд тусална."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Дуу эсвэл чичиргээгүйгээр таны анхаарлыг татна."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Эдгээр мэдэгдлийг өөрчлөх боломжгүй."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Энэ бүлэг мэдэгдлийг энд тохируулах боломжгүй байна"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Прокси хийсэн мэдэгдэл"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Үл хэрэгсэх"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Системийн навигацыг шинэчиллээ. Өөрчлөхийн тулд Тохиргоо руу очно уу."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Системийн навигацыг шинэчлэхийн тулд Тохиргоо руу очно уу"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Зогсолтын горим"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Андройд ТВ төхөөрөмж удахгүй унтрах тул асаалттай хэвээр байлгахын тулд дарна уу."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Төхөөрөмж удахгүй унтрах тул асаалттай хэвээр байлгахын тулд дарна уу."</string>
</resources>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index d6a54f8..e41ac3b 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"या अॅपकडील सूचना दाखवणे सुरू ठेवायचे?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"सायलंट"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"सूचना देत आहे"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"आवाज किंवा व्हायब्रेशनशिवाय तुम्हाला लक्ष केंद्रित करण्यास मदत करते."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"आवाज किंवा व्हायब्रेशनने तुमचे लक्ष वेधून घेते."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"या सूचनांमध्ये सुधारणा केली जाऊ शकत नाही."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"या सूचनांचा संच येथे कॉन्फिगर केला जाऊ शकत नाही"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"प्रॉक्सी केलेल्या सूचना"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"डिसमिस करा"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"सिस्टम नेव्हिगेशन अपडेट केले. बदल करण्यासाठी, सेटिंग्जवर जा."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"सिस्टम नेव्हिगेशन अपडेट करण्यासाठी सेटिंग्जवर जा"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"स्टँडबाय"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV डिव्हाइस लवकरच बंद होणार आहे; सुरू ठेवण्यासाठी बटण दाबा."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"डिव्हाइस लवकरच बंद होणार आहे; सुरू ठेवण्यासाठी दाबा."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index 0faaa5f..880a4d9 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Terus tunjukkan pemberitahuan daripada apl ini?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Senyap"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Memaklumi"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Gelembung"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Membantu anda fokus tanpa bunyi atau getaran."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Menarik perhatian anda dengan bunyi atau getaran."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Memastikan anda memberikan perhatian dengan pintasan terapung ke kandungan ini."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Pemberitahuan ini tidak boleh diubah suai."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Kumpulan pemberitahuan ini tidak boleh dikonfigurasikan di sini"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Pemberitahuan berproksi"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Ketepikan"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Navigasi sistem dikemas kini. Untuk membuat perubahan, pergi ke Tetapan."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Pergi ke Tetapan untuk mengemas kini navigasi sistem"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Tunggu sedia"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Peranti Android TV akan mati tidak lama lagi; tekan butang untuk memastikan peranti terus hidup."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Peranti akan mati tidak lama lagi; tekan untuk memastikan peranti terus hidup."</string>
</resources>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index 566dc66..2b7dab7 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ဤအက်ပ်ထံမှ အကြောင်းကြားချက်များကို ဆက်ပြလိုပါသလား။"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"အသံတိတ်ရန်"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"သတိပေးခြင်း"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"အသံ သို့မဟုတ် တုန်ခါမှု မပါဘဲ အာရုံစိုက်နိုင်စေရန် ကူညီပေးသည်။"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"အသံ သို့မဟုတ် တုန်ခါမှုဖြင့် အာရုံစိုက်လာအောင် ပြုလုပ်သည်။"</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"ဤအကြောင်းကြားချက်များကို ပြုပြင်၍ မရပါ။"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"ဤအကြောင်းကြားချက်အုပ်စုကို ဤနေရာတွင် စီစဉ်သတ်မှတ်၍ မရပါ"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"ပရောက်စီထည့်ထားသော အကြောင်းကြားချက်"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"ပယ်ရန်"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"စနစ်လမ်းညွှန်ခြင်း အပ်ဒိတ်လုပ်ပြီးပါပြီ။ အပြောင်းအလဲများ ပြုလုပ်ရန် \'ဆက်တင်များ\' သို့သွားပါ။"</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"စနစ်လမ်းညွှန်ခြင်း အပ်ဒိတ်လုပ်ရန် \'ဆက်တင်များ\' သို့သွားပါ"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"အသင့်အနေအထား"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV စက်သည် မကြာမီ ပိတ်သွားပါမည်၊ ဆက်ဖွင့်ထားရန် ခလုတ်တစ်ခုနှိပ်ပါ။"</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"စက်သည် အကြာမီ ပိတ်သွားပါမည်၊ ဆက်ဖွင့်ထားပါ။"</string>
</resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index aabdd8b9..e76b9e2 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Vil du fortsette å vise varsler fra denne appen?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Lydløs"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Varsling"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Boble"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Hjelper deg med å fokusere uten lyd eller vibrering."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Får oppmerksomheten din med lyd eller vibrering."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Holder deg oppmerksom med en svevende snarvei til dette innholdet."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Disse varslene kan ikke endres."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Denne varselgruppen kan ikke konfigureres her"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Omdirigert varsel"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Avvis"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Systemnavigeringen er oppdatert. For å gjøre endringer, gå til Innstillinger."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Gå til Innstillinger for å oppdatere systemnavigeringen"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Ventemodus"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV-enheten slås snart av. Trykk på en knapp for å holde den på."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Enheten slås snart av. Trykk for å holde den på."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index ebffa2f..86b6d76 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"यो अनुप्रयोगका सूचनाहरू देखाउने क्रम जारी राख्ने हो?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"मौन"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"सतर्क गराउँदै"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"तपाईंलाई आवाज वा कम्पनविना ध्यान केन्द्रित गर्न मद्दत गर्छ।"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"ध्वनि वा कम्पनमार्फत तपाईंको ध्यान आकर्षित गर्छ।"</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"यी सूचनाहरू परिमार्जन गर्न मिल्दैन।"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"यहाँबाट सूचनाहरूको यो समूह कन्फिगर गर्न सकिँदैन"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"प्रोक्सीमार्फत आउने सूचना"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"हटाउनुहोस्"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"प्रणालीको नेभिगेसन अद्यावधिक गरियो। परिवर्तन गर्न सेटिङमा जानुहोस्।"</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"प्रणालीको नेभिगेसन अद्यावधिक गर्न सेटिङमा जानुहोस्"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"स्ट्यान्डबाई"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV यन्त्र चाँडै निष्क्रिय हुने छ; सक्रिय राख्न कुनै बटन थिच्नुहोस्।"</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"यो यन्त्र चाँडै निष्क्रिय हुने छ; सक्रिय राख्न थिच्नुहोस्।"</string>
</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index aa68dce..527af29 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Meldingen van deze app blijven weergeven?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Stil"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Waarschuwen"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Bubbel"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Helpt je focussen zonder geluid of trilling."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Trekt je aandacht met geluid of trillingen."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Trekt de aandacht met een zwevende snelkoppeling naar deze content."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Deze meldingen kunnen niet worden aangepast."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Deze groep meldingen kan hier niet worden geconfigureerd"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Melding via proxy"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Sluiten"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Systeemnavigatie geüpdatet. Als je wijzigingen wilt aanbrengen, ga je naar Instellingen."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Ga naar Instellingen om de systeemnavigatie te updaten"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Stand-by"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Het Android TV-apparaat wordt binnenkort uitgeschakeld. Druk op een knop om het ingeschakeld te houden."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Het apparaat wordt binnenkort uitgeschakeld. Druk om het ingeschakeld te houden."</string>
</resources>
diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml
index 0985196..c401d75 100644
--- a/packages/SystemUI/res/values-or/strings.xml
+++ b/packages/SystemUI/res/values-or/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ଏହି ଆପ୍ରୁ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଦେଖାଇବା ଜାରି ରଖିବେ?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"ନୀରବ"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"ଆଲର୍ଟ କରିବା"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"ବିନା ସାଉଣ୍ଡ କିମ୍ବା ଭାଇବ୍ରେସନ୍ରେ ଆପଣଙ୍କୁ ଫୋକସ୍ କରିବାରେ ସାହାଯ୍ୟ କରେ।"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"ସାଉଣ୍ଡ କିମ୍ବା ଭାଇବ୍ରେସନ୍ ମାଧ୍ୟମରେ ଆପଣଙ୍କର ଧ୍ୟାନ ଆକର୍ଷିତ କରିଥାଏ।"</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"ଏହି ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ପରିବର୍ତ୍ତନ କରିହେବ ନାହିଁ।"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"ଏଠାରେ ଏହି ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକର ଗ୍ରୁପ୍ କନଫ୍ୟୁଗର୍ କରାଯାଇପାରିବ ନାହିଁ"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"ବିଜ୍ଞପ୍ତି ପ୍ରକ୍ସୀ ହୋଇଛି"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"ଖାରଜ କରନ୍ତୁ"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"ସିଷ୍ଟମ୍ ନାଭିଗେସନ୍ ଅପ୍ଡେଟ୍ ହୋଇଛି। ପରିବର୍ତ୍ତନ କରିବା ପାଇଁ, ସେଟିଂସ୍କୁ ଯାଆନ୍ତୁ।"</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"ସିଷ୍ଟମ୍ ନାଭିଗେସନ୍ ଅପ୍ଡେଟ୍ କରିବା ପାଇଁ ସେଟିଂସ୍କୁ ଯାଆନ୍ତୁ"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"ଷ୍ଟାଣ୍ଡବାଏ"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android ଟିଭି ଡିଭାଇସ୍ ଶୀଘ୍ର ବନ୍ଦ ହୋଇଯିବ; ଏହା ଚାଲୁ ରଖିବା ପାଇଁ ଏକ ବଟନ୍ ଦବାନ୍ତୁ।"</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"ଡିଭାଇସ୍ ଶୀଘ୍ର ବନ୍ଦ ହୋଇଯିବ; ଚାଲୁ ରଖିବା ପାଇଁ ଦବାନ୍ତୁ।"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index cf7f3e9..fc5aea3 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ਕੀ ਇਸ ਐਪ ਤੋਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਦਿਖਾਉਣਾ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"ਸ਼ਾਂਤ"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"ਸੁਚੇਤਨਾ"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"ਤੁਹਾਨੂੰ ਬਿਨਾਂ ਧੁਨੀ ਅਤੇ ਥਰਥਰਾਹਟ ਦੇ ਫੋਕਸ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ।"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"ਧੁਨੀ ਅਤੇ ਥਰਥਰਾਹਟ ਨਾਲ ਤੁਹਾਡਾ ਧਿਆਨ ਖਿੱਚਦੀ ਹੈ।"</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਸੋਧਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ।"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"ਇਹ ਸੂਚਨਾਵਾਂ ਦਾ ਗਰੁੱਪ ਇੱਥੇ ਸੰਰੂਪਿਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"ਇੱਕ ਐਪ ਦੀ ਥਾਂ \'ਤੇ ਦੂਜੀ ਐਪ ਰਾਹੀਂ ਦਿੱਤੀ ਗਈ ਸੂਚਨਾ"</string>
@@ -845,7 +849,7 @@
<string name="pip_phone_settings" msgid="8080777499521528521">"ਸੈਟਿੰਗਾਂ"</string>
<string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"ਖਾਰਜ ਕਰਨ ਲਈ ਹੇਠਾਂ ਘਸੀਟੋ"</string>
<string name="pip_menu_title" msgid="4707292089961887657">"ਮੀਨੂ"</string>
- <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ਤਸਵੀਰ-ਵਿੱਚ-ਤਸਵੀਰ \'ਚ ਹੈ"</string>
+ <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ਤਸਵੀਰ-ਅੰਦਰ-ਤਸਵੀਰ ਵਿੱਚ ਹੈ"</string>
<string name="pip_notification_message" msgid="5619512781514343311">"ਜੇਕਰ ਤੁਸੀਂ ਨਹੀਂ ਚਾਹੁੰਦੇ ਕਿ <xliff:g id="NAME">%s</xliff:g> ਐਪ ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਦੀ ਵਰਤੋਂ ਕਰੇ, ਤਾਂ ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹਣ ਲਈ ਟੈਪ ਕਰੋ ਅਤੇ ਇਸਨੂੰ ਬੰਦ ਕਰੋ।"</string>
<string name="pip_play" msgid="1417176722760265888">"ਚਲਾਓ"</string>
<string name="pip_pause" msgid="8881063404466476571">"ਵਿਰਾਮ ਦਿਓ"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"ਖਾਰਜ ਕਰੋ"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"ਸਿਸਟਮ ਨੈਵੀਗੇਸ਼ਨ ਅੱਪਡੇਟ ਹੋ ਗਿਆ। ਤਬਦੀਲੀਆਂ ਕਰਨ ਲਈ, ਸੈਟਿੰਗਾਂ \'ਤੇ ਜਾਓ।"</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"ਸਿਸਟਮ ਨੈਵੀਗੇਸ਼ਨ ਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਸੈਟਿੰਗਾਂ \'ਤੇ ਜਾਓ"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"ਸਟੈਂਡਬਾਈ"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV ਡੀਵਾਈਸ ਜਲਦ ਹੀ ਬੰਦ ਹੋ ਜਾਵੇਗਾ; ਇਸਨੂੰ ਚਾਲੂ ਰੱਖਣ ਲਈ ਕੋਈ ਬਟਨ ਦਬਾਓ।"</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"ਡੀਵਾਈਸ ਜਲਦ ਹੀ ਬੰਦ ਹੋ ਜਾਵੇਗਾ, ਇਸਨੂੰ ਚਾਲੂ ਰੱਖਣ ਲਈ ਦਬਾਓ।"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index dc79963..3360a6e 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -388,7 +388,7 @@
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"Do wschodu słońca"</string>
<string name="quick_settings_night_secondary_label_on_at" msgid="6256314040368487637">"Włącz o <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="quick_settings_secondary_label_until" msgid="2749196569462600150">"Do <xliff:g id="TIME">%s</xliff:g>"</string>
- <string name="quick_settings_ui_mode_night_label" msgid="3419947801072692538">"Ciemny motyw"</string>
+ <string name="quick_settings_ui_mode_night_label" msgid="3419947801072692538">"Tryb ciemny"</string>
<string name="quick_settings_ui_mode_night_label_battery_saver" msgid="7438725724589758362">"Ciemny motyw\nOszczędzanie baterii"</string>
<string name="quick_settings_nfc_label" msgid="9012153754816969325">"Komunikacja NFC"</string>
<string name="quick_settings_nfc_off" msgid="6883274004315134333">"Komunikacja NFC jest wyłączona"</string>
@@ -667,8 +667,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Nadal pokazywać powiadomienia z tej aplikacji?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Bez dźwięku"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Alert"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Dymek"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Pomaga Ci się skupić, nie sygnalizując niczego dźwiękiem ani wibracjami."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Przyciąga uwagę dźwiękiem lub wibracjami."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Przyciąga uwagę dzięki pływającym skrótom do treści."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Tych powiadomień nie można zmodyfikować."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Tej grupy powiadomień nie można tu skonfigurować"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Powiadomienie w zastępstwie"</string>
@@ -956,4 +958,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Zamknij"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Nawigacja w systemie została zaktualizowana. Aby wprowadzić zmiany, otwórz Ustawienia."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Otwórz Ustawienia, by zaktualizować nawigację w systemie"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Tryb gotowości"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Urządzenie z Androidem TV za chwilę się wyłączy. Naciśnij przycisk, by pozostało włączone."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Urządzenie za chwilę się wyłączy. Naciśnij, by pozostało włączone."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index a9a0309..dbe9bdc 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Continuar mostrando notificações desse app?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Silenciosa"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Alertar"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Bolha"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Ajuda você a manter o foco sem som ou vibração."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Chama sua atenção com som ou vibração."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Mantém sua atenção com um atalho flutuante para esse conteúdo."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Não é possível modificar essas notificações."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Não é possível configurar esse grupo de notificações aqui"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Notificação salva no proxy"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Dispensar"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Navegação no sistema atualizada. Se quiser alterá-la, acesse as configurações."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Acesse as configurações para atualizar a navegação no sistema"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Em espera"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"O dispositivo Android TV entrará no modo de espera em breve. Pressione um botão para mantê-lo ativado."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"O dispositivo entrará no modo de espera em breve. Pressione para mantê-lo ativado."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index ef59a5e..7e2ed70 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Pretende continuar a ver notificações desta aplicação?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Silencioso"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Alertar"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Balão"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Ajuda-o a focar-se sem som ou vibração."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Chama a sua atenção com som ou vibração."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Mantém a sua atenção com um atalho flutuante para este conteúdo."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Não é possível modificar estas notificações."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Não é possível configurar este grupo de notificações aqui."</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Notificação de aplicação proxy"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Ignorar"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"A navegação no sistema foi atualizada. Para efetuar alterações, aceda às Definições."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Aceda às Definições para atualizar a navegação no sistema."</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Modo de espera"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"O dispositivo Android TV irá desligar-se brevemente. Prima um botão para o manter ligado."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"O dispositivo irá desligar-se brevemente. Prima para o manter ligado."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index a9a0309..dbe9bdc 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Continuar mostrando notificações desse app?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Silenciosa"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Alertar"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Bolha"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Ajuda você a manter o foco sem som ou vibração."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Chama sua atenção com som ou vibração."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Mantém sua atenção com um atalho flutuante para esse conteúdo."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Não é possível modificar essas notificações."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Não é possível configurar esse grupo de notificações aqui"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Notificação salva no proxy"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Dispensar"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Navegação no sistema atualizada. Se quiser alterá-la, acesse as configurações."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Acesse as configurações para atualizar a navegação no sistema"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Em espera"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"O dispositivo Android TV entrará no modo de espera em breve. Pressione um botão para mantê-lo ativado."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"O dispositivo entrará no modo de espera em breve. Pressione para mantê-lo ativado."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index a4618d3..1822acf 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -664,8 +664,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Doriți să continuați afișarea notificărilor de la această aplicație?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Silențios"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Alertare"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Balon"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Vă ajută să vă concentrați fără sunet sau vibrare."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Vă atrage atenția fără sunet sau vibrare."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Vă atrage atenția printr-o comandă rapidă flotantă la acest conținut."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Aceste notificări nu pot fi modificate."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Acest grup de notificări nu poate fi configurat aici"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Notificare prin proxy"</string>
@@ -951,4 +953,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Închideți"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Navigarea în sistem a fost actualizată. Pentru a face modificări, accesați Setările."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Accesați Setările pentru a actualiza navigarea în sistem"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Standby"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Dispozitivul Android TV se va opri în curând. Apăsați un buton pentru a-l menține pornit."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Dispozitivul se va opri în curând. Apăsați pentru a-l menține pornit."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 9574f0c..681986c 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -667,8 +667,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Показывать уведомления от этого приложения?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Без звука"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Оповещения"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Всплывающая подсказка"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Уведомления приходят без звука и вибрации"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Уведомления приходят со звуком или вибрацией"</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Привлекает ваше внимание к контенту с помощью плавающего ярлыка"</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Эти уведомления нельзя изменить."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Эту группу уведомлений нельзя настроить здесь."</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Уведомление отправлено через прокси-сервер."</string>
@@ -956,4 +958,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Закрыть"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Параметры навигации в системе обновлены. Чтобы изменить их, перейдите в настройки."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Чтобы обновить параметры навигации в системе, перейдите в настройки."</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Переход в режим ожидания"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Устройство Android TV скоро выключится. Чтобы этого не произошло, нажмите любую кнопку."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Устройство скоро выключится. Чтобы этого не произошло, нажмите любую кнопку или коснитесь экрана."</string>
</resources>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index 2876eb9..5aaae53 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"මෙම යෙදුම වෙතින් දැනුම්දීම් පෙන්වමින් තබන්නද?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"නිහඬ"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"ඇඟවීම"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"ඔබට ශබ්දය හෝ කම්පනය නොමැතිව අවධානය යොමු කිරීමට උදවු කරයි."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"ශබ්දය හෝ කම්පනය සමඟ ඔබේ අවධානය ලබා ගනී."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"මෙම දැනුම්දීම් වෙනස් කළ නොහැක."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"මෙම දැනුම්දීම් සමූහය මෙහි වින්යාස කළ නොහැක"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"ප්රොක්සි කළ දැනුම්දීම"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"ඉවතලන්න"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"පද්ධති සංචලනය යාවත්කාලීන කළා. වෙනස්කම් සිදු කිරීමට, සැකසීම් වෙත යන්න."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"පද්ධති සංචලනය යාවත්කාලීන කිරීමට සැකසීම් වෙත යන්න"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"පොරොත්තු"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV උපාංගය ඉක්මනින් ක්රියා විරහිත වනු ඇත; එය දිගටම ක්රියාත්මක කර තැබීමට බොත්තමක් ඔබන්න."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"උපාංගය ඉක්මනින් ක්රියා විරහිත වනු ඇත; එය දිගටම ක්රියාත්මක කර තැබීමට ඔබන්න."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index a969932..034827a 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -667,8 +667,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Majú sa upozornenia z tejto aplikácie naďalej zobrazovať?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Tiché"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Varovné"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Bublina"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Pomáha vám sústrediť sa bez zvukov či vibrácií."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Upúta vás zvukom alebo vibráciami."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Upúta vás plávajúcim odkazom na tento obsah."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Tieto upozornenia sa nedajú upraviť."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Túto skupinu upozornení nejde na tomto mieste konfigurovať"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Približné upozornenie"</string>
@@ -956,4 +958,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Zavrieť"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Navigácia v systéme bola aktualizovaná. Ak chcete vykonať zmeny, prejdite do Nastavení."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Prejdite do Nastavení a aktualizujte navigáciu v systéme"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Pohotovostný režim"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Zariadenie Android TV sa čoskoro vypne. Ak ho chcete ponechať zapnuté, stlačte ľubovoľné tlačidlo."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Zariadenie sa čoskoro vypne. Ak ho chcete ponechať zapnuté, stlačte ľubovoľné tlačidlo."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 9e4045f..f02a038b 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -667,8 +667,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Želite, da so obvestila te aplikacije še naprej prikazana?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Tiho"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Z opozorilom"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Mehurček"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Nemoteč prikaz brez zvoka ali vibriranja"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Pritegne vašo pozornost z zvokom ali vibriranjem"</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Zadrži vašo pozornost z lebdečo bližnjico do te vsebine."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Za ta obvestila ni mogoče spremeniti nastavitev."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Te skupine obvestil ni mogoče konfigurirati tukaj"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Posredovano obvestilo"</string>
@@ -956,4 +958,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Opusti"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Krmarjenje po sistemu je posodobljeno. Če želite opraviti spremembe, odprite nastavitve."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Če želite posodobiti krmarjenje po sistemu, odprite nastavitve"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Stanje pripravljenosti"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Naprava Android TV se bo kmalu izklopila. Če tega ne želite, pritisnite poljuben gumb."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Naprava se bo kmalu izklopila. Če tega ne želite, pritisnite poljuben gumb."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index 6ce621c..41ecccc 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -222,7 +222,7 @@
<skip />
<string name="accessibility_notification_dismissed" msgid="854211387186306927">"Njoftimi është hequr."</string>
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Streha e njoftimeve."</string>
- <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Cilësime të shpejta."</string>
+ <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Cilësimet e shpejta."</string>
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Ekrani i kyçjes."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Cilësimet"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Përmbledhja."</string>
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Do të vazhdosh t\'i shfaqësh njoftimet nga ky aplikacion?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Në heshtje"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Sinjalizimi"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Flluskë"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Të ndihmon të fokusohesh pa tinguj ose dridhje."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Të tërheq vëmendjen me tinguj ose dridhje."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Mbaje vëmendjen tënde me një shkurtore pluskuese te kjo përmbajtje."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Këto njoftime nuk mund të modifikohen."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Ky grup njoftimesh nuk mund të konfigurohet këtu"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Njoftim i dërguar me përfaqësues"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Hiq"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Navigimi i sistemit u përditësua. Për të bërë ndryshime, shko te \"Cilësimet\"."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Shko te \"Cilësimet\" për të përditësuar navigimin e sistemit"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Në gatishmëri"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Pajisja Android TV së shpejti do të fiket. Shtyp një buton për ta mbajtur të ndezur."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Pajisja së shpejti do të fiket. Shtype për ta mbajtur të ndezur."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 50775d9..e87d406 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -664,8 +664,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Желите ли да се обавештења из ове апликације и даље приказују?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Нечујно"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Упозоравање"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Облачић"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Помаже вам да се концентришете без звука или вибрације."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Привлачи вам пажњу помоћу звука или вибрације."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Привлачи вам пажњу помоћу плутајуће пречице до овог садржаја."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Ова обавештења не могу да се мењају."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Ова група обавештења не може да се конфигурише овде"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Обавештење преко проксија"</string>
@@ -951,4 +953,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Одбаци"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Навигација система је ажурирана. Да бисте унели измене, идите у Подешавања."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Идите у Подешавања да бисте ажурирали навигацију система"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Стање приправности"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV ће се ускоро искључити. Притисните дугме да би остао укључен."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Уређај ће се ускоро искључити. Притисните да би остао укључен."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index c7fb27c..70b89a6 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Vill du fortsätta visa aviseringar för den här appen?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Tyst"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Påkallar uppmärksamhet"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Bubbla"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Inga ljud eller vibrationer som stör koncentrationen."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Påkallar uppmärksamhet med ljud eller vibrationer."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Behåller din uppmärksamhet med en flytande genväg till innehållet."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Det går inte att ändra de här aviseringarna."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Den här aviseringsgruppen kan inte konfigureras här"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Avisering via proxy"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Stäng"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Systemnavigeringen har uppdaterats. Öppna inställningarna om du vill ändra något."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Öppna inställningarna och uppdatera systemnavigeringen"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Viloläge"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV-enheten stängs snart av. Tryck på en knapp för att behålla den på."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Enheten stängs snart av. Tryck för att behålla den på."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 12851eb..b6568f4 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Ungependa kuendelea kuonyesha arifa kutoka programu hii?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Kimya"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Kutoa arifa"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Kiputo"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Hukusaidia kuwa makini bila sauti au mtetemo."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Hupata umakinifu wako kwa sauti na mtetemo."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Huweka umakinifu wako kwenye maudhui haya kwa kutumia njia ya mkato ya kuelea."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Arifa hizi haziwezi kubadilishwa."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Kikundi hiki cha arifa hakiwezi kuwekewa mipangilio hapa"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Arifa wakilishi"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Ondoa"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Umesasisha usogezaji kwenye mfumo. Ili ufanye mabadiliko, nenda kwenye Mipangilio."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Nenda kwenye mipangilio ili usasishe usogezaji kwenye mfumo"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Hali tuli"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Kifaa cha Android TV kitazima hivi karibuni; bonyeza kitufe ili kisizime."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Kifaa kitazima hivi karibuni; bonyeza ili kisizime."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index 0d49f27..92fb88a 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"இந்த ஆப்ஸின் அறிவிப்புகளைத் தொடர்ந்து காட்டவா?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"நிசப்தம்"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"விழிப்பூட்டல்"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"ஒலியோ அதிர்வோ இல்லாமல் முழு கவனம் செலுத்த உதவும்."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"ஒலியோ அதிர்வோ ஏற்படுத்தி உங்கள் கவனத்தை ஈர்க்கும்."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"இந்த அறிவிப்புகளை மாற்ற இயலாது."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"இந்த அறிவுப்புக் குழுக்களை இங்கே உள்ளமைக்க இயலாது"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"ப்ராக்ஸியான அறிவிப்பு"</string>
@@ -846,7 +850,7 @@
<string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"நிராகரிக்க, கீழே இழுக்கவும்"</string>
<string name="pip_menu_title" msgid="4707292089961887657">"மெனு"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> தற்போது பிக்ச்சர்-இன்-பிக்ச்சரில் உள்ளது"</string>
- <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g> இந்த அம்சத்தைப் பயன்படுத்த வேண்டாம் என நினைத்தால், அமைப்புகளைத் திறந்து அதை முடக்க, தட்டவும்."</string>
+ <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g> இந்த அம்சத்தைப் பயன்படுத்த வேண்டாம் என நினைத்தால் இங்கு தட்டி அமைப்புகளைத் திறந்து இதை முடக்கவும்."</string>
<string name="pip_play" msgid="1417176722760265888">"இயக்கு"</string>
<string name="pip_pause" msgid="8881063404466476571">"இடைநிறுத்து"</string>
<string name="pip_skip_to_next" msgid="1948440006726306284">"அடுத்ததற்குச் செல்"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"மூடுக"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"சிஸ்டம் நேவிகேஷன் மாற்றப்பட்டது. மாற்றங்களைச் செய்ய ‘அமைப்புகளுக்குச்’ செல்லவும்."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"சிஸ்டம் நேவிகேஷனை மாற்ற ’அமைப்புகளுக்குச்’ செல்லவும்"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"இயக்க நேரம்"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV விரைவில் ஆஃப் ஆகலாம். இதைத் தொடர்ந்து ஆனில் வைக்க ஒரு பட்டனைத் தட்டவும்."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"இந்தச் சாதனம் விரைவில் ஆஃப் ஆகலாம். இதைத் தொடர்ந்து ஆனில் வைக்கத் தட்டவும்."</string>
</resources>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index 1600df7..f5933a4 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ఈ యాప్ నుండి నోటిఫికేషన్లను చూపిస్తూ ఉండాలా?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"నిశ్శబ్దం"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"హెచ్చరించడం"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"బబుల్"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"శబ్దం లేదా వైబ్రేషన్ లేకుండా దృష్టి కేంద్రీకరించడానికి మీకు సహాయపడుతుంది."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"శబ్దం లేదా వైబ్రేషన్తో మీరు దృష్టి సారించేలా చేస్తుంది."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"ఫ్లోటింగ్ షార్ట్కట్తో మీ దృష్టిని ఈ కంటెంట్పై నిలిపి ఉంచుతుంది."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"ఈ నోటిఫికేషన్లను సవరించడం వీలుపడదు."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"ఈ నోటిఫికేషన్ల సమూహాన్ని ఇక్కడ కాన్ఫిగర్ చేయలేము"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"ప్రాక్సీ చేయబడిన నోటిఫికేషన్"</string>
@@ -846,7 +848,7 @@
<string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"తీసివేయడానికి కిందికి లాగండి"</string>
<string name="pip_menu_title" msgid="4707292089961887657">"మెను"</string>
<string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> చిత్రంలో చిత్రం రూపంలో ఉంది"</string>
- <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g> ఈ లక్షణాన్ని ఉపయోగించకూడదు అని మీరు అనుకుంటే, సెట్టింగ్లను తెరవడానికి నొక్కి, దీన్ని ఆఫ్ చేయండి."</string>
+ <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g> ఈ లక్షణాన్ని ఉపయోగించకూడదు అని మీరు అనుకుంటే, సెట్టింగ్లను తెరవడానికి ట్యాప్ చేసి, దీన్ని ఆఫ్ చేయండి."</string>
<string name="pip_play" msgid="1417176722760265888">"ప్లే చేయి"</string>
<string name="pip_pause" msgid="8881063404466476571">"పాజ్ చేయి"</string>
<string name="pip_skip_to_next" msgid="1948440006726306284">"దాటవేసి తర్వాత దానికి వెళ్లు"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"విస్మరించు"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"సిస్టమ్ నావిగేషన్ అప్డేట్ చేయబడింది. మార్పులు చేయడానికి, సెట్టింగ్లకు వెళ్లండి."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"సిస్టమ్ నావిగేషన్ను అప్డేట్ చేయడానికి సెట్టింగ్లకు వెళ్లండి"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"స్టాండ్బై"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV పరికరం త్వరలో ఆఫ్ అయిపోతుంది; దాన్ని ఆన్లో ఉంచడానికి బటన్ను నొక్కండి."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"పరికరం త్వరలో ఆఫ్ అయిపోతుంది; దీన్ని ఆన్లో ఉంచడానికి నొక్కండి."</string>
</resources>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 554009e..9df8f32 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"แสดงการแจ้งเตือนจากแอปนี้ต่อไปไหม"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"เงียบ"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"แจ้งเตือน"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"ช่วยรักษาสมาธิของคุณด้วยการไม่ส่งเสียงหรือสั่น"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"ดึงความสนใจของคุณด้วยเสียงและการสั่น"</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"แก้ไขการแจ้งเตือนเหล่านี้ไม่ได้"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"การแจ้งเตือนกลุ่มนี้กำหนดค่าที่นี่ไม่ได้"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"การแจ้งเตือนที่ผ่านพร็อกซี"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"ปิด"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"อัปเดตการไปยังส่วนต่างๆ ของระบบแล้ว หากต้องการเปลี่ยนแปลง ให้ไปที่การตั้งค่า"</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"ไปที่การตั้งค่าเพื่ออัปเดตการไปยังส่วนต่างๆ ของระบบ"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"สแตนด์บาย"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"อุปกรณ์ Android TV จะปิดเครื่องในอีกไม่ช้า กดปุ่มเพื่อเปิดอุปกรณ์ต่อไป"</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"อุปกรณ์จะปิดเครื่องในอีกไม่ช้า กดเพื่อเปิดอุปกรณ์ต่อไป"</string>
</resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 309265a..a3a7986 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Patuloy na ipakita ang mga notification mula sa app na ito?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Naka-silent"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Mag-alerto"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Nakakatulong sa iyong tumuon nang walang tunog o pag-vibrate."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Kinukuha ang iyong atensyon sa pamamagitan ng tunog o pag-vibrate."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Hindi puwedeng baguhin ang mga notification na ito."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Hindi mako-configure dito ang pangkat na ito ng mga notification"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Na-proxy na notification"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"I-dismiss"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Na-update na ang pag-navigate ng system. Para gumawa ng mga pagbabago, pumunta sa Mga Setting."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Pumunta sa Mga Setting para i-update ang pag-navigate sa system"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Standby"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Mag-o-off na ang Android TV device; pumindot ng button para panatilihin itong naka-on."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Mag-o-off na ang device; pumindot para panatilihin itong naka-on."</string>
</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index b200ac6..f176f17 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Bu uygulamadan gelen bildirimler gösterilmeye devam edilsin mi?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Sessiz"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Uyarı"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Ses veya titreşim olmadan odaklanmanıza yardımcı olur."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Ses veya titreşimle dikkatinizi çeker."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Bu bildirimler değiştirilemez."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Bu bildirim grubu burada yapılandırılamaz"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Proxy uygulanan bildirim"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Kapat"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Sistemde gezinme yöntemi güncellendi. Değişiklik yapmak için Ayarlar\'a gidin."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Sistemde gezinme yöntemini güncellemek için Ayarlar\'a gidin"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Beklemeye alınıyor"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV cihazı kısa süre içinde kapanacak; açık tutmak için bir düğmeye basın."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Cihaz kısa süre içinde kapanacak; açık tutmak için düğmeye basın."</string>
</resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 39b4deb..e1eeb4a 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -667,8 +667,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Чи показувати сповіщення з цього додатка надалі?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Без звуку"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Зі звуком"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Спливаюче сповіщення"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Не відволікає увагу звуковим сигналом або вібрацією."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Привертає увагу звуковим сигналом або вібрацією."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Привертає увагу до контенту плаваючим ярликом."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Ці сповіщення не можна змінити."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Цю групу сповіщень не можна налаштувати тут"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Проксі-сповіщення"</string>
@@ -956,4 +958,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Закрити"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Навігацію в системі оновлено. Щоб внести зміни, перейдіть у налаштування."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Перейдіть у налаштування, щоб оновити навігацію в системі"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Режим очікування"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Незабаром пристрій Android TV буде вимкнено. Натисніть кнопку, щоб цього не сталося."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Незабаром пристрій буде вимкнено. Натисніть, щоб цього не сталося."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index aa261da..5fcb8d1 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"اس ایپ کی طرف سے اطلاعات دکھانا جاری رکھیں؟"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"خاموش"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"الرٹ کرنا"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"بغیر آواز یا وائبریشن کے آپ کو فوکس کرنے میں مدد کرتا ہے۔"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"آواز اور وائبریشن کے ذریعے آپ کی توجہ حاصل کرتا ہے۔"</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"ان اطلاعات کی ترمیم نہیں کی جا سکتی۔"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"اطلاعات کے اس گروپ کو یہاں کنفیگر نہیں کیا جا سکتا"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"پراکسی اطلاع"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"برخاست کریں"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"سسٹم نیویگیشن اپ ڈیٹ کیا گیا۔ تبدیلیاں کرنے کے لیے، ترتیبات پر جائیں۔"</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"سسٹم نیویگیشن اپ ڈیٹ کرنے کے لیے ترتیبات پر جائیں"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"اسٹینڈ بائی"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV آلہ جلد ہی بند ہوجائے گا آن رکھنے کے ليے بٹن دبائیں۔"</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"آلہ جلد ہی بند ہوجائے گا اسے آن رکھنے کے ليے دبائیں۔"</string>
</resources>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index 8d3697e..46734f3 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Bu ilovadan keladigan bildirishnomalar chiqaversinmi?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Tovushsiz"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Bildirishnoma yuborish"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Pufaklar"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Bildirishnomalar tovush va tebranishsiz keladi."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Bildirishnomalar tovush va tebranish bilan keladi."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Bu kontentni ochuvchi erkin yorliq diqqatingizda boʻladi."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Bu bildirishnomalarni tahrirlash imkonsiz."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Ushbu bildirishnomalar guruhi bu yerda sozlanmaydi"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Ishonchli bildirishnoma"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Yopish"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Tizim navigatsiyasi yangilandi. Buni Sozlamalar orqali oʻzgartirishingiz mumkin."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Tizim navigatsiyasini yangilash uchun Sozlamalarni oching"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Kutib turing"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV qurilmasi oʻchish arafasida, yoniq qolishi uchun istalgan tugmani bosing."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Qurilma oʻchish arafasida, yoniq qolishi uchun istalgan tugmani bosing."</string>
</resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 78bf627..ca0a794 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Tiếp tục hiển thị các thông báo từ ứng dụng này?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Im lặng"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Cảnh báo"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Giúp bạn tập trung bằng cách tắt tiếng hoặc không rung."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Thu hút sự chú ý của bạn bằng cách bật tiếng hoặc rung."</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Không thể sửa đổi các thông báo này."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Không thể định cấu hình nhóm thông báo này tại đây"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Thông báo đã xử lý qua máy chủ proxy"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Loại bỏ"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Đã cập nhật chế độ di chuyển trên hệ thống. Để thay đổi, hãy chuyển đến phần Cài đặt."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Chuyển đến phần Cài đặt để cập nhật chế độ di chuyển trên hệ thống"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Chế độ chờ"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Thiết bị Android TV sẽ sớm tắt. Hãy nhấn vào một nút để thiết bị vẫn bật."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Thiết bị sẽ sớm tắt. Hãy nhấn vào một nút để thiết bị vẫn bật."</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index de6ad78..6a607e2 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"要继续显示来自此应用的通知吗?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"静音"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"提醒"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"不会发出提示音或振动,可帮助您保持专注。"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"通过提示音或振动吸引您的注意。"</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"无法修改这些通知。"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"您无法在此处配置这组通知"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"代理通知"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"关闭"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"系统导航已更新。要进行更改,请转到“设置”。"</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"转到“设置”即可更新系统导航"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"待机"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV 设备即将关闭;按一下相应的按钮即可让设备保持开启状态。"</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"设备即将关闭;按一下即可让设备保持开启状态。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index 0bf6fbf..706c9ee 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"要繼續顯示此應用程式的通知嗎?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"靜音"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"發出提醒"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"助您保持專注,不會發出聲音或震動。"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"發出聲音或震動來吸引您的注意。"</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"無法修改這些通知。"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"無法在此設定這組通知"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"代理通知"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"關閉"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"系統導覽已更新。如需變更,請前往「設定」。"</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"前往「設定」更新系統導覽"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"待機"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV 裝置即將關閉,按下按鈕即可保持開啟。"</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"裝置即將關閉,輕按即可保持開啟。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 9b3aeb2..6202ce2 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -661,8 +661,12 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"要繼續顯示這個應用程式的通知嗎?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"靜音"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"快訊"</string>
+ <!-- no translation found for notification_bubble_title (6826478461954949364) -->
+ <skip />
<string name="notification_channel_summary_low" msgid="3387466082089715555">"協助你不受音效或震動干擾。"</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"發出音效或震動吸引你的注意力。"</string>
+ <!-- no translation found for notification_channel_summary_bubble (4269580628050629291) -->
+ <skip />
<string name="notification_unblockable_desc" msgid="4556908766584964102">"無法修改這些通知。"</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"無法在這裡設定這個通知群組"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"經過 Proxy 處理的通知"</string>
@@ -946,4 +950,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"關閉"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"系統操作機制已更新。如要進行變更,請前往「設定」。"</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"請前往「設定」更新系統操作機制"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"待機"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Android TV 裝置即將關閉。如要讓裝置保持開啟狀態,請按下任一按鈕。"</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"裝置即將關閉。輕觸螢幕或按下按鈕即可讓裝置保持開啟狀態。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 9cf9313..462910f 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -661,8 +661,10 @@
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Qhubeka nokubonisa izaziso kusuka kulolu hlelo lokusebenza?"</string>
<string name="notification_silence_title" msgid="5763240612242137433">"Kuthulile"</string>
<string name="notification_alert_title" msgid="8031196611815490340">"Iyazisa"</string>
+ <string name="notification_bubble_title" msgid="6826478461954949364">"Ibhamuza"</string>
<string name="notification_channel_summary_low" msgid="3387466082089715555">"Ikusiza ukuthi ugxile ngaphandle komsindo noma ukudlidliza."</string>
<string name="notification_channel_summary_default" msgid="5994062840431965586">"Ithola ukunaka kwakho ngomsindo noma ukudlidliza."</string>
+ <string name="notification_channel_summary_bubble" msgid="4269580628050629291">"Igcina ukunaka kwakho ngesinqamuleli esintantayo kulokhu okuqukethwe."</string>
<string name="notification_unblockable_desc" msgid="4556908766584964102">"Lezi zaziso azikwazi ukushintshwa."</string>
<string name="notification_multichannel_desc" msgid="4695920306092240550">"Leli qembu lezaziso alikwazi ukulungiselelwa lapha"</string>
<string name="notification_delegate_header" msgid="2857691673814814270">"Isaziso sommeli"</string>
@@ -946,4 +948,7 @@
<string name="bubble_dismiss_text" msgid="8028337712674081668">"Cashisa"</string>
<string name="notification_content_system_nav_changed" msgid="7218093915747788444">"Ukuzulazula kwesistimu kubuyekeziwe. Ukuze wenze ushintsho, hamba kokuthi Izilungiselelo."</string>
<string name="notification_content_gesture_nav_available" msgid="8111130443656460792">"Hamba kuzilungiselelo ukuze ubuyekeze ukuzulazula kwesistimu"</string>
+ <string name="inattentive_sleep_warning_title" msgid="7695119731872371794">"Ilindile"</string>
+ <string name="inattentive_sleep_warning_message" product="tv" msgid="4279125516592217099">"Idivayisi ye-Android TV maduze izovalwa, cindezela inkinobho ukuze uyigcine ivuliwe."</string>
+ <string name="inattentive_sleep_warning_message" product="default" msgid="3128565462954884260">"Idivayisi maduze izovalwa, cindezela ukuze uyigcine ivuliwe."</string>
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/ActivityIntentHelper.java b/packages/SystemUI/src/com/android/systemui/ActivityIntentHelper.java
index 2b62e04..63840bc 100644
--- a/packages/SystemUI/src/com/android/systemui/ActivityIntentHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/ActivityIntentHelper.java
@@ -24,14 +24,20 @@
import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
/**
* Contains useful methods for querying properties of an Activity Intent.
*/
+@Singleton
public class ActivityIntentHelper {
private final Context mContext;
+ @Inject
public ActivityIntentHelper(Context context) {
+ // TODO: inject a package manager, not a context.
mContext = context;
}
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java b/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java
index 741c95f..e31e44e 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java
@@ -33,7 +33,6 @@
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.ViewMediatorCallback;
import com.android.systemui.broadcast.BroadcastDispatcher;
@@ -103,14 +102,12 @@
return Looper.getMainLooper();
}
- @Singleton
@Provides
@BgHandler
public Handler provideBgHandler(@BgLooper Looper bgLooper) {
return new Handler(bgLooper);
}
- @Singleton
@Provides
@MainHandler
public Handler provideMainHandler(@MainLooper Looper mainLooper) {
@@ -143,13 +140,6 @@
return new DisplayMetrics();
}
- @Singleton
- @Provides
- public IStatusBarService provideIStatusBarService() {
- return IStatusBarService.Stub.asInterface(
- ServiceManager.getService(Context.STATUS_BAR_SERVICE));
- }
-
/** */
@Singleton
@Provides
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemServicesModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemServicesModule.java
index fffba8c..0d4cc01 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SystemServicesModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemServicesModule.java
@@ -22,6 +22,7 @@
import android.app.AlarmManager;
import android.app.IActivityManager;
import android.app.IWallpaperManager;
+import android.app.KeyguardManager;
import android.app.WallpaperManager;
import android.content.Context;
import android.content.res.Resources;
@@ -30,10 +31,13 @@
import android.os.PowerManager;
import android.os.ServiceManager;
import android.os.UserHandle;
+import android.service.dreams.DreamService;
+import android.service.dreams.IDreamManager;
import android.view.IWindowManager;
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
+import com.android.internal.statusbar.IStatusBarService;
import com.android.internal.util.LatencyTracker;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.systemui.dagger.qualifiers.BgHandler;
@@ -64,6 +68,20 @@
}
@Provides
+ @Singleton
+ static IDreamManager provideIDreamManager() {
+ return IDreamManager.Stub.asInterface(
+ ServiceManager.checkService(DreamService.DREAM_SERVICE));
+ }
+
+ @Singleton
+ @Provides
+ static IStatusBarService provideIStatusBarService() {
+ return IStatusBarService.Stub.asInterface(
+ ServiceManager.getService(Context.STATUS_BAR_SERVICE));
+ }
+
+ @Provides
@Nullable
static IWallpaperManager provideIWallPaperManager() {
return IWallpaperManager.Stub.asInterface(
@@ -78,6 +96,12 @@
@Singleton
@Provides
+ static KeyguardManager provideKeyguardManager(Context context) {
+ return context.getSystemService(KeyguardManager.class);
+ }
+
+ @Singleton
+ @Provides
static LatencyTracker provideLatencyTracker(Context context) {
return LatencyTracker.getInstance(context);
}
diff --git a/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningController.java b/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningController.java
index 7169431..7d4bd01 100644
--- a/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningController.java
+++ b/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningController.java
@@ -54,9 +54,9 @@
}
@Override
- public void dismissInattentiveSleepWarning() {
+ public void dismissInattentiveSleepWarning(boolean animated) {
if (mOverlayView != null) {
- mOverlayView.dismiss();
+ mOverlayView.dismiss(animated);
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java b/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java
index 8ccc679..cf1bc7d 100644
--- a/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java
+++ b/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java
@@ -16,11 +16,15 @@
package com.android.systemui.power;
+import android.animation.Animator;
+import android.animation.AnimatorInflater;
+import android.animation.AnimatorListenerAdapter;
import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Binder;
import android.os.IBinder;
import android.view.LayoutInflater;
+import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.FrameLayout;
@@ -34,6 +38,8 @@
public class InattentiveSleepWarningView extends FrameLayout {
private final IBinder mWindowToken = new Binder();
private final WindowManager mWindowManager;
+ private Animator mFadeOutAnimator;
+ private boolean mDismissing;
InattentiveSleepWarningView(Context context) {
super(context);
@@ -47,23 +53,62 @@
// overlay consumes key presses
return true;
});
+
+ mFadeOutAnimator = AnimatorInflater.loadAnimator(getContext(),
+ com.android.internal.R.animator.fade_out);
+ mFadeOutAnimator.setTarget(this);
+ mFadeOutAnimator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ removeView();
+ }
+
+ @Override
+ public void onAnimationCancel(Animator animation) {
+ mDismissing = false;
+ setAlpha(1f);
+ setVisibility(View.VISIBLE);
+ }
+ });
+ }
+
+ private void removeView() {
+ if (mDismissing) {
+ setVisibility(View.INVISIBLE);
+ mWindowManager.removeView(InattentiveSleepWarningView.this);
+ }
}
/**
* Show the warning.
*/
public void show() {
- if (getParent() == null) {
- mWindowManager.addView(this, getLayoutParams(mWindowToken));
+ if (getParent() != null) {
+ if (mFadeOutAnimator.isStarted()) {
+ mFadeOutAnimator.cancel();
+ }
+ return;
}
+
+ setAlpha(1f);
+ setVisibility(View.VISIBLE);
+ mWindowManager.addView(this, getLayoutParams(mWindowToken));
}
/**
* Dismiss the warning.
*/
- public void dismiss() {
- if (getParent() != null) {
- mWindowManager.removeView(this);
+ public void dismiss(boolean animated) {
+ if (getParent() == null) {
+ return;
+ }
+
+ mDismissing = true;
+
+ if (animated) {
+ postOnAnimation(mFadeOutAnimator::start);
+ } else {
+ removeView();
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
index 7963203..e790c1d 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
@@ -87,6 +87,7 @@
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
+import java.util.function.Consumer;
import java.util.function.Function;
import javax.inject.Inject;
@@ -107,7 +108,7 @@
public Context context;
public Bitmap image;
public Uri imageUri;
- public Runnable finisher;
+ public Consumer<Uri> finisher;
public Function<PendingIntent, Void> onEditReady;
public int iconSize;
public int previewWidth;
@@ -260,7 +261,7 @@
* Creates a new worker thread and saves the screenshot to the media store.
*/
private void saveScreenshotInWorkerThread(
- Runnable finisher, @Nullable Function<PendingIntent, Void> onEditReady) {
+ Consumer<Uri> finisher, @Nullable Function<PendingIntent, Void> onEditReady) {
SaveImageInBackgroundData data = new SaveImageInBackgroundData();
data.context = mContext;
data.image = mScreenBitmap;
@@ -276,15 +277,15 @@
.execute();
}
- private void saveScreenshotInWorkerThread(Runnable finisher) {
+ private void saveScreenshotInWorkerThread(Consumer<Uri> finisher) {
saveScreenshotInWorkerThread(finisher, null);
}
/**
* Takes a screenshot of the current display and shows an animation.
*/
- private void takeScreenshot(Runnable finisher, boolean statusBarVisible, boolean navBarVisible,
- Rect crop) {
+ private void takeScreenshot(Consumer<Uri> finisher, boolean statusBarVisible,
+ boolean navBarVisible, Rect crop) {
int rot = mDisplay.getRotation();
int width = crop.width();
int height = crop.height();
@@ -294,7 +295,7 @@
if (mScreenBitmap == null) {
notifyScreenshotError(mContext, mNotificationManager,
R.string.screenshot_failed_to_capture_text);
- finisher.run();
+ finisher.accept(null);
return;
}
@@ -307,7 +308,7 @@
statusBarVisible, navBarVisible);
}
- void takeScreenshot(Runnable finisher, boolean statusBarVisible, boolean navBarVisible) {
+ void takeScreenshot(Consumer<Uri> finisher, boolean statusBarVisible, boolean navBarVisible) {
mDisplay.getRealMetrics(mDisplayMetrics);
takeScreenshot(finisher, statusBarVisible, navBarVisible,
new Rect(0, 0, mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels));
@@ -316,7 +317,7 @@
/**
* Displays a screenshot selector
*/
- void takeScreenshotPartial(final Runnable finisher, final boolean statusBarVisible,
+ void takeScreenshotPartial(final Consumer<Uri> finisher, final boolean statusBarVisible,
final boolean navBarVisible) {
mWindowManager.addView(mScreenshotLayout, mWindowLayoutParams);
mScreenshotSelectorView.setOnTouchListener(new View.OnTouchListener() {
@@ -392,8 +393,8 @@
/**
* Starts the animation after taking the screenshot
*/
- private void startAnimation(final Runnable finisher, int w, int h, boolean statusBarVisible,
- boolean navBarVisible) {
+ private void startAnimation(final Consumer<Uri> finisher, int w, int h,
+ boolean statusBarVisible, boolean navBarVisible) {
// If power save is on, show a toast so there is some visual indication that a screenshot
// has been taken.
PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java b/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java
index 083f971..e9dbe02 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java
@@ -453,7 +453,7 @@
mNotificationBuilder.build());
}
}
- mParams.finisher.run();
+ mParams.finisher.accept(mParams.imageUri);
mParams.clearContext();
}
@@ -462,7 +462,7 @@
// If we are cancelled while the task is running in the background, we may get null
// params. The finisher is expected to always be called back, so just use the baked-in
// params from the ctor in any case.
- mParams.finisher.run();
+ mParams.finisher.accept(null);
mParams.clearImage();
mParams.clearContext();
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java b/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java
index fd63506..6243b4b 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java
@@ -18,6 +18,7 @@
import android.app.Service;
import android.content.Intent;
+import android.net.Uri;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
@@ -27,6 +28,8 @@
import android.util.Log;
import android.view.WindowManager;
+import java.util.function.Consumer;
+
import javax.inject.Inject;
public class TakeScreenshotService extends Service {
@@ -39,10 +42,10 @@
@Override
public void handleMessage(Message msg) {
final Messenger callback = msg.replyTo;
- Runnable finisher = new Runnable() {
+ Consumer<Uri> finisher = new Consumer<Uri>() {
@Override
- public void run() {
- Message reply = Message.obtain(null, 1);
+ public void accept(Uri uri) {
+ Message reply = Message.obtain(null, 1, uri);
try {
callback.send(reply);
} catch (RemoteException e) {
@@ -55,7 +58,7 @@
// animation and error notification.
if (!mUserManager.isUserUnlocked()) {
Log.w(TAG, "Skipping screenshot because storage is locked!");
- post(finisher);
+ post(() -> finisher.accept(null));
return;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index 88b6fdd..ca11430 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -307,7 +307,7 @@
* Called to notify System UI that the warning about the device going to sleep
* due to prolonged user inactivity should be dismissed.
*/
- default void dismissInattentiveSleepWarning() { }
+ default void dismissInattentiveSleepWarning(boolean animated) { }
}
public CommandQueue(Context context) {
@@ -816,9 +816,9 @@
}
@Override
- public void dismissInattentiveSleepWarning() {
+ public void dismissInattentiveSleepWarning(boolean animated) {
synchronized (mLock) {
- mHandler.obtainMessage(MSG_DISMISS_INATTENTIVE_SLEEP_WARNING)
+ mHandler.obtainMessage(MSG_DISMISS_INATTENTIVE_SLEEP_WARNING, animated)
.sendToTarget();
}
}
@@ -1175,7 +1175,7 @@
break;
case MSG_DISMISS_INATTENTIVE_SLEEP_WARNING:
for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).dismissInattentiveSleepWarning();
+ mCallbacks.get(i).dismissInattentiveSleepWarning((Boolean) msg.obj);
}
break;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SuperStatusBarViewFactory.java b/packages/SystemUI/src/com/android/systemui/statusbar/SuperStatusBarViewFactory.java
index bc7c22d..9398e6f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SuperStatusBarViewFactory.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SuperStatusBarViewFactory.java
@@ -21,6 +21,8 @@
import android.view.ViewGroup;
import com.android.systemui.R;
+import com.android.systemui.statusbar.phone.LockIcon;
+import com.android.systemui.statusbar.phone.NotificationPanelView;
import com.android.systemui.statusbar.phone.StatusBarWindowView;
import com.android.systemui.util.InjectionInflationController;
@@ -66,6 +68,11 @@
return mStatusBarWindowView;
}
+ /** Gets the {@link LockIcon} inside of {@link R.layout#super_status_bar}. */
+ public LockIcon getLockIcon() {
+ return getStatusBarWindowView().findViewById(R.id.lock_icon);
+ }
+
/**
* Gets the inflated {@link NotificationShelf} from
* {@link R.layout#status_bar_notification_shelf}.
@@ -89,4 +96,13 @@
}
return mNotificationShelf;
}
+
+ public NotificationPanelView getNotificationPanelView() {
+ StatusBarWindowView statusBarWindowView = getStatusBarWindowView();
+ if (statusBarWindowView == null) {
+ return null;
+ }
+
+ return mStatusBarWindowView.findViewById(R.id.notification_panel);
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/ActivityLaunchAnimator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/ActivityLaunchAnimator.java
index e48e819..9b31234 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/ActivityLaunchAnimator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/ActivityLaunchAnimator.java
@@ -125,21 +125,22 @@
return mAnimationRunning;
}
- private class AnimationRunner extends IRemoteAnimationRunner.Stub {
+ class AnimationRunner extends IRemoteAnimationRunner.Stub {
- private ExpandableNotificationRow mSourceNotification;
- private final ExpandAnimationParameters mParams = new ExpandAnimationParameters();
+ private final ExpandableNotificationRow mSourceNotification;
+ private final ExpandAnimationParameters mParams;
private final Rect mWindowCrop = new Rect();
private final float mNotificationCornerRadius;
private float mCornerRadius;
private boolean mIsFullScreenLaunch = true;
private final SyncRtSurfaceTransactionApplier mSyncRtTransactionApplier;
- AnimationRunner(ExpandableNotificationRow sourceNotification) {
- mSourceNotification = sourceNotification;
- mSyncRtTransactionApplier = new SyncRtSurfaceTransactionApplier(sourceNotification);
- mNotificationCornerRadius = Math.max(sourceNotification.getCurrentTopRoundness(),
- sourceNotification.getCurrentBottomRoundness());
+ public AnimationRunner(ExpandableNotificationRow sourceNofitication) {
+ mSourceNotification = sourceNofitication;
+ mParams = new ExpandAnimationParameters();
+ mSyncRtTransactionApplier = new SyncRtSurfaceTransactionApplier(mSourceNotification);
+ mNotificationCornerRadius = Math.max(mSourceNotification.getCurrentTopRoundness(),
+ mSourceNotification.getCurrentBottomRoundness());
}
@Override
@@ -154,7 +155,6 @@
setAnimationPending(false);
invokeCallback(iRemoteAnimationFinishedCallback);
mNotificationPanel.collapse(false /* delayed */, 1.0f /* speedUpFactor */);
- mSourceNotification = null;
return;
}
@@ -254,7 +254,6 @@
mCallback.onExpandAnimationFinished(mIsFullScreenLaunch);
applyParamsToNotification(null);
applyParamsToNotificationList(null);
- mSourceNotification = null;
}
}
@@ -282,7 +281,6 @@
mSourceNotification.post(() -> {
setAnimationPending(false);
mCallback.onLaunchAnimationCancelled();
- mSourceNotification = null;
});
}
};
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 6aee194..063ad85 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
@@ -88,8 +88,9 @@
private final PulseExpansionHandler mPulseExpansionHandler;
private final StatusBarWindowController mStatusBarWindowController;
private final NotificationWakeUpCoordinator mNotificationWakeUpCoordinator;
+ private final StatusBarWindowViewController mStatusBarWindowViewController;
+ private final LockscreenLockIconController mLockscreenLockIconController;
private NotificationIconAreaController mNotificationIconAreaController;
- private StatusBarWindowViewController mStatusBarWindowViewController;
private StatusBarWindowView mStatusBarWindow;
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
private NotificationPanelView mNotificationPanel;
@@ -110,7 +111,9 @@
VisualStabilityManager visualStabilityManager,
PulseExpansionHandler pulseExpansionHandler,
StatusBarWindowController statusBarWindowController,
- NotificationWakeUpCoordinator notificationWakeUpCoordinator) {
+ NotificationWakeUpCoordinator notificationWakeUpCoordinator,
+ StatusBarWindowViewController statusBarWindowViewController,
+ LockscreenLockIconController lockscreenLockIconController) {
super();
mDozeLog = dozeLog;
mPowerManager = powerManager;
@@ -129,6 +132,8 @@
mPulseExpansionHandler = pulseExpansionHandler;
mStatusBarWindowController = statusBarWindowController;
mNotificationWakeUpCoordinator = notificationWakeUpCoordinator;
+ mStatusBarWindowViewController = statusBarWindowViewController;
+ mLockscreenLockIconController = lockscreenLockIconController;
}
// TODO: we should try to not pass status bar in here if we can avoid it.
@@ -138,13 +143,11 @@
*/
public void initialize(StatusBar statusBar,
NotificationIconAreaController notificationIconAreaController,
- StatusBarWindowViewController statusBarWindowViewController,
StatusBarWindowView statusBarWindow,
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
NotificationPanelView notificationPanel, View ambientIndicationContainer) {
mStatusBar = statusBar;
mNotificationIconAreaController = notificationIconAreaController;
- mStatusBarWindowViewController = statusBarWindowViewController;
mStatusBarWindow = statusBarWindow;
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
mNotificationPanel = notificationPanel;
@@ -262,7 +265,7 @@
mKeyguardViewMediator.setPulsing(pulsing);
mNotificationPanel.setPulsing(pulsing);
mVisualStabilityManager.setPulsing(pulsing);
- mStatusBarWindowViewController.setPulsing(pulsing);
+ mLockscreenLockIconController.setPulsing(pulsing);
mIgnoreTouchWhilePulsing = false;
if (mKeyguardUpdateMonitor != null && passiveAuthInterrupt) {
mKeyguardUpdateMonitor.onAuthInterruptDetected(pulsing /* active */);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java
new file mode 100644
index 0000000..1e35b46
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2019 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.statusbar.phone;
+
+import com.android.systemui.statusbar.SuperStatusBarViewFactory;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+/** Controls the {@link LockIcon} in the lockscreen. */
+@Singleton
+public class LockscreenLockIconController {
+
+ private final LockIcon mLockIcon;
+
+ @Inject
+ public LockscreenLockIconController(SuperStatusBarViewFactory superStatusBarViewFactory) {
+ mLockIcon = superStatusBarViewFactory.getLockIcon();
+ }
+
+ /**
+ * Called whenever the scrims become opaque, transparent or semi-transparent.
+ */
+ public void onScrimVisibilityChanged(Integer scrimsVisible) {
+ if (mLockIcon != null) {
+ mLockIcon.onScrimVisibilityChanged(scrimsVisible);
+ }
+ }
+
+ /**
+ * Propagate {@link StatusBar} pulsing state.
+ */
+ public void setPulsing(boolean pulsing) {
+ if (mLockIcon != null) {
+ mLockIcon.setPulsing(pulsing);
+ }
+ }
+
+ /**
+ * Called when the biometric authentication mode changes.
+ *
+ * @param wakeAndUnlock If the type is {@link BiometricUnlockController#isWakeAndUnlock()}
+ * @param isUnlock If the type is {@link BiometricUnlockController#isBiometricUnlock()} ()
+ */
+ public void onBiometricAuthModeChanged(boolean wakeAndUnlock, boolean isUnlock) {
+ if (mLockIcon != null) {
+ mLockIcon.onBiometricAuthModeChanged(wakeAndUnlock, isUnlock);
+ }
+ }
+
+ /**
+ * When we're launching an affordance, like double pressing power to open camera.
+ */
+ public void onShowingLaunchAffordanceChanged(Boolean showing) {
+ if (mLockIcon != null) {
+ mLockIcon.onShowingLaunchAffordanceChanged(showing);
+ }
+ }
+
+ /** Sets whether the bouncer is showing. */
+ public void setBouncerShowingScrimmed(boolean bouncerShowing) {
+ if (mLockIcon != null) {
+ mLockIcon.setBouncerShowingScrimmed(bouncerShowing);
+ }
+ }
+
+ /**
+ * When {@link KeyguardBouncer} starts to be dismissed and starts to play its animation.
+ */
+ public void onBouncerPreHideAnimation() {
+ if (mLockIcon != null) {
+ mLockIcon.onBouncerPreHideAnimation();
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index fafdf6a..06183b7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -30,8 +30,6 @@
import static android.view.WindowInsetsController.APPEARANCE_OPAQUE_TOP_BAR;
import static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME;
-import static com.android.systemui.Dependency.BG_HANDLER;
-import static com.android.systemui.Dependency.MAIN_HANDLER;
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_ASLEEP;
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWAKE;
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_WAKING;
@@ -123,7 +121,6 @@
import com.android.internal.statusbar.IStatusBarService;
import com.android.internal.statusbar.RegisterStatusBarResult;
import com.android.internal.view.AppearanceRegion;
-import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.keyguard.ViewMediatorCallback;
@@ -353,12 +350,12 @@
private final Point mCurrentDisplaySize = new Point();
- protected StatusBarWindowViewController mStatusBarWindowViewController;
protected StatusBarWindowView mStatusBarWindow;
protected PhoneStatusBarView mStatusBarView;
private int mStatusBarWindowState = WINDOW_STATE_SHOWING;
protected StatusBarWindowController mStatusBarWindowController;
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
+ private final LockscreenLockIconController mLockscreenLockIconController;
@VisibleForTesting
DozeServiceHost mDozeServiceHost;
private boolean mWakeUpComingFromTouch;
@@ -380,12 +377,14 @@
private final FalsingManager mFalsingManager;
private final BroadcastDispatcher mBroadcastDispatcher;
private final ConfigurationController mConfigurationController;
- private final StatusBarWindowViewController.Builder mStatusBarWindowViewControllerBuilder;
+ private final StatusBarWindowViewController mStatusBarWindowViewController;
private final DozeParameters mDozeParameters;
private final Lazy<BiometricUnlockController> mBiometricUnlockControllerLazy;
private final PluginManager mPluginManager;
private final RemoteInputUriController mRemoteInputUriController;
private final Optional<Divider> mDividerOptional;
+ private final StatusBarNotificationActivityStarter.Builder
+ mStatusBarNotificationActivityStarterBuilder;
private final SuperStatusBarViewFactory mSuperStatusBarViewFactory;
private final LightsOutNotifController mLightsOutNotifController;
private final DismissCallbackRegistry mDismissCallbackRegistry;
@@ -660,7 +659,8 @@
NotificationListener notificationListener,
ConfigurationController configurationController,
StatusBarWindowController statusBarWindowController,
- StatusBarWindowViewController.Builder statusBarWindowViewControllerBuilder,
+ StatusBarWindowViewController statusBarWindowViewController,
+ LockscreenLockIconController lockscreenLockIconController,
DozeParameters dozeParameters,
ScrimController scrimController,
@Nullable KeyguardLiftController keyguardLiftController,
@@ -677,6 +677,8 @@
RemoteInputUriController remoteInputUriController,
Optional<Divider> dividerOptional,
LightsOutNotifController lightsOutNotifController,
+ StatusBarNotificationActivityStarter.Builder
+ statusBarNotificationActivityStarterBuilder,
SuperStatusBarViewFactory superStatusBarViewFactory,
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
ViewMediatorCallback viewMediatorCallback,
@@ -730,7 +732,8 @@
mNotificationListener = notificationListener;
mConfigurationController = configurationController;
mStatusBarWindowController = statusBarWindowController;
- mStatusBarWindowViewControllerBuilder = statusBarWindowViewControllerBuilder;
+ mStatusBarWindowViewController = statusBarWindowViewController;
+ mLockscreenLockIconController = lockscreenLockIconController;
mDozeServiceHost = dozeServiceHost;
mPowerManager = powerManager;
mDozeParameters = dozeParameters;
@@ -746,7 +749,7 @@
mPluginManager = pluginManager;
mRemoteInputUriController = remoteInputUriController;
mDividerOptional = dividerOptional;
-
+ mStatusBarNotificationActivityStarterBuilder = statusBarNotificationActivityStarterBuilder;
mSuperStatusBarViewFactory = superStatusBarViewFactory;
mLightsOutNotifController = lightsOutNotifController;
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
@@ -892,7 +895,7 @@
mKeyguardUpdateMonitor.registerCallback(mUpdateCallback);
mDozeServiceHost.initialize(this, mNotificationIconAreaController,
- mStatusBarWindowViewController, mStatusBarWindow, mStatusBarKeyguardViewManager,
+ mStatusBarWindow, mStatusBarKeyguardViewManager,
mNotificationPanel, mAmbientIndicationContainer);
Dependency.get(ActivityStarterDelegate.class).setActivityStarterImpl(this);
@@ -965,7 +968,7 @@
// TODO: Deal with the ugliness that comes from having some of the statusbar broken out
// into fragments, but the rest here, it leaves some awkward lifecycle and whatnot.
- mNotificationPanel = mStatusBarWindow.findViewById(R.id.notification_panel);
+ mNotificationPanel = mSuperStatusBarViewFactory.getNotificationPanelView();
mStackScroller = mStatusBarWindow.findViewById(R.id.notification_stack_scroller);
NotificationListContainer notifListContainer = (NotificationListContainer) mStackScroller;
@@ -1091,7 +1094,7 @@
mScrimController.setScrimVisibleListener(scrimsVisible -> {
mStatusBarWindowController.setScrimsVisibility(scrimsVisible);
if (mStatusBarWindow != null) {
- mStatusBarWindowViewController.onScrimVisibilityChanged(scrimsVisible);
+ mLockscreenLockIconController.onScrimVisibilityChanged(scrimsVisible);
}
});
mScrimController.attachViews(scrimBehind, scrimInFront, scrimForBubble);
@@ -1109,7 +1112,7 @@
}
mNotificationPanel.setLaunchAffordanceListener(
- mStatusBarWindowViewController::onShowingLaunchAffordanceChanged);
+ mLockscreenLockIconController::onShowingLaunchAffordanceChanged);
// Set up the quick settings tile panel
View container = mStatusBarWindow.findViewById(R.id.qs_frame);
@@ -1226,6 +1229,7 @@
mStatusBarStateController,
mNotificationLogger);
+ // TODO: inject this.
mPresenter = new StatusBarNotificationPresenter(mContext, mNotificationPanel,
mHeadsUpManager, mStatusBarWindow, mStackScroller, mDozeScrimController,
mScrimController, mActivityLaunchAnimator, mDynamicPrivacyController,
@@ -1240,20 +1244,12 @@
mNotificationShelf.setOnActivatedListener(mPresenter);
mRemoteInputManager.getController().addCallback(mStatusBarWindowController);
- final StatusBarRemoteInputCallback mStatusBarRemoteInputCallback =
- (StatusBarRemoteInputCallback) Dependency.get(
- NotificationRemoteInputManager.Callback.class);
- final ActivityStarter activityStarter = Dependency.get(ActivityStarter.class);
-
- mNotificationActivityStarter = new StatusBarNotificationActivityStarter(mContext,
- mCommandQueue, mAssistManagerLazy.get(), mNotificationPanel, mPresenter,
- mEntryManager, mHeadsUpManager, activityStarter, mActivityLaunchAnimator,
- mBarService, mStatusBarStateController, mKeyguardManager, mDreamManager,
- mRemoteInputManager, mStatusBarRemoteInputCallback, mGroupManager,
- mLockscreenUserManager, this, mKeyguardStateController,
- mNotificationInterruptionStateProvider, mMetricsLogger,
- new LockPatternUtils(mContext), Dependency.get(MAIN_HANDLER),
- Dependency.get(BG_HANDLER), mActivityIntentHelper, mBubbleController);
+ mNotificationActivityStarter =
+ mStatusBarNotificationActivityStarterBuilder
+ .setShadeController(this)
+ .setActivityLaunchAnimator(mActivityLaunchAnimator)
+ .setNotificationPresenter(mPresenter)
+ .build();
mGutsManager.setNotificationActivityStarter(mNotificationActivityStarter);
@@ -1386,9 +1382,7 @@
protected void inflateStatusBarWindow(Context context) {
mStatusBarWindow = mSuperStatusBarViewFactory.getStatusBarWindowView();
- mStatusBarWindowViewController = mStatusBarWindowViewControllerBuilder
- .setShadeController(this)
- .build();
+ mStatusBarWindowViewController.setupExpandedStatusBar();
}
protected void startKeyguard() {
@@ -3693,7 +3687,7 @@
mBouncerShowing = bouncerShowing;
mKeyguardBypassController.setBouncerShowing(bouncerShowing);
mPulseExpansionHandler.setBouncerShowing(bouncerShowing);
- mStatusBarWindowViewController.setBouncerShowingScrimmed(isBouncerShowingScrimmed());
+ mLockscreenLockIconController.setBouncerShowingScrimmed(isBouncerShowingScrimmed());
if (mStatusBarView != null) mStatusBarView.setBouncerShowing(bouncerShowing);
updateHideIconsForBouncer(true /* animate */);
mCommandQueue.recomputeDisableFlags(mDisplayId, true /* animate */);
@@ -3944,7 +3938,7 @@
public void notifyBiometricAuthModeChanged() {
mDozeServiceHost.updateDozing();
updateScrimController();
- mStatusBarWindowViewController.onBiometricAuthModeChanged(
+ mLockscreenLockIconController.onBiometricAuthModeChanged(
mBiometricUnlockController.isWakeAndUnlock(),
mBiometricUnlockController.isBiometricUnlock());
}
@@ -4341,7 +4335,7 @@
*/
public void onBouncerPreHideAnimation() {
mNotificationPanel.onBouncerPreHideAnimation();
- mStatusBarWindowViewController.onBouncerPreHideAnimation();
+ mLockscreenLockIconController.onBouncerPreHideAnimation();
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarModule.java
index 88f1c63..5d69409 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarModule.java
@@ -143,7 +143,8 @@
NotificationListener notificationListener,
ConfigurationController configurationController,
StatusBarWindowController statusBarWindowController,
- StatusBarWindowViewController.Builder statusBarWindowViewControllerBuilder,
+ StatusBarWindowViewController statusBarWindowViewController,
+ LockscreenLockIconController lockscreenLockIconController,
DozeParameters dozeParameters,
ScrimController scrimController,
@Nullable KeyguardLiftController keyguardLiftController,
@@ -160,6 +161,8 @@
RemoteInputUriController remoteInputUriController,
Optional<Divider> dividerOptional,
LightsOutNotifController lightsOutNotifController,
+ StatusBarNotificationActivityStarter.Builder
+ statusBarNotificationActivityStarterBuilder,
SuperStatusBarViewFactory superStatusBarViewFactory,
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
ViewMediatorCallback viewMediatorCallback,
@@ -214,7 +217,8 @@
notificationListener,
configurationController,
statusBarWindowController,
- statusBarWindowViewControllerBuilder,
+ statusBarWindowViewController,
+ lockscreenLockIconController,
dozeParameters,
scrimController,
keyguardLiftController,
@@ -231,6 +235,7 @@
remoteInputUriController,
dividerOptional,
lightsOutNotifController,
+ statusBarNotificationActivityStarterBuilder,
superStatusBarViewFactory,
statusBarKeyguardViewManager,
viewMediatorCallback,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
index b340813..863874e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
@@ -52,6 +52,8 @@
import com.android.systemui.UiOffloadThread;
import com.android.systemui.assist.AssistManager;
import com.android.systemui.bubbles.BubbleController;
+import com.android.systemui.dagger.qualifiers.BgHandler;
+import com.android.systemui.dagger.qualifiers.MainHandler;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.CommandQueue;
@@ -60,6 +62,7 @@
import com.android.systemui.statusbar.NotificationRemoteInputManager;
import com.android.systemui.statusbar.RemoteInputController;
import com.android.systemui.statusbar.StatusBarState;
+import com.android.systemui.statusbar.SuperStatusBarViewFactory;
import com.android.systemui.statusbar.notification.ActivityLaunchAnimator;
import com.android.systemui.statusbar.notification.NotificationActivityStarter;
import com.android.systemui.statusbar.notification.NotificationEntryListener;
@@ -71,6 +74,11 @@
import com.android.systemui.statusbar.policy.HeadsUpUtil;
import com.android.systemui.statusbar.policy.KeyguardStateController;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import dagger.Lazy;
+
/**
* Status bar implementation of {@link NotificationActivityStarter}.
*/
@@ -79,7 +87,7 @@
private static final String TAG = "NotifActivityStarter";
protected static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
- private final AssistManager mAssistManager;
+ private final Lazy<AssistManager> mAssistManagerLazy;
private final NotificationGroupManager mGroupManager;
private final StatusBarRemoteInputCallback mStatusBarRemoteInputCallback;
private final NotificationRemoteInputManager mRemoteInputManager;
@@ -108,32 +116,20 @@
private boolean mIsCollapsingToShowActivityOverLockscreen;
- public StatusBarNotificationActivityStarter(Context context,
- CommandQueue commandQueue,
- AssistManager assistManager,
- NotificationPanelView panel,
- NotificationPresenter presenter,
- NotificationEntryManager entryManager,
- HeadsUpManagerPhone headsUpManager,
- ActivityStarter activityStarter,
- ActivityLaunchAnimator activityLaunchAnimator,
- IStatusBarService statusBarService,
- StatusBarStateController statusBarStateController,
- KeyguardManager keyguardManager,
- IDreamManager dreamManager,
- NotificationRemoteInputManager remoteInputManager,
- StatusBarRemoteInputCallback remoteInputCallback,
- NotificationGroupManager groupManager,
+ private StatusBarNotificationActivityStarter(Context context, CommandQueue commandQueue,
+ Lazy<AssistManager> assistManagerLazy, NotificationPanelView panel,
+ NotificationPresenter presenter, NotificationEntryManager entryManager,
+ HeadsUpManagerPhone headsUpManager, ActivityStarter activityStarter,
+ ActivityLaunchAnimator activityLaunchAnimator, IStatusBarService statusBarService,
+ StatusBarStateController statusBarStateController, KeyguardManager keyguardManager,
+ IDreamManager dreamManager, NotificationRemoteInputManager remoteInputManager,
+ StatusBarRemoteInputCallback remoteInputCallback, NotificationGroupManager groupManager,
NotificationLockscreenUserManager lockscreenUserManager,
- ShadeController shadeController,
- KeyguardStateController keyguardStateController,
+ ShadeController shadeController, KeyguardStateController keyguardStateController,
NotificationInterruptionStateProvider notificationInterruptionStateProvider,
- MetricsLogger metricsLogger,
- LockPatternUtils lockPatternUtils,
- Handler mainThreadHandler,
- Handler backgroundHandler,
- ActivityIntentHelper activityIntentHelper,
- BubbleController bubbleController) {
+ MetricsLogger metricsLogger, LockPatternUtils lockPatternUtils,
+ Handler mainThreadHandler, Handler backgroundHandler,
+ ActivityIntentHelper activityIntentHelper, BubbleController bubbleController) {
mContext = context;
mNotificationPanel = panel;
mPresenter = presenter;
@@ -152,7 +148,7 @@
mStatusBarStateController = statusBarStateController;
mNotificationInterruptionStateProvider = notificationInterruptionStateProvider;
mMetricsLogger = metricsLogger;
- mAssistManager = assistManager;
+ mAssistManagerLazy = assistManagerLazy;
mGroupManager = groupManager;
mLockPatternUtils = lockPatternUtils;
mBackgroundHandler = backgroundHandler;
@@ -318,7 +314,7 @@
startNotificationIntent(intent, fillInIntent, row, wasOccluded, isActivityIntent);
}
if (isActivityIntent || isBubble) {
- mAssistManager.hideAssist();
+ mAssistManagerLazy.get().hideAssist();
}
if (shouldCollapse()) {
collapseOnMainThread();
@@ -490,4 +486,128 @@
}
});
}
+
+ /**
+ * Public builder for {@link StatusBarNotificationActivityStarter}.
+ */
+ @Singleton
+ public static class Builder {
+ private final Context mContext;
+ private final CommandQueue mCommandQueue;
+ private final Lazy<AssistManager> mAssistManagerLazy;
+ private final NotificationEntryManager mEntryManager;
+ private final HeadsUpManagerPhone mHeadsUpManager;
+ private final ActivityStarter mActivityStarter;
+ private final IStatusBarService mStatusBarService;
+ private final StatusBarStateController mStatusBarStateController;
+ private final KeyguardManager mKeyguardManager;
+ private final IDreamManager mDreamManager;
+ private final NotificationRemoteInputManager mRemoteInputManager;
+ private final StatusBarRemoteInputCallback mRemoteInputCallback;
+ private final NotificationGroupManager mGroupManager;
+ private final NotificationLockscreenUserManager mLockscreenUserManager;
+ private final KeyguardStateController mKeyguardStateController;
+ private final NotificationInterruptionStateProvider mNotificationInterruptionStateProvider;
+ private final MetricsLogger mMetricsLogger;
+ private final LockPatternUtils mLockPatternUtils;
+ private final Handler mMainThreadHandler;
+ private final Handler mBackgroundHandler;
+ private final ActivityIntentHelper mActivityIntentHelper;
+ private final BubbleController mBubbleController;
+ private final SuperStatusBarViewFactory mSuperStatusBarViewFactory;
+ private ShadeController mShadeController;
+ private NotificationPresenter mNotificationPresenter;
+ private ActivityLaunchAnimator mActivityLaunchAnimator;
+
+ @Inject
+ public Builder(Context context,
+ CommandQueue commandQueue,
+ Lazy<AssistManager> assistManagerLazy,
+ NotificationEntryManager entryManager,
+ HeadsUpManagerPhone headsUpManager,
+ ActivityStarter activityStarter,
+ IStatusBarService statusBarService,
+ StatusBarStateController statusBarStateController,
+ KeyguardManager keyguardManager,
+ IDreamManager dreamManager,
+ NotificationRemoteInputManager remoteInputManager,
+ StatusBarRemoteInputCallback remoteInputCallback,
+ NotificationGroupManager groupManager,
+ NotificationLockscreenUserManager lockscreenUserManager,
+ KeyguardStateController keyguardStateController,
+ NotificationInterruptionStateProvider notificationInterruptionStateProvider,
+ MetricsLogger metricsLogger,
+ LockPatternUtils lockPatternUtils,
+ @MainHandler Handler mainThreadHandler,
+ @BgHandler Handler backgroundHandler,
+ ActivityIntentHelper activityIntentHelper,
+ BubbleController bubbleController,
+ SuperStatusBarViewFactory superStatusBarViewFactory) {
+ mContext = context;
+ mCommandQueue = commandQueue;
+ mAssistManagerLazy = assistManagerLazy;
+ mEntryManager = entryManager;
+ mHeadsUpManager = headsUpManager;
+ mActivityStarter = activityStarter;
+ mStatusBarService = statusBarService;
+ mStatusBarStateController = statusBarStateController;
+ mKeyguardManager = keyguardManager;
+ mDreamManager = dreamManager;
+ mRemoteInputManager = remoteInputManager;
+ mRemoteInputCallback = remoteInputCallback;
+ mGroupManager = groupManager;
+ mLockscreenUserManager = lockscreenUserManager;
+ mKeyguardStateController = keyguardStateController;
+ mNotificationInterruptionStateProvider = notificationInterruptionStateProvider;
+ mMetricsLogger = metricsLogger;
+ mLockPatternUtils = lockPatternUtils;
+ mMainThreadHandler = mainThreadHandler;
+ mBackgroundHandler = backgroundHandler;
+ mActivityIntentHelper = activityIntentHelper;
+ mBubbleController = bubbleController;
+ mSuperStatusBarViewFactory = superStatusBarViewFactory;
+ }
+ public Builder setShadeController(ShadeController shadeController) {
+ mShadeController = shadeController;
+ return this;
+ }
+
+ public Builder setNotificationPresenter(NotificationPresenter notificationPresenter) {
+ mNotificationPresenter = notificationPresenter;
+ return this;
+ }
+
+ public Builder setActivityLaunchAnimator(ActivityLaunchAnimator activityLaunchAnimator) {
+ mActivityLaunchAnimator = activityLaunchAnimator;
+ return this;
+ }
+
+ public StatusBarNotificationActivityStarter build() {
+ return new StatusBarNotificationActivityStarter(mContext,
+ mCommandQueue, mAssistManagerLazy,
+ mSuperStatusBarViewFactory.getNotificationPanelView(),
+ mNotificationPresenter,
+ mEntryManager,
+ mHeadsUpManager,
+ mActivityStarter,
+ mActivityLaunchAnimator,
+ mStatusBarService,
+ mStatusBarStateController,
+ mKeyguardManager,
+ mDreamManager,
+ mRemoteInputManager,
+ mRemoteInputCallback,
+ mGroupManager,
+ mLockscreenUserManager,
+ mShadeController,
+ mKeyguardStateController,
+ mNotificationInterruptionStateProvider,
+ mMetricsLogger,
+ mLockPatternUtils,
+ mMainThreadHandler,
+ mBackgroundHandler,
+ mActivityIntentHelper,
+ mBubbleController);
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java
index 322b23f..3e6ba4d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java
@@ -50,6 +50,8 @@
import javax.inject.Inject;
import javax.inject.Singleton;
+import dagger.Lazy;
+
/**
*/
@Singleton
@@ -60,7 +62,7 @@
private final SysuiStatusBarStateController mStatusBarStateController;
private final NotificationLockscreenUserManager mLockscreenUserManager;
private final ActivityStarter mActivityStarter;
- private final ShadeController mShadeController;
+ private final Lazy<ShadeController> mShadeControllerLazy;
private final Context mContext;
private final ActivityIntentHelper mActivityIntentHelper;
private final NotificationGroupManager mGroupManager;
@@ -79,7 +81,7 @@
NotificationLockscreenUserManager notificationLockscreenUserManager,
KeyguardStateController keyguardStateController,
StatusBarStateController statusBarStateController,
- ActivityStarter activityStarter, ShadeController shadeController,
+ ActivityStarter activityStarter, Lazy<ShadeController> shadeControllerLazy,
CommandQueue commandQueue) {
mContext = context;
mContext.registerReceiverAsUser(mChallengeReceiver, UserHandle.ALL,
@@ -87,7 +89,7 @@
mLockscreenUserManager = notificationLockscreenUserManager;
mKeyguardStateController = keyguardStateController;
mStatusBarStateController = (SysuiStatusBarStateController) statusBarStateController;
- mShadeController = shadeController;
+ mShadeControllerLazy = shadeControllerLazy;
mActivityStarter = activityStarter;
mStatusBarStateController.addCallback(this);
mKeyguardManager = context.getSystemService(KeyguardManager.class);
@@ -116,7 +118,7 @@
if (!row.isPinned()) {
mStatusBarStateController.setLeaveOpenOnKeyguardHide(true);
}
- mShadeController.showBouncer(true /* scrimmed */);
+ mShadeControllerLazy.get().showBouncer(true /* scrimmed */);
mPendingRemoteInputView = clicked;
}
@@ -162,8 +164,8 @@
});
}
};
- mShadeController.postOnShadeExpanded(clickPendingViewRunnable);
- mShadeController.instantExpandNotificationsPanel();
+ mShadeControllerLazy.get().postOnShadeExpanded(clickPendingViewRunnable);
+ mShadeControllerLazy.get().instantExpandNotificationsPanel();
}
}
@@ -251,7 +253,7 @@
boolean handled = defaultHandler.handleClick();
// close the shade if it was open and maybe wait for activity start.
- return handled && mShadeController.closeShadeIfOpen();
+ return handled && mShadeControllerLazy.get().closeShadeIfOpen();
}, null, afterKeyguardGone);
return true;
} else {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowViewController.java
index 6d6a1fe..feac5da 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowViewController.java
@@ -38,7 +38,6 @@
import com.android.systemui.dock.DockManager;
import com.android.systemui.doze.DozeLog;
import com.android.systemui.plugins.FalsingManager;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.shared.plugins.PluginManager;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.DragDownHelper;
@@ -58,21 +57,40 @@
import java.io.PrintWriter;
import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import dagger.Lazy;
/**
* Controller for {@link StatusBarWindowView}.
*/
+@Singleton
public class StatusBarWindowViewController {
- private final StatusBarWindowView mView;
+ private final InjectionInflationController mInjectionInflationController;
+ private final NotificationWakeUpCoordinator mCoordinator;
+ private final PulseExpansionHandler mPulseExpansionHandler;
+ private final DynamicPrivacyController mDynamicPrivacyController;
+ private final KeyguardBypassController mBypassController;
+ private final PluginManager mPluginManager;
private final FalsingManager mFalsingManager;
- private final GestureDetector mGestureDetector;
+ private final TunerService mTunerService;
+ private final NotificationLockscreenUserManager mNotificationLockscreenUserManager;
+ private final NotificationEntryManager mNotificationEntryManager;
+ private final KeyguardStateController mKeyguardStateController;
+ private final SysuiStatusBarStateController mStatusBarStateController;
+ private final DozeLog mDozeLog;
+ private final DozeParameters mDozeParameters;
+ private final CommandQueue mCommandQueue;
+ private final StatusBarWindowView mView;
+ private final Lazy<ShadeController> mShadeControllerLazy;
+
+ private GestureDetector mGestureDetector;
private View mBrightnessMirror;
private boolean mTouchActive;
private boolean mTouchCancelled;
private boolean mExpandAnimationPending;
private boolean mExpandAnimationRunning;
private NotificationStackScrollLayout mStackScrollLayout;
- private LockIcon mLockIcon;
private PhoneStatusBarView mStatusBarView;
private StatusBar mService;
private DragDownHelper mDragDownHelper;
@@ -81,8 +99,8 @@
private boolean mExpandingBelowNotch;
private final DockManager mDockManager;
- private StatusBarWindowViewController(
- StatusBarWindowView view,
+ @Inject
+ public StatusBarWindowViewController(
InjectionInflationController injectionInflationController,
NotificationWakeUpCoordinator coordinator,
PulseExpansionHandler pulseExpansionHandler,
@@ -91,7 +109,6 @@
FalsingManager falsingManager,
PluginManager pluginManager,
TunerService tunerService,
- ShadeController shadeController,
NotificationLockscreenUserManager notificationLockscreenUserManager,
NotificationEntryManager notificationEntryManager,
KeyguardStateController keyguardStateController,
@@ -99,47 +116,68 @@
DozeLog dozeLog,
DozeParameters dozeParameters,
CommandQueue commandQueue,
+ SuperStatusBarViewFactory superStatusBarViewFactory,
+ Lazy<ShadeController> shadeControllerLazy,
DockManager dockManager) {
- mView = view;
+ mInjectionInflationController = injectionInflationController;
+ mCoordinator = coordinator;
+ mPulseExpansionHandler = pulseExpansionHandler;
+ mDynamicPrivacyController = dynamicPrivacyController;
+ mBypassController = bypassController;
mFalsingManager = falsingManager;
+ mPluginManager = pluginManager;
+ mTunerService = tunerService;
+ mNotificationLockscreenUserManager = notificationLockscreenUserManager;
+ mNotificationEntryManager = notificationEntryManager;
+ mKeyguardStateController = keyguardStateController;
+ mStatusBarStateController = statusBarStateController;
+ mDozeLog = dozeLog;
+ mDozeParameters = dozeParameters;
+ mCommandQueue = commandQueue;
+ mView = superStatusBarViewFactory.getStatusBarWindowView();
+ mShadeControllerLazy = shadeControllerLazy;
mDockManager = dockManager;
+ // This view is not part of the newly inflated expanded status bar.
+ mBrightnessMirror = mView.findViewById(R.id.brightness_mirror);
+ }
+
+ /** Inflates the {@link R.layout#status_bar_expanded} layout and sets it up. */
+ public void setupExpandedStatusBar() {
// TODO: create controller for NotificationPanelView
NotificationPanelView notificationPanelView = new NotificationPanelView(
- view.getContext(),
+ mView.getContext(),
null,
- injectionInflationController,
- coordinator,
- pulseExpansionHandler,
- dynamicPrivacyController,
- bypassController,
- falsingManager,
- pluginManager,
- shadeController,
- notificationLockscreenUserManager,
- notificationEntryManager,
- keyguardStateController,
- statusBarStateController,
- dozeLog,
- dozeParameters,
- commandQueue);
+ mInjectionInflationController,
+ mCoordinator,
+ mPulseExpansionHandler,
+ mDynamicPrivacyController,
+ mBypassController,
+ mFalsingManager,
+ mPluginManager,
+ mShadeControllerLazy.get(),
+ mNotificationLockscreenUserManager,
+ mNotificationEntryManager,
+ mKeyguardStateController,
+ mStatusBarStateController,
+ mDozeLog,
+ mDozeParameters,
+ mCommandQueue);
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
notificationPanelView.setVisibility(View.INVISIBLE);
notificationPanelView.setId(R.id.notification_panel);
- LayoutInflater li = injectionInflationController.injectable(
+ LayoutInflater li = mInjectionInflationController.injectable(
LayoutInflater.from(mView.getContext()));
li.inflate(R.layout.status_bar_expanded, notificationPanelView);
notificationPanelView.onChildrenAttached();
- ViewStub statusBarExpanded = view.findViewById(R.id.status_bar_expanded);
+ ViewStub statusBarExpanded = mView.findViewById(R.id.status_bar_expanded);
mView.addView(notificationPanelView, mView.indexOfChild(statusBarExpanded), lp);
mView.removeView(statusBarExpanded);
mStackScrollLayout = mView.findViewById(R.id.notification_stack_scroller);
- mLockIcon = mView.findViewById(R.id.lock_icon);
- mBrightnessMirror = mView.findViewById(R.id.brightness_mirror);
TunerService.Tunable tunable = (key, newValue) -> {
AmbientDisplayConfiguration configuration =
@@ -153,7 +191,7 @@
mSingleTapEnabled = configuration.tapGestureEnabled(UserHandle.USER_CURRENT);
}
};
- tunerService.addTunable(tunable,
+ mTunerService.addTunable(tunable,
Settings.Secure.DOZE_DOUBLE_TAP_GESTURE,
Settings.Secure.DOZE_TAP_SCREEN_GESTURE);
@@ -225,7 +263,7 @@
}
}
if (isDown) {
- getStackScrollLayout().closeControlsIfOutsideTouch(ev);
+ mStackScrollLayout.closeControlsIfOutsideTouch(ev);
}
if (mService.isDozing()) {
mService.mDozeScrimController.extendPulse();
@@ -266,10 +304,9 @@
@Override
public void didIntercept(MotionEvent ev) {
- NotificationStackScrollLayout stackScrollLayout = getStackScrollLayout();
MotionEvent cancellation = MotionEvent.obtain(ev);
cancellation.setAction(MotionEvent.ACTION_CANCEL);
- stackScrollLayout.onInterceptTouchEvent(cancellation);
+ mStackScrollLayout.onInterceptTouchEvent(cancellation);
notificationPanelView.onInterceptTouchEvent(cancellation);
cancellation.recycle();
}
@@ -347,6 +384,13 @@
public void onChildViewRemoved(View parent, View child) {
}
});
+
+ ExpandHelper.Callback expandHelperCallback = mStackScrollLayout.getExpandHelperCallback();
+ DragDownHelper.DragDownCallback dragDownCallback = mStackScrollLayout.getDragDownCallback();
+ setDragDownHelper(
+ new DragDownHelper(
+ mView.getContext(), mView, expandHelperCallback,
+ dragDownCallback, mFalsingManager));
}
public StatusBarWindowView getView() {
@@ -389,44 +433,8 @@
}
public void cancelExpandHelper() {
- NotificationStackScrollLayout stackScrollLayout = getStackScrollLayout();
- if (stackScrollLayout != null) {
- stackScrollLayout.cancelExpandHelper();
- }
- }
-
- @VisibleForTesting
- protected NotificationStackScrollLayout getStackScrollLayout() {
- return mStackScrollLayout;
- }
-
- /**
- * Called whenever the scrims become opaque, transparent or semi-transparent.
- */
- public void onScrimVisibilityChanged(Integer scrimsVisible) {
- if (mLockIcon != null) {
- mLockIcon.onScrimVisibilityChanged(scrimsVisible);
- }
- }
-
- /**
- * Propagate {@link StatusBar} pulsing state.
- */
- public void setPulsing(boolean pulsing) {
- if (mLockIcon != null) {
- mLockIcon.setPulsing(pulsing);
- }
- }
-
- /**
- * Called when the biometric authentication mode changes.
- *
- * @param wakeAndUnlock If the type is {@link BiometricUnlockController#isWakeAndUnlock()}
- * @param isUnlock If the type is {@link BiometricUnlockController#isBiometricUnlock()} ()
- */
- public void onBiometricAuthModeChanged(boolean wakeAndUnlock, boolean isUnlock) {
- if (mLockIcon != null) {
- mLockIcon.onBiometricAuthModeChanged(wakeAndUnlock, isUnlock);
+ if (mStackScrollLayout != null) {
+ mStackScrollLayout.cancelExpandHelper();
}
}
@@ -436,138 +444,10 @@
public void setService(StatusBar statusBar) {
mService = statusBar;
- NotificationStackScrollLayout stackScrollLayout = getStackScrollLayout();
- ExpandHelper.Callback expandHelperCallback = stackScrollLayout.getExpandHelperCallback();
- DragDownHelper.DragDownCallback dragDownCallback = stackScrollLayout.getDragDownCallback();
- setDragDownHelper(
- new DragDownHelper(
- mView.getContext(), mView, expandHelperCallback,
- dragDownCallback, mFalsingManager));
}
@VisibleForTesting
void setDragDownHelper(DragDownHelper dragDownHelper) {
mDragDownHelper = dragDownHelper;
}
-
- /**
- * When we're launching an affordance, like double pressing power to open camera.
- */
- public void onShowingLaunchAffordanceChanged(Boolean showing) {
- if (mLockIcon != null) {
- mLockIcon.onShowingLaunchAffordanceChanged(showing);
- }
- }
-
- public void setBouncerShowingScrimmed(boolean bouncerShowing) {
- if (mLockIcon != null) {
- mLockIcon.setBouncerShowingScrimmed(bouncerShowing);
- }
- }
-
- /**
- * When {@link KeyguardBouncer} starts to be dismissed and starts to play its animation.
- */
- public void onBouncerPreHideAnimation() {
- if (mLockIcon != null) {
- mLockIcon.onBouncerPreHideAnimation();
- }
- }
-
- /**
- * Builder for {@link StatusBarWindowViewController}.
- */
- public static class Builder {
- private final InjectionInflationController mInjectionInflationController;
- private final NotificationWakeUpCoordinator mCoordinator;
- private final PulseExpansionHandler mPulseExpansionHandler;
- private final DynamicPrivacyController mDynamicPrivacyController;
- private final KeyguardBypassController mBypassController;
- private final FalsingManager mFalsingManager;
- private final PluginManager mPluginManager;
- private final TunerService mTunerService;
- private final KeyguardStateController mKeyguardStateController;
- private final SysuiStatusBarStateController mStatusBarStateController;
- private ShadeController mShadeController;
- private final NotificationLockscreenUserManager mNotificationLockScreenUserManager;
- private final NotificationEntryManager mNotificationEntryManager;
- private final DozeLog mDozeLog;
- private final DozeParameters mDozeParameters;
- private final CommandQueue mCommandQueue;
- private final SuperStatusBarViewFactory mSuperStatusBarViewFactory;
- private final StatusBarWindowView mView;
- private final DockManager mDockManager;
-
- @Inject
- public Builder(
- InjectionInflationController injectionInflationController,
- NotificationWakeUpCoordinator coordinator,
- PulseExpansionHandler pulseExpansionHandler,
- DynamicPrivacyController dynamicPrivacyController,
- KeyguardBypassController bypassController,
- FalsingManager falsingManager,
- PluginManager pluginManager,
- TunerService tunerService,
- NotificationLockscreenUserManager notificationLockscreenUserManager,
- NotificationEntryManager notificationEntryManager,
- KeyguardStateController keyguardStateController,
- StatusBarStateController statusBarStateController,
- DozeLog dozeLog,
- DozeParameters dozeParameters,
- CommandQueue commandQueue,
- SuperStatusBarViewFactory superStatusBarViewFactory,
- DockManager dockManager) {
- mInjectionInflationController = injectionInflationController;
- mCoordinator = coordinator;
- mPulseExpansionHandler = pulseExpansionHandler;
- mDynamicPrivacyController = dynamicPrivacyController;
- mBypassController = bypassController;
- mFalsingManager = falsingManager;
- mPluginManager = pluginManager;
- mTunerService = tunerService;
- mNotificationLockScreenUserManager = notificationLockscreenUserManager;
- mNotificationEntryManager = notificationEntryManager;
- mKeyguardStateController = keyguardStateController;
- mStatusBarStateController = (SysuiStatusBarStateController) statusBarStateController;
- mDozeLog = dozeLog;
- mDozeParameters = dozeParameters;
- mCommandQueue = commandQueue;
- mSuperStatusBarViewFactory = superStatusBarViewFactory;
- mView = mSuperStatusBarViewFactory.getStatusBarWindowView();
- mDockManager = dockManager;
- }
-
- /**
- * Provide {@link ShadeController} that this view needs.
- */
- public Builder setShadeController(ShadeController shadeController) {
- mShadeController = shadeController;
- return this;
- }
-
- /**
- * Build a {@link StatusBarWindowView}.
- */
- public StatusBarWindowViewController build() {
- return new StatusBarWindowViewController(
- mView,
- mInjectionInflationController,
- mCoordinator,
- mPulseExpansionHandler,
- mDynamicPrivacyController,
- mBypassController,
- mFalsingManager,
- mPluginManager,
- mTunerService,
- mShadeController,
- mNotificationLockScreenUserManager,
- mNotificationEntryManager,
- mKeyguardStateController,
- mStatusBarStateController,
- mDozeLog,
- mDozeParameters,
- mCommandQueue,
- mDockManager);
- }
- }
}
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 f0f9420..dc80906 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java
@@ -33,13 +33,13 @@
import com.android.settingslib.fuelgauge.BatterySaverUtils;
import com.android.settingslib.fuelgauge.Estimate;
import com.android.settingslib.utils.PowerUtil;
-import com.android.systemui.Dependency;
import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.dagger.qualifiers.BgHandler;
+import com.android.systemui.dagger.qualifiers.MainHandler;
import com.android.systemui.power.EnhancedEstimates;
import java.io.FileDescriptor;
import java.io.PrintWriter;
-import java.text.NumberFormat;
import java.util.ArrayList;
import javax.inject.Inject;
@@ -53,42 +53,39 @@
public class BatteryControllerImpl extends BroadcastReceiver implements BatteryController {
private static final String TAG = "BatteryController";
- public static final String ACTION_LEVEL_TEST = "com.android.systemui.BATTERY_LEVEL_TEST";
+ private static final String ACTION_LEVEL_TEST = "com.android.systemui.BATTERY_LEVEL_TEST";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
- private static final int UPDATE_GRANULARITY_MSEC = 1000 * 60;
private final EnhancedEstimates mEstimates;
private final BroadcastDispatcher mBroadcastDispatcher;
- private final ArrayList<BatteryController.BatteryStateChangeCallback> mChangeCallbacks = new ArrayList<>();
+ private final ArrayList<BatteryController.BatteryStateChangeCallback>
+ mChangeCallbacks = new ArrayList<>();
private final ArrayList<EstimateFetchCompletion> mFetchCallbacks = new ArrayList<>();
private final PowerManager mPowerManager;
- private final Handler mHandler;
+ private final Handler mMainHandler;
+ private final Handler mBgHandler;
private final Context mContext;
- protected int mLevel;
- protected boolean mPluggedIn;
- protected boolean mCharging;
- protected boolean mCharged;
- protected boolean mPowerSave;
- protected boolean mAodPowerSave;
+ private int mLevel;
+ private boolean mPluggedIn;
+ private boolean mCharging;
+ private boolean mCharged;
+ private boolean mPowerSave;
+ private boolean mAodPowerSave;
private boolean mTestmode = false;
private boolean mHasReceivedBattery = false;
private Estimate mEstimate;
private boolean mFetchingEstimate = false;
- @Inject
- public BatteryControllerImpl(Context context, EnhancedEstimates enhancedEstimates,
- BroadcastDispatcher broadcastDispatcher) {
- this(context, enhancedEstimates, context.getSystemService(PowerManager.class),
- broadcastDispatcher);
- }
-
@VisibleForTesting
+ @Inject
BatteryControllerImpl(Context context, EnhancedEstimates enhancedEstimates,
- PowerManager powerManager, BroadcastDispatcher broadcastDispatcher) {
+ PowerManager powerManager, BroadcastDispatcher broadcastDispatcher,
+ @MainHandler Handler mainHandler, @BgHandler Handler bgHandler) {
mContext = context;
- mHandler = new Handler();
+ mMainHandler = mainHandler;
+ mBgHandler = bgHandler;
mPowerManager = powerManager;
mEstimates = enhancedEstimates;
mBroadcastDispatcher = broadcastDispatcher;
@@ -162,7 +159,7 @@
setPowerSave(intent.getBooleanExtra(PowerManager.EXTRA_POWER_SAVE_MODE, false));
} else if (action.equals(ACTION_LEVEL_TEST)) {
mTestmode = true;
- mHandler.post(new Runnable() {
+ mMainHandler.post(new Runnable() {
int curLevel = 0;
int incr = 1;
int saveLevel = mLevel;
@@ -189,7 +186,7 @@
if (curLevel == 100) {
incr *= -1;
}
- mHandler.postDelayed(this, 200);
+ mMainHandler.postDelayed(this, 200);
}
});
}
@@ -222,7 +219,6 @@
return null;
}
- String percentage = NumberFormat.getPercentInstance().format((double) mLevel / 100.0);
return PowerUtil.getBatteryRemainingShortStringFormatted(
mContext, mEstimate.getEstimateMillis());
}
@@ -235,7 +231,7 @@
}
mFetchingEstimate = true;
- Dependency.get(Dependency.BG_HANDLER).post(() -> {
+ mBgHandler.post(() -> {
// Only fetch the estimate if they are enabled
synchronized (mFetchCallbacks) {
mEstimate = null;
@@ -244,7 +240,7 @@
}
}
mFetchingEstimate = false;
- Dependency.get(Dependency.MAIN_HANDLER).post(this::notifyEstimateFetchCallbacks);
+ mMainHandler.post(this::notifyEstimateFetchCallbacks);
});
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java
index a441f66..5a43321 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java
@@ -128,7 +128,7 @@
}
public void handleBootCompleted() {
- mWifiManager.registerTrafficStateCallback(new WifiTrafficStateCallback(), null);
+ mWifiManager.registerTrafficStateCallback(new WifiTrafficStateCallback());
}
/**
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java
index 105dbad..222fcb6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java
@@ -90,6 +90,7 @@
@Mock private NotificationPanelView mNotificationPanel;
@Mock private View mAmbientIndicationContainer;
@Mock private BiometricUnlockController mBiometricUnlockController;
+ @Mock private LockscreenLockIconController mLockscreenLockIconController;
@Before
public void setup() {
@@ -99,11 +100,11 @@
mBatteryController, mScrimController, () -> mBiometricUnlockController,
mKeyguardViewMediator, () -> mAssistManager, mDozeScrimController,
mKeyguardUpdateMonitor, mVisualStabilityManager, mPulseExpansionHandler,
- mStatusBarWindowController, mNotificationWakeUpCoordinator);
+ mStatusBarWindowController, mNotificationWakeUpCoordinator,
+ mStatusBarWindowViewController, mLockscreenLockIconController);
- mDozeServiceHost.initialize(mStatusBar, mNotificationIconAreaController,
- mStatusBarWindowViewController, mStatusBarWindow, mStatusBarKeyguardViewManager,
- mNotificationPanel, mAmbientIndicationContainer);
+ mDozeServiceHost.initialize(mStatusBar, mNotificationIconAreaController, mStatusBarWindow,
+ mStatusBarKeyguardViewManager, mNotificationPanel, mAmbientIndicationContainer);
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java
index 07be0d7..6f5cfbe 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java
@@ -64,6 +64,7 @@
import com.android.systemui.statusbar.NotificationTestHelper;
import com.android.systemui.statusbar.RemoteInputController;
import com.android.systemui.statusbar.StatusBarState;
+import com.android.systemui.statusbar.SuperStatusBarViewFactory;
import com.android.systemui.statusbar.notification.ActivityLaunchAnimator;
import com.android.systemui.statusbar.notification.NotificationActivityStarter;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
@@ -116,8 +117,11 @@
@Mock
private Intent mContentIntentInner;
@Mock
-
private NotificationActivityStarter mNotificationActivityStarter;
+ @Mock
+ private SuperStatusBarViewFactory mSuperStatusBarViewFactory;
+ @Mock
+ private NotificationPanelView mNotificationPanelView;
private NotificationTestHelper mNotificationTestHelper;
private ExpandableNotificationRow mNotificationRow;
@@ -156,19 +160,25 @@
mActiveNotifications.add(mBubbleNotificationRow.getEntry());
when(mEntryManager.getVisibleNotifications()).thenReturn(mActiveNotifications);
when(mStatusBarStateController.getState()).thenReturn(StatusBarState.SHADE);
+ when(mSuperStatusBarViewFactory.getNotificationPanelView())
+ .thenReturn(mNotificationPanelView);
- mNotificationActivityStarter = new StatusBarNotificationActivityStarter(getContext(),
- mock(CommandQueue.class), mAssistManager, mock(NotificationPanelView.class),
- mock(NotificationPresenter.class), mEntryManager, mock(HeadsUpManagerPhone.class),
- mActivityStarter, mock(ActivityLaunchAnimator.class), mStatusBarService,
+ mNotificationActivityStarter = (new StatusBarNotificationActivityStarter.Builder(
+ getContext(), mock(CommandQueue.class), () -> mAssistManager,
+ mEntryManager, mock(HeadsUpManagerPhone.class),
+ mActivityStarter, mStatusBarService,
mock(StatusBarStateController.class), mock(KeyguardManager.class),
mock(IDreamManager.class), mRemoteInputManager,
mock(StatusBarRemoteInputCallback.class), mock(NotificationGroupManager.class),
- mock(NotificationLockscreenUserManager.class), mShadeController,
+ mock(NotificationLockscreenUserManager.class),
mKeyguardStateController,
mock(NotificationInterruptionStateProvider.class), mock(MetricsLogger.class),
mock(LockPatternUtils.class), mHandler, mHandler, mActivityIntentHelper,
- mBubbleController);
+ mBubbleController, mSuperStatusBarViewFactory))
+ .setShadeController(mShadeController)
+ .setNotificationPresenter(mock(NotificationPresenter.class))
+ .setActivityLaunchAnimator(mock(ActivityLaunchAnimator.class))
+ .build();
// set up dismissKeyguardThenExecute to synchronously invoke the OnDismissAction arg
doAnswer(mCallOnDismiss).when(mActivityStarter).dismissKeyguardThenExecute(
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java
index b1b66b5..9d76b42 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java
@@ -72,7 +72,7 @@
mRemoteInputCallback = spy(new StatusBarRemoteInputCallback(mContext,
mock(NotificationGroupManager.class), mNotificationLockscreenUserManager,
mKeyguardStateController, mStatusBarStateController, mActivityStarter,
- mShadeController, new CommandQueue(mContext)));
+ () -> mShadeController, new CommandQueue(mContext)));
mRemoteInputCallback.mChallengeReceiver = mRemoteInputCallback.new ChallengeReceiver();
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
index 1f2df65..e78fb9e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
@@ -216,7 +216,6 @@
@Mock private NotificationGroupAlertTransferHelper mGroupAlertTransferHelper;
@Mock private StatusBarWindowController mStatusBarWindowController;
@Mock private NotificationIconAreaController mNotificationIconAreaController;
- @Mock private StatusBarWindowViewController.Builder mStatusBarWindowViewControllerBuilder;
@Mock private StatusBarWindowViewController mStatusBarWindowViewController;
@Mock private DozeParameters mDozeParameters;
@Mock private Lazy<LockscreenWallpaper> mLockscreenWallpaperLazy;
@@ -236,6 +235,9 @@
@Mock private DismissCallbackRegistry mDismissCallbackRegistry;
@Mock private ScreenPinningRequest mScreenPinningRequest;
@Mock private NotificationEntryManager mEntryManager;
+ @Mock private LockscreenLockIconController mLockscreenLockIconController;
+ @Mock private StatusBarNotificationActivityStarter.Builder
+ mStatusBarNotificationActivityStarterBuilder;
@Before
public void setup() throws Exception {
@@ -295,9 +297,6 @@
when(mColorExtractor.getNeutralColors()).thenReturn(mGradientColors);
ConfigurationController configurationController = new ConfigurationControllerImpl(mContext);
- when(mStatusBarWindowViewControllerBuilder.build())
- .thenReturn(mStatusBarWindowViewController);
-
when(mLockscreenWallpaperLazy.get()).thenReturn(mLockscreenWallpaper);
when(mBiometricUnlockControllerLazy.get()).thenReturn(mBiometricUnlockController);
@@ -355,7 +354,8 @@
mNotificationListener,
configurationController,
mStatusBarWindowController,
- mStatusBarWindowViewControllerBuilder,
+ mStatusBarWindowViewController,
+ mLockscreenLockIconController,
mDozeParameters,
mScrimController,
mKeyguardLiftController,
@@ -371,6 +371,7 @@
mRemoteInputUriController,
Optional.of(mDivider),
mLightsOutNotifController,
+ mStatusBarNotificationActivityStarterBuilder,
mSuperStatusBarViewFactory,
mStatusBarKeyguardViewManager,
mViewMediatorCallback,
@@ -397,7 +398,6 @@
mStatusBar.mKeyguardIndicationController = mKeyguardIndicationController;
mStatusBar.mBarService = mBarService;
mStatusBar.mStackScroller = mStackScroller;
- mStatusBar.mStatusBarWindowViewController = mStatusBarWindowViewController;
mStatusBar.startKeyguard();
Dependency.get(InitController.class).executePostInitTasks();
notificationLogger.setUpWithContainer(mStackScroller);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowViewTest.java
index e08551a..ee9ea9f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowViewTest.java
@@ -88,7 +88,7 @@
when(mSuperStatusBarViewFactory.getStatusBarWindowView()).thenReturn(mView);
when(mDockManager.isDocked()).thenReturn(false);
- mController = new StatusBarWindowViewController.Builder(
+ mController = new StatusBarWindowViewController(
new InjectionInflationController(
SystemUIFactory.getInstance().getRootComponent()),
mCoordinator,
@@ -106,9 +106,9 @@
mDozeParameters,
new CommandQueue(mContext),
mSuperStatusBarViewFactory,
- mDockManager)
- .setShadeController(mShadeController)
- .build();
+ () -> mShadeController,
+ mDockManager);
+ mController.setupExpandedStatusBar();
mController.setService(mStatusBar);
mController.setDragDownHelper(mDragDownHelper);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java
index 48ed4ba..05a4867 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java
@@ -20,6 +20,7 @@
import static org.mockito.Mockito.when;
import android.content.Intent;
+import android.os.Handler;
import android.os.PowerManager;
import android.os.PowerSaveState;
import android.test.suitebuilder.annotation.SmallTest;
@@ -53,7 +54,7 @@
public void setUp() {
MockitoAnnotations.initMocks(this);
mBatteryController = new BatteryControllerImpl(getContext(), mock(EnhancedEstimates.class),
- mPowerManager, mBroadcastDispatcher);
+ mPowerManager, mBroadcastDispatcher, new Handler(), new Handler());
}
@Test
diff --git a/services/core/Android.bp b/services/core/Android.bp
index c6bc106..1659020 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -118,6 +118,10 @@
"dnsresolver_aidl_interface-V2-java",
"netd_event_listener_interface-java",
],
+
+ plugins: [
+ "compat-changeid-annotation-processor",
+ ],
}
java_genrule {
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 4bb29f0..3dc745b 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -346,7 +346,6 @@
import com.android.server.Watchdog;
import com.android.server.am.ActivityManagerServiceDumpProcessesProto.UidObserverRegistrationProto;
import com.android.server.appop.AppOpsService;
-import com.android.server.compat.CompatConfig;
import com.android.server.compat.PlatformCompat;
import com.android.server.contentcapture.ContentCaptureManagerInternal;
import com.android.server.firewall.IntentFirewall;
@@ -5032,8 +5031,9 @@
bindApplicationTimeMillis = SystemClock.elapsedRealtime();
mAtmInternal.preBindApplication(app.getWindowProcessController());
final ActiveInstrumentation instr2 = app.getActiveInstrumentation();
- long[] disabledCompatChanges = CompatConfig.get().getDisabledChanges(app.info);
+ long[] disabledCompatChanges = {};
if (mPlatformCompat != null) {
+ disabledCompatChanges = mPlatformCompat.getDisabledChanges(app.info);
mPlatformCompat.resetReporting(app.info);
}
if (app.isolatedEntryPoint != null) {
diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
index c33ac03..908ec6b 100644
--- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
+++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
@@ -43,6 +43,7 @@
import android.app.usage.ConfigurationStats;
import android.app.usage.IUsageStatsManager;
import android.app.usage.UsageStatsManager;
+import android.compat.Compatibility;
import android.content.ComponentCallbacks2;
import android.content.ComponentName;
import android.content.Context;
@@ -81,15 +82,17 @@
import android.os.UserManager;
import android.text.TextUtils;
import android.util.ArrayMap;
+import android.util.ArraySet;
import android.util.DebugUtils;
import android.util.DisplayMetrics;
import android.util.proto.ProtoOutputStream;
import android.view.Display;
+import com.android.internal.compat.CompatibilityChangeConfig;
import com.android.internal.util.HexDump;
import com.android.internal.util.MemInfoReader;
import com.android.internal.util.Preconditions;
-import com.android.server.compat.CompatConfig;
+import com.android.server.compat.PlatformCompat;
import java.io.BufferedReader;
import java.io.File;
@@ -2902,56 +2905,49 @@
return 0;
}
- private void killPackage(String packageName, PrintWriter pw) throws RemoteException {
- int uid = mPm.getPackageUid(packageName, 0, mUserId);
- if (uid < 0) {
- // uid is negative if the package wasn't found.
- pw.println("Didn't find package " + packageName + " on device.");
- } else {
- pw.println("Killing package " + packageName + " (UID " + uid + ").");
- final long origId = Binder.clearCallingIdentity();
- mInterface.killUid(UserHandle.getAppId(uid),
- UserHandle.USER_ALL, "killPackage");
- Binder.restoreCallingIdentity(origId);
- }
- }
-
private int runCompat(PrintWriter pw) throws RemoteException {
- final CompatConfig config = CompatConfig.get();
+ final PlatformCompat platformCompat = (PlatformCompat)
+ ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE);
String toggleValue = getNextArgRequired();
long changeId;
String changeIdString = getNextArgRequired();
try {
changeId = Long.parseLong(changeIdString);
} catch (NumberFormatException e) {
- changeId = config.lookupChangeId(changeIdString);
+ changeId = platformCompat.lookupChangeId(changeIdString);
}
if (changeId == -1) {
pw.println("Unknown or invalid change: '" + changeIdString + "'.");
+ return -1;
}
String packageName = getNextArgRequired();
+ if (!platformCompat.isKnownChangeId(changeId)) {
+ pw.println("Warning! Change " + changeId + " is not known yet. Enabling/disabling it"
+ + " could have no effect.");
+ }
+ ArraySet<Long> enabled = new ArraySet<>();
+ ArraySet<Long> disabled = new ArraySet<>();
switch (toggleValue) {
case "enable":
- if (!config.addOverride(changeId, packageName, true)) {
- pw.println("Warning! Change " + changeId + " is not known yet. Enabling it"
- + " could have no effect.");
- }
+ enabled.add(changeId);
pw.println("Enabled change " + changeId + " for " + packageName + ".");
- killPackage(packageName, pw);
+ CompatibilityChangeConfig overrides =
+ new CompatibilityChangeConfig(
+ new Compatibility.ChangeConfig(enabled, disabled));
+ platformCompat.setOverrides(overrides, packageName);
return 0;
case "disable":
- if (!config.addOverride(changeId, packageName, false)) {
- pw.println("Warning! Change " + changeId + " is not known yet. Disabling it"
- + " could have no effect.");
- }
+ disabled.add(changeId);
pw.println("Disabled change " + changeId + " for " + packageName + ".");
- killPackage(packageName, pw);
+ overrides =
+ new CompatibilityChangeConfig(
+ new Compatibility.ChangeConfig(enabled, disabled));
+ platformCompat.setOverrides(overrides, packageName);
return 0;
case "reset":
- if (config.removeOverride(changeId, packageName)) {
+ if (platformCompat.clearOverride(changeId, packageName)) {
pw.println("Reset change " + changeId + " for " + packageName
+ " to default value.");
- killPackage(packageName, pw);
} else {
pw.println("No override exists for changeId " + changeId + ".");
}
diff --git a/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java b/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java
index 5255316..0524f91 100644
--- a/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java
+++ b/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java
@@ -445,7 +445,7 @@
if ((updateFlags & BatteryStatsImpl.ExternalStatsSync.UPDATE_RADIO) != 0) {
// We were asked to fetch Telephony data.
if (mTelephony == null) {
- mTelephony = TelephonyManager.from(mContext);
+ mTelephony = mContext.getSystemService(TelephonyManager.class);
}
if (mTelephony != null) {
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index a47ea4f..8c60d0c 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -731,7 +731,7 @@
public void notePhoneState(int state) {
enforceCallingPermission();
- int simState = TelephonyManager.getDefault().getSimState();
+ int simState = mContext.getSystemService(TelephonyManager.class).getSimState();
synchronized (mStats) {
mStats.notePhoneStateLocked(state, simState);
}
diff --git a/services/core/java/com/android/server/biometrics/AuthService.java b/services/core/java/com/android/server/biometrics/AuthService.java
new file mode 100644
index 0000000..22cb507
--- /dev/null
+++ b/services/core/java/com/android/server/biometrics/AuthService.java
@@ -0,0 +1,228 @@
+/*
+ * Copyright (C) 2019 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.biometrics;
+
+
+// TODO(b/141025588): Create separate internal and external permissions for AuthService.
+// TODO(b/141025588): Get rid of the USE_FINGERPRINT permission.
+
+import static android.Manifest.permission.USE_BIOMETRIC;
+import static android.Manifest.permission.USE_BIOMETRIC_INTERNAL;
+import static android.Manifest.permission.USE_FINGERPRINT;
+import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FACE;
+import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FINGERPRINT;
+import static android.hardware.biometrics.BiometricAuthenticator.TYPE_IRIS;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.hardware.biometrics.IAuthService;
+import android.hardware.biometrics.IBiometricEnabledOnKeyguardCallback;
+import android.hardware.biometrics.IBiometricService;
+import android.hardware.biometrics.IBiometricServiceReceiver;
+import android.hardware.face.IFaceService;
+import android.hardware.fingerprint.IFingerprintService;
+import android.hardware.iris.IIrisService;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.UserHandle;
+import android.util.Slog;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.server.SystemService;
+import com.android.server.biometrics.face.FaceAuthenticator;
+import com.android.server.biometrics.fingerprint.FingerprintAuthenticator;
+import com.android.server.biometrics.iris.IrisAuthenticator;
+
+/**
+ * System service that provides an interface for authenticating with biometrics and
+ * PIN/pattern/password to BiometricPrompt and lock screen.
+ */
+public class AuthService extends SystemService {
+ private static final String TAG = "AuthService";
+ private static final boolean DEBUG = false;
+
+ private final boolean mHasFeatureFace;
+ private final boolean mHasFeatureFingerprint;
+ private final boolean mHasFeatureIris;
+ private final Injector mInjector;
+
+ private IBiometricService mBiometricService;
+ @VisibleForTesting
+ final IAuthService.Stub mImpl;
+
+ /**
+ * Class for injecting dependencies into AuthService.
+ * TODO(b/141025588): Replace with a dependency injection framework (e.g. Guice, Dagger).
+ */
+ @VisibleForTesting
+ public static class Injector {
+
+ /**
+ * Allows to mock BiometricService for testing.
+ */
+ @VisibleForTesting
+ public IBiometricService getBiometricService() {
+ return IBiometricService.Stub.asInterface(
+ ServiceManager.getService(Context.BIOMETRIC_SERVICE));
+ }
+
+ /**
+ * Allows to stub publishBinderService(...) for testing.
+ */
+ @VisibleForTesting
+ public void publishBinderService(AuthService service, IAuthService.Stub impl) {
+ service.publishBinderService(Context.AUTH_SERVICE, impl);
+ }
+ }
+
+ private final class AuthServiceImpl extends IAuthService.Stub {
+ @Override
+ public void authenticate(IBinder token, long sessionId, int userId,
+ IBiometricServiceReceiver receiver, String opPackageName, Bundle bundle)
+ throws RemoteException {
+ final int callingUserId = UserHandle.getCallingUserId();
+
+ // In the BiometricServiceBase, do the AppOps and foreground check.
+ if (userId == callingUserId) {
+ // Check the USE_BIOMETRIC permission here.
+ checkPermission();
+ } else {
+ // Only allow internal clients to authenticate with a different userId
+ Slog.w(TAG, "User " + callingUserId + " is requesting authentication of userid: "
+ + userId);
+ checkInternalPermission();
+ }
+
+ if (token == null || receiver == null || opPackageName == null || bundle == null) {
+ Slog.e(TAG, "Unable to authenticate, one or more null arguments");
+ return;
+ }
+
+ mBiometricService.authenticate(token, sessionId, userId, receiver, opPackageName,
+ bundle);
+ }
+
+ @Override
+ public int canAuthenticate(String opPackageName, int userId) throws RemoteException {
+ final int callingUserId = UserHandle.getCallingUserId();
+ Slog.d(TAG, "canAuthenticate, userId: " + userId
+ + ", callingUserId: " + callingUserId);
+
+ if (userId != callingUserId) {
+ checkInternalPermission();
+ } else {
+ checkPermission();
+ }
+ return mBiometricService.canAuthenticate(opPackageName, userId);
+ }
+
+ @Override
+ public boolean hasEnrolledBiometrics(int userId, String opPackageName)
+ throws RemoteException {
+ checkInternalPermission();
+ return mBiometricService.hasEnrolledBiometrics(userId, opPackageName);
+ }
+
+ @Override
+ public void registerEnabledOnKeyguardCallback(IBiometricEnabledOnKeyguardCallback callback)
+ throws RemoteException {
+ checkInternalPermission();
+ mBiometricService.registerEnabledOnKeyguardCallback(callback);
+ }
+
+ @Override
+ public void setActiveUser(int userId) throws RemoteException {
+ checkInternalPermission();
+ mBiometricService.setActiveUser(userId);
+ }
+
+ @Override
+ public void resetLockout(byte[] token) throws RemoteException {
+ checkInternalPermission();
+ mBiometricService.resetLockout(token);
+ }
+ }
+
+ public AuthService(Context context) {
+ this(context, new Injector());
+ }
+
+ public AuthService(Context context, Injector injector) {
+ super(context);
+
+ mInjector = injector;
+ mImpl = new AuthServiceImpl();
+ final PackageManager pm = context.getPackageManager();
+ mHasFeatureFace = pm.hasSystemFeature(PackageManager.FEATURE_FACE);
+ mHasFeatureFingerprint = pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT);
+ mHasFeatureIris = pm.hasSystemFeature(PackageManager.FEATURE_IRIS);
+ }
+
+ @Override
+ public void onStart() {
+ mBiometricService = mInjector.getBiometricService();
+
+ if (mHasFeatureFace) {
+ final FaceAuthenticator faceAuthenticator = new FaceAuthenticator(
+ IFaceService.Stub.asInterface(ServiceManager.getService(Context.FACE_SERVICE)));
+ try {
+ // TODO(b/141025588): Pass down the real id, strength, and modality.
+ mBiometricService.registerAuthenticator(0, 0, TYPE_FACE, faceAuthenticator);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Remote exception", e);
+ }
+ }
+ if (mHasFeatureFingerprint) {
+ final FingerprintAuthenticator fingerprintAuthenticator = new FingerprintAuthenticator(
+ IFingerprintService.Stub.asInterface(
+ ServiceManager.getService(Context.FINGERPRINT_SERVICE)));
+ try {
+ // TODO(b/141025588): Pass down the real id, strength, and modality.
+ mBiometricService.registerAuthenticator(1, 0, TYPE_FINGERPRINT,
+ fingerprintAuthenticator);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Remote exception", e);
+ }
+ }
+ if (mHasFeatureIris) {
+ final IrisAuthenticator irisAuthenticator = new IrisAuthenticator(
+ IIrisService.Stub.asInterface(ServiceManager.getService(Context.IRIS_SERVICE)));
+ try {
+ // TODO(b/141025588): Pass down the real id, strength, and modality.
+ mBiometricService.registerAuthenticator(2, 0, TYPE_IRIS, irisAuthenticator);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Remote exception", e);
+ }
+ }
+ mInjector.publishBinderService(this, mImpl);
+ }
+
+ private void checkInternalPermission() {
+ getContext().enforceCallingOrSelfPermission(USE_BIOMETRIC_INTERNAL,
+ "Must have USE_BIOMETRIC_INTERNAL permission");
+ }
+
+ private void checkPermission() {
+ if (getContext().checkCallingOrSelfPermission(USE_FINGERPRINT)
+ != PackageManager.PERMISSION_GRANTED) {
+ getContext().enforceCallingOrSelfPermission(USE_BIOMETRIC,
+ "Must have USE_BIOMETRIC permission");
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/biometrics/BiometricService.java b/services/core/java/com/android/server/biometrics/BiometricService.java
index 44c81fc..5d36793 100644
--- a/services/core/java/com/android/server/biometrics/BiometricService.java
+++ b/services/core/java/com/android/server/biometrics/BiometricService.java
@@ -42,8 +42,6 @@
import android.hardware.biometrics.IBiometricService;
import android.hardware.biometrics.IBiometricServiceReceiver;
import android.hardware.biometrics.IBiometricServiceReceiverInternal;
-import android.hardware.face.IFaceService;
-import android.hardware.fingerprint.IFingerprintService;
import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
@@ -67,8 +65,6 @@
import com.android.internal.os.SomeArgs;
import com.android.internal.statusbar.IStatusBarService;
import com.android.server.SystemService;
-import com.android.server.biometrics.face.FaceAuthenticator;
-import com.android.server.biometrics.fingerprint.FingerprintAuthenticator;
import java.util.ArrayList;
import java.util.HashMap;
@@ -215,9 +211,6 @@
private final Injector mInjector;
@VisibleForTesting
final IBiometricService.Stub mImpl;
- private final boolean mHasFeatureFace;
- private final boolean mHasFeatureFingerprint;
- private final boolean mHasFeatureIris;
@VisibleForTesting
final SettingObserver mSettingObserver;
private final List<EnabledOnKeyguardCallback> mEnabledOnKeyguardCallbacks;
@@ -702,6 +695,8 @@
@Override
public void registerAuthenticator(int id, int strength, int modality,
IBiometricAuthenticator authenticator) {
+ checkInternalPermission();
+
mAuthenticators.add(new AuthenticatorWrapper(id, strength, modality, authenticator));
}
@@ -782,24 +777,6 @@
}
/**
- * Allows to mock FaceAuthenticator for testing.
- */
- @VisibleForTesting
- public IBiometricAuthenticator getFingerprintAuthenticator() {
- return new FingerprintAuthenticator(IFingerprintService.Stub.asInterface(
- ServiceManager.getService(Context.FINGERPRINT_SERVICE)));
- }
-
- /**
- * Allows to mock FaceAuthenticator for testing.
- */
- @VisibleForTesting
- public IBiometricAuthenticator getFaceAuthenticator() {
- return new FaceAuthenticator(
- IFaceService.Stub.asInterface(ServiceManager.getService(Context.FACE_SERVICE)));
- }
-
- /**
* Allows to mock SettingObserver for testing.
*/
@VisibleForTesting
@@ -853,11 +830,6 @@
mSettingObserver = mInjector.getSettingObserver(context, mHandler,
mEnabledOnKeyguardCallbacks);
- final PackageManager pm = context.getPackageManager();
- mHasFeatureFace = pm.hasSystemFeature(PackageManager.FEATURE_FACE);
- mHasFeatureFingerprint = pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT);
- mHasFeatureIris = pm.hasSystemFeature(PackageManager.FEATURE_IRIS);
-
try {
injector.getActivityManagerService().registerUserSwitchObserver(
new UserSwitchObserver() {
@@ -875,28 +847,6 @@
@Override
public void onStart() {
- // TODO(b/141025588): remove this code block once AuthService is integrated.
- {
- if (mHasFeatureFace) {
- try {
- mImpl.registerAuthenticator(0, 0, TYPE_FACE, mInjector.getFaceAuthenticator());
- } catch (RemoteException e) {
- Slog.e(TAG, "Remote exception", e);
- }
- }
- if (mHasFeatureFingerprint) {
- try {
- mImpl.registerAuthenticator(0, 0, TYPE_FINGERPRINT,
- mInjector.getFingerprintAuthenticator());
- } catch (RemoteException e) {
- Slog.e(TAG, "Remote exception", e);
- }
- }
- if (mHasFeatureIris) {
- Slog.e(TAG, "Iris is not supported");
- }
- }
-
mKeyStore = mInjector.getKeyStore();
mStatusBarService = mInjector.getStatusBarService();
mInjector.publishBinderService(this, mImpl);
diff --git a/services/core/java/com/android/server/compat/CompatConfig.java b/services/core/java/com/android/server/compat/CompatConfig.java
index d6ec22b..490cce3 100644
--- a/services/core/java/com/android/server/compat/CompatConfig.java
+++ b/services/core/java/com/android/server/compat/CompatConfig.java
@@ -43,13 +43,14 @@
import java.util.Set;
import javax.xml.datatype.DatatypeConfigurationException;
+
/**
* This class maintains state relating to platform compatibility changes.
*
* <p>It stores the default configuration for each change, and any per-package overrides that have
* been configured.
*/
-public final class CompatConfig {
+final class CompatConfig {
private static final String TAG = "CompatConfig";
@@ -61,13 +62,13 @@
private final LongSparseArray<CompatChange> mChanges = new LongSparseArray<>();
@VisibleForTesting
- public CompatConfig() {
+ CompatConfig() {
}
/**
* @return The static instance of this class to be used within the system server.
*/
- public static CompatConfig get() {
+ static CompatConfig get() {
return sInstance;
}
@@ -77,7 +78,7 @@
*
* @param change The change to add. Any change with the same ID will be overwritten.
*/
- public void addChange(CompatChange change) {
+ void addChange(CompatChange change) {
synchronized (mChanges) {
mChanges.put(change.getId(), change);
}
@@ -89,10 +90,10 @@
*
* @param app The app in question
* @return A sorted long array of change IDs. We use a primitive array to minimize memory
- * footprint: Every app process will store this array statically so we aim to reduce
- * overhead as much as possible.
+ * footprint: Every app process will store this array statically so we aim to reduce
+ * overhead as much as possible.
*/
- public long[] getDisabledChanges(ApplicationInfo app) {
+ long[] getDisabledChanges(ApplicationInfo app) {
LongArray disabled = new LongArray();
synchronized (mChanges) {
for (int i = 0; i < mChanges.size(); ++i) {
@@ -113,7 +114,7 @@
* @param name Name of the change to look up
* @return The change ID, or {@code -1} if no change with that name exists.
*/
- public long lookupChangeId(String name) {
+ long lookupChangeId(String name) {
synchronized (mChanges) {
for (int i = 0; i < mChanges.size(); ++i) {
if (TextUtils.equals(mChanges.valueAt(i).getName(), name)) {
@@ -128,11 +129,11 @@
* Find if a given change is enabled for a given application.
*
* @param changeId The ID of the change in question
- * @param app App to check for
+ * @param app App to check for
* @return {@code true} if the change is enabled for this app. Also returns {@code true} if the
- * change ID is not known, as unknown changes are enabled by default.
+ * change ID is not known, as unknown changes are enabled by default.
*/
- public boolean isChangeEnabled(long changeId, ApplicationInfo app) {
+ boolean isChangeEnabled(long changeId, ApplicationInfo app) {
synchronized (mChanges) {
CompatChange c = mChanges.get(changeId);
if (c == null) {
@@ -150,14 +151,15 @@
*
* <p>Note, package overrides are not persistent and will be lost on system or runtime restart.
*
- * @param changeId The ID of the change to be overridden. Note, this call will succeed even if
- * this change is not known; it will only have any effect if any code in the
- * platform is gated on the ID given.
+ * @param changeId The ID of the change to be overridden. Note, this call will succeed even
+ * if
+ * this change is not known; it will only have any effect if any code in the
+ * platform is gated on the ID given.
* @param packageName The app package name to override the change for.
- * @param enabled If the change should be enabled or disabled.
+ * @param enabled If the change should be enabled or disabled.
* @return {@code true} if the change existed before adding the override.
*/
- public boolean addOverride(long changeId, String packageName, boolean enabled) {
+ boolean addOverride(long changeId, String packageName, boolean enabled) {
boolean alreadyKnown = true;
synchronized (mChanges) {
CompatChange c = mChanges.get(changeId);
@@ -172,15 +174,27 @@
}
/**
+ * Check whether the change is known to the compat config.
+ *
+ * @return {@code true} if the change is known.
+ */
+ boolean isKnownChangeId(long changeId) {
+ synchronized (mChanges) {
+ CompatChange c = mChanges.get(changeId);
+ return c != null;
+ }
+ }
+
+ /**
* Removes an override previously added via {@link #addOverride(long, String, boolean)}. This
* restores the default behaviour for the given change and app, once any app processes have been
* restarted.
*
- * @param changeId The ID of the change that was overridden.
+ * @param changeId The ID of the change that was overridden.
* @param packageName The app package name that was overridden.
* @return {@code true} if an override existed;
*/
- public boolean removeOverride(long changeId, String packageName) {
+ boolean removeOverride(long changeId, String packageName) {
boolean overrideExists = false;
synchronized (mChanges) {
CompatChange c = mChanges.get(changeId);
@@ -191,22 +205,22 @@
}
return overrideExists;
}
+
/**
* Overrides the enabled state for a given change and app. This method is intended to be used
* *only* for debugging purposes.
*
* <p>Note, package overrides are not persistent and will be lost on system or runtime restart.
*
- * @param overrides list of overrides to default changes config.
+ * @param overrides list of overrides to default changes config.
* @param packageName app for which the overrides will be applied.
*/
- public void addOverrides(
- CompatibilityChangeConfig overrides, String packageName) {
+ void addOverrides(CompatibilityChangeConfig overrides, String packageName) {
synchronized (mChanges) {
- for (Long changeId: overrides.enabledChanges()) {
+ for (Long changeId : overrides.enabledChanges()) {
addOverride(changeId, packageName, true);
}
- for (Long changeId: overrides.disabledChanges()) {
+ for (Long changeId : overrides.disabledChanges()) {
addOverride(changeId, packageName, false);
}
}
@@ -221,7 +235,7 @@
*
* @param packageName The package for which the overrides should be purged.
*/
- public void removePackageOverrides(String packageName) {
+ void removePackageOverrides(String packageName) {
synchronized (mChanges) {
for (int i = 0; i < mChanges.size(); ++i) {
mChanges.valueAt(i).removePackageOverride(packageName);
@@ -230,11 +244,11 @@
}
/**
- * Dumps the current list of compatibility config information.
- *
- * @param pw The {@link PrintWriter} instance to which the information will be dumped.
- */
- public void dumpConfig(PrintWriter pw) {
+ * Dumps the current list of compatibility config information.
+ *
+ * @param pw The {@link PrintWriter} instance to which the information will be dumped.
+ */
+ void dumpConfig(PrintWriter pw) {
synchronized (mChanges) {
if (mChanges.size() == 0) {
pw.println("No compat overrides.");
@@ -252,10 +266,10 @@
*
* @param applicationInfo the {@link ApplicationInfo} for which the info should be dumped.
* @return A {@link CompatibilityChangeConfig} which contains the compat config info for the
- * given app.
+ * given app.
*/
- public CompatibilityChangeConfig getAppConfig(ApplicationInfo applicationInfo) {
+ CompatibilityChangeConfig getAppConfig(ApplicationInfo applicationInfo) {
Set<Long> enabled = new HashSet<>();
Set<Long> disabled = new HashSet<>();
synchronized (mChanges) {
@@ -276,15 +290,15 @@
*
* @return An array of {@link CompatibilityChangeInfo} with the current changes.
*/
- public CompatibilityChangeInfo[] dumpChanges() {
+ CompatibilityChangeInfo[] dumpChanges() {
synchronized (mChanges) {
CompatibilityChangeInfo[] changeInfos = new CompatibilityChangeInfo[mChanges.size()];
for (int i = 0; i < mChanges.size(); ++i) {
CompatChange change = mChanges.valueAt(i);
changeInfos[i] = new CompatibilityChangeInfo(change.getId(),
- change.getName(),
- change.getEnableAfterTargetSdk(),
- change.getDisabled());
+ change.getName(),
+ change.getEnableAfterTargetSdk(),
+ change.getDisabled());
}
return changeInfos;
}
diff --git a/services/core/java/com/android/server/compat/PlatformCompat.java b/services/core/java/com/android/server/compat/PlatformCompat.java
index 75e2d22..709f3f8 100644
--- a/services/core/java/com/android/server/compat/PlatformCompat.java
+++ b/services/core/java/com/android/server/compat/PlatformCompat.java
@@ -16,9 +16,13 @@
package com.android.server.compat;
+import android.app.ActivityManager;
+import android.app.IActivityManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
+import android.os.Binder;
+import android.os.RemoteException;
import android.os.UserHandle;
import android.util.Slog;
import android.util.StatsLog;
@@ -106,12 +110,26 @@
@Override
public void setOverrides(CompatibilityChangeConfig overrides, String packageName) {
CompatConfig.get().addOverrides(overrides, packageName);
+ killPackage(packageName);
+ }
+
+ @Override
+ public void setOverridesForTest(CompatibilityChangeConfig overrides, String packageName) {
+ CompatConfig.get().addOverrides(overrides, packageName);
}
@Override
public void clearOverrides(String packageName) {
CompatConfig config = CompatConfig.get();
config.removePackageOverrides(packageName);
+ killPackage(packageName);
+ }
+
+ @Override
+ public boolean clearOverride(long changeId, String packageName) {
+ boolean existed = CompatConfig.get().removeOverride(changeId, packageName);
+ killPackage(packageName);
+ return existed;
}
@Override
@@ -124,6 +142,39 @@
return CompatConfig.get().dumpChanges();
}
+ /**
+ * Check whether the change is known to the compat config.
+ * @param changeId
+ * @return {@code true} if the change is known.
+ */
+ public boolean isKnownChangeId(long changeId) {
+ return CompatConfig.get().isKnownChangeId(changeId);
+
+ }
+
+ /**
+ * Retrieves the set of disabled changes for a given app. Any change ID not in the returned
+ * array is by default enabled for the app.
+ *
+ * @param appInfo The app in question
+ * @return A sorted long array of change IDs. We use a primitive array to minimize memory
+ * footprint: Every app process will store this array statically so we aim to reduce
+ * overhead as much as possible.
+ */
+ public long[] getDisabledChanges(ApplicationInfo appInfo) {
+ return CompatConfig.get().getDisabledChanges(appInfo);
+ }
+
+ /**
+ * Look up a change ID by name.
+ *
+ * @param name Name of the change to look up
+ * @return The change ID, or {@code -1} if no change with that name exists.
+ */
+ public long lookupChangeId(String name) {
+ return CompatConfig.get().lookupChangeId(name);
+ }
+
@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
if (!DumpUtils.checkDumpAndUsageStatsPermission(mContext, "platform_compat", pw)) return;
@@ -151,4 +202,34 @@
private void reportChange(long changeId, int uid, int state) {
mChangeReporter.reportChange(uid, changeId, state);
}
+
+ private void killPackage(String packageName) {
+ int uid = -1;
+ try {
+ uid = mContext.getPackageManager().getPackageUid(packageName, 0);
+ } catch (PackageManager.NameNotFoundException e) {
+ Slog.w(TAG, "Didn't find package " + packageName + " on device.", e);
+ return;
+ }
+
+ Slog.d(TAG, "Killing package " + packageName + " (UID " + uid + ").");
+ killUid(UserHandle.getAppId(uid),
+ UserHandle.USER_ALL, "PlatformCompat overrides");
+ }
+
+ private void killUid(int appId, int userId, String reason) {
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ IActivityManager am = ActivityManager.getService();
+ if (am != null) {
+ try {
+ am.killUid(appId, userId, reason);
+ } catch (RemoteException e) {
+ /* ignore - same process */
+ }
+ }
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
}
diff --git a/services/core/java/com/android/server/display/BrightnessTracker.java b/services/core/java/com/android/server/display/BrightnessTracker.java
index 126beef..eea1980 100644
--- a/services/core/java/com/android/server/display/BrightnessTracker.java
+++ b/services/core/java/com/android/server/display/BrightnessTracker.java
@@ -34,6 +34,7 @@
import android.hardware.SensorManager;
import android.hardware.display.AmbientBrightnessDayStats;
import android.hardware.display.BrightnessChangeEvent;
+import android.hardware.display.BrightnessConfiguration;
import android.hardware.display.ColorDisplayManager;
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManagerInternal;
@@ -125,6 +126,7 @@
private static final int MSG_BRIGHTNESS_CHANGED = 1;
private static final int MSG_STOP_SENSOR_LISTENER = 2;
private static final int MSG_START_SENSOR_LISTENER = 3;
+ private static final int MSG_BRIGHTNESS_CONFIG_CHANGED = 4;
private static final SimpleDateFormat FORMAT = new SimpleDateFormat("MM-dd HH:mm:ss.SSS");
@@ -158,6 +160,7 @@
private boolean mColorSamplingEnabled;
private int mNoFramesToSample;
private float mFrameRate;
+ private BrightnessConfiguration mBrightnessConfiguration;
// End of block of members that should only be accessed on the mBgHandler thread.
private @UserIdInt int mCurrentUserId = UserHandle.USER_NULL;
@@ -202,6 +205,14 @@
mBgHandler.obtainMessage(MSG_BACKGROUND_START, (Float) initialBrightness).sendToTarget();
}
+ /**
+ * Update tracker with new brightness configuration.
+ */
+ public void setBrightnessConfiguration(BrightnessConfiguration brightnessConfiguration) {
+ mBgHandler.obtainMessage(MSG_BRIGHTNESS_CONFIG_CHANGED,
+ brightnessConfiguration).sendToTarget();
+ }
+
private void backgroundStart(float initialBrightness) {
readEvents();
readAmbientBrightnessStats();
@@ -759,7 +770,9 @@
private void enableColorSampling() {
if (!mInjector.isBrightnessModeAutomatic(mContentResolver)
|| !mInjector.isInteractive(mContext)
- || mColorSamplingEnabled) {
+ || mColorSamplingEnabled
+ || mBrightnessConfiguration == null
+ || !mBrightnessConfiguration.shouldCollectColorSamples()) {
return;
}
@@ -977,6 +990,18 @@
stopSensorListener();
disableColorSampling();
break;
+ case MSG_BRIGHTNESS_CONFIG_CHANGED:
+ mBrightnessConfiguration = (BrightnessConfiguration) msg.obj;
+ boolean shouldCollectColorSamples =
+ mBrightnessConfiguration != null
+ && mBrightnessConfiguration.shouldCollectColorSamples();
+ if (shouldCollectColorSamples && !mColorSamplingEnabled) {
+ enableColorSampling();
+ } else if (!shouldCollectColorSamples && mColorSamplingEnabled) {
+ disableColorSampling();
+ }
+ break;
+
}
}
}
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 5804fc8..e42545e 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -931,6 +931,10 @@
autoBrightnessAdjustmentChanged, mPowerRequest.policy);
}
+ if (mBrightnessTracker != null) {
+ mBrightnessTracker.setBrightnessConfiguration(mBrightnessConfiguration);
+ }
+
// Apply auto-brightness.
boolean slowChange = false;
if (brightness < 0) {
diff --git a/services/core/java/com/android/server/display/WifiDisplayController.java b/services/core/java/com/android/server/display/WifiDisplayController.java
index d9d46b8..283a78b 100644
--- a/services/core/java/com/android/server/display/WifiDisplayController.java
+++ b/services/core/java/com/android/server/display/WifiDisplayController.java
@@ -16,8 +16,6 @@
package com.android.server.display;
-import com.android.internal.util.DumpUtils;
-
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
@@ -36,16 +34,18 @@
import android.net.wifi.p2p.WifiP2pDeviceList;
import android.net.wifi.p2p.WifiP2pGroup;
import android.net.wifi.p2p.WifiP2pManager;
-import android.net.wifi.p2p.WifiP2pWfdInfo;
import android.net.wifi.p2p.WifiP2pManager.ActionListener;
import android.net.wifi.p2p.WifiP2pManager.Channel;
import android.net.wifi.p2p.WifiP2pManager.GroupInfoListener;
import android.net.wifi.p2p.WifiP2pManager.PeerListListener;
+import android.net.wifi.p2p.WifiP2pWfdInfo;
import android.os.Handler;
import android.provider.Settings;
import android.util.Slog;
import android.view.Surface;
+import com.android.internal.util.DumpUtils;
+
import java.io.PrintWriter;
import java.net.Inet4Address;
import java.net.InetAddress;
@@ -292,11 +292,11 @@
WifiP2pWfdInfo wfdInfo = new WifiP2pWfdInfo();
wfdInfo.setWfdEnabled(true);
- wfdInfo.setDeviceType(WifiP2pWfdInfo.WFD_SOURCE);
+ wfdInfo.setDeviceType(WifiP2pWfdInfo.DEVICE_TYPE_WFD_SOURCE);
wfdInfo.setSessionAvailable(true);
wfdInfo.setControlPort(DEFAULT_CONTROL_PORT);
wfdInfo.setMaxThroughput(MAX_THROUGHPUT);
- mWifiP2pManager.setWFDInfo(mWifiP2pChannel, wfdInfo, new ActionListener() {
+ mWifiP2pManager.setWfdInfo(mWifiP2pChannel, wfdInfo, new ActionListener() {
@Override
public void onSuccess() {
if (DEBUG) {
@@ -324,7 +324,7 @@
if (mWfdEnabled || mWfdEnabling) {
WifiP2pWfdInfo wfdInfo = new WifiP2pWfdInfo();
wfdInfo.setWfdEnabled(false);
- mWifiP2pManager.setWFDInfo(mWifiP2pChannel, wfdInfo, new ActionListener() {
+ mWifiP2pManager.setWfdInfo(mWifiP2pChannel, wfdInfo, new ActionListener() {
@Override
public void onSuccess() {
if (DEBUG) {
@@ -508,7 +508,8 @@
Slog.d(TAG, "updateDesiredDevice: new information "
+ describeWifiP2pDevice(device));
}
- mDesiredDevice.update(device);
+ mDesiredDevice.updateSupplicantDetails(device);
+ mDesiredDevice.status = device.status;
if (mAdvertisedDisplay != null
&& mAdvertisedDisplay.getDeviceAddress().equals(address)) {
readvertiseDisplay(createWifiDisplay(mDesiredDevice));
@@ -694,7 +695,7 @@
config.wps = wps;
config.deviceAddress = mConnectingDevice.deviceAddress;
// Helps with STA & P2P concurrency
- config.groupOwnerIntent = WifiP2pConfig.MIN_GROUP_OWNER_INTENT;
+ config.groupOwnerIntent = WifiP2pConfig.GROUP_OWNER_INTENT_MIN;
WifiDisplay display = createWifiDisplay(mConnectingDevice);
advertiseDisplay(display, null, 0, 0, 0);
@@ -824,6 +825,10 @@
requestPeers();
}
+ private static boolean contains(WifiP2pGroup group, WifiP2pDevice device) {
+ return group.getOwner().equals(device) || group.getClientList().contains(device);
+ }
+
private void handleConnectionChanged(NetworkInfo networkInfo) {
mNetworkInfo = networkInfo;
if (mWfdEnabled && networkInfo.isConnected()) {
@@ -835,7 +840,7 @@
Slog.d(TAG, "Received group info: " + describeWifiP2pGroup(info));
}
- if (mConnectingDevice != null && !info.contains(mConnectingDevice)) {
+ if (mConnectingDevice != null && !contains(info, mConnectingDevice)) {
Slog.i(TAG, "Aborting connection to Wifi display because "
+ "the current P2P group does not contain the device "
+ "we expected to find: " + mConnectingDevice.deviceName
@@ -844,7 +849,7 @@
return;
}
- if (mDesiredDevice != null && !info.contains(mDesiredDevice)) {
+ if (mDesiredDevice != null && !contains(info, mDesiredDevice)) {
disconnect();
return;
}
@@ -1038,14 +1043,15 @@
}
private static boolean isWifiDisplay(WifiP2pDevice device) {
- return device.wfdInfo != null
- && device.wfdInfo.isWfdEnabled()
- && isPrimarySinkDeviceType(device.wfdInfo.getDeviceType());
+ WifiP2pWfdInfo wfdInfo = device.getWfdInfo();
+ return wfdInfo != null
+ && wfdInfo.isWfdEnabled()
+ && isPrimarySinkDeviceType(wfdInfo.getDeviceType());
}
private static boolean isPrimarySinkDeviceType(int deviceType) {
- return deviceType == WifiP2pWfdInfo.PRIMARY_SINK
- || deviceType == WifiP2pWfdInfo.SOURCE_OR_PRIMARY_SINK;
+ return deviceType == WifiP2pWfdInfo.DEVICE_TYPE_PRIMARY_SINK
+ || deviceType == WifiP2pWfdInfo.DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK;
}
private static String describeWifiP2pDevice(WifiP2pDevice device) {
@@ -1058,7 +1064,7 @@
private static WifiDisplay createWifiDisplay(WifiP2pDevice device) {
return new WifiDisplay(device.deviceAddress, device.deviceName, null,
- true, device.wfdInfo.isSessionAvailable(), false);
+ true, device.getWfdInfo().isSessionAvailable(), false);
}
private final BroadcastReceiver mWifiP2pReceiver = new BroadcastReceiver() {
diff --git a/services/core/java/com/android/server/media/MediaRoute2Provider.java b/services/core/java/com/android/server/media/MediaRoute2Provider.java
new file mode 100644
index 0000000..91c9253
--- /dev/null
+++ b/services/core/java/com/android/server/media/MediaRoute2Provider.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2019 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.media;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.media.MediaRoute2Info;
+import android.media.MediaRoute2ProviderInfo;
+
+import java.util.Objects;
+
+abstract class MediaRoute2Provider {
+ final ComponentName mComponentName;
+ final String mUniqueId;
+
+ private Callback mCallback;
+ private MediaRoute2ProviderInfo mProviderInfo;
+
+ MediaRoute2Provider(@NonNull ComponentName componentName) {
+ mComponentName = Objects.requireNonNull(componentName, "Component name must not be null.");
+ mUniqueId = componentName.flattenToShortString();
+ }
+
+ public void setCallback(MediaRoute2ProviderProxy.Callback callback) {
+ mCallback = callback;
+ }
+
+ public abstract void requestSelectRoute(String packageName, String routeId, int seq);
+ public abstract void unselectRoute(String packageName, String routeId);
+ public abstract void sendControlRequest(MediaRoute2Info route, Intent request);
+ public abstract void requestSetVolume(MediaRoute2Info route, int volume);
+ public abstract void requestUpdateVolume(MediaRoute2Info route, int delta);
+
+ @NonNull
+ public String getUniqueId() {
+ return mUniqueId;
+ }
+
+ @Nullable
+ public MediaRoute2ProviderInfo getProviderInfo() {
+ return mProviderInfo;
+ }
+
+ void setAndNotifyProviderInfo(MediaRoute2ProviderInfo info) {
+ //TODO: check if info is not updated
+ if (info == null) {
+ mProviderInfo = null;
+ } else {
+ mProviderInfo = new MediaRoute2ProviderInfo.Builder(info)
+ .setUniqueId(mUniqueId)
+ .build();
+ }
+ if (mCallback != null) {
+ mCallback.onProviderStateChanged(this);
+ }
+ }
+
+ public boolean hasComponentName(String packageName, String className) {
+ return mComponentName.getPackageName().equals(packageName)
+ && mComponentName.getClassName().equals(className);
+ }
+
+ public interface Callback {
+ void onProviderStateChanged(MediaRoute2Provider provider);
+ }
+}
diff --git a/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java b/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java
index 51a0df3..3b6580a 100644
--- a/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java
+++ b/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java
@@ -17,7 +17,6 @@
package com.android.server.media;
import android.annotation.NonNull;
-import android.annotation.Nullable;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -42,20 +41,14 @@
/**
* Maintains a connection to a particular media route provider service.
*/
-final class MediaRoute2ProviderProxy implements ServiceConnection {
+final class MediaRoute2ProviderProxy extends MediaRoute2Provider implements ServiceConnection {
private static final String TAG = "MR2ProviderProxy";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
private final Context mContext;
- private final ComponentName mComponentName;
- private final String mUniqueId;
private final int mUserId;
private final Handler mHandler;
- private Callback mCallback;
-
- private MediaRoute2ProviderInfo mProviderInfo;
-
// Connection state
private boolean mRunning;
private boolean mBound;
@@ -64,9 +57,8 @@
MediaRoute2ProviderProxy(@NonNull Context context, @NonNull ComponentName componentName,
int userId) {
+ super(componentName);
mContext = Objects.requireNonNull(context, "Context must not be null.");
- mComponentName = Objects.requireNonNull(componentName, "Component name must not be null.");
- mUniqueId = componentName.flattenToShortString();
mUserId = userId;
mHandler = new Handler();
}
@@ -80,10 +72,7 @@
pw.println(prefix + " mConnectionReady=" + mConnectionReady);
}
- public void setCallback(Callback callback) {
- mCallback = callback;
- }
-
+ @Override
public void requestSelectRoute(String packageName, String routeId, int seq) {
if (mConnectionReady) {
mActiveConnection.requestSelectRoute(packageName, routeId, seq);
@@ -91,6 +80,7 @@
}
}
+ @Override
public void unselectRoute(String packageName, String routeId) {
if (mConnectionReady) {
mActiveConnection.unselectRoute(packageName, routeId);
@@ -98,6 +88,7 @@
}
}
+ @Override
public void sendControlRequest(MediaRoute2Info route, Intent request) {
if (mConnectionReady) {
mActiveConnection.sendControlRequest(route.getId(), request);
@@ -105,6 +96,7 @@
}
}
+ @Override
public void requestSetVolume(MediaRoute2Info route, int volume) {
if (mConnectionReady) {
mActiveConnection.requestSetVolume(route.getId(), volume);
@@ -112,6 +104,7 @@
}
}
+ @Override
public void requestUpdateVolume(MediaRoute2Info route, int delta) {
if (mConnectionReady) {
mActiveConnection.requestUpdateVolume(route.getId(), delta);
@@ -119,16 +112,6 @@
}
}
- @NonNull
- public String getUniqueId() {
- return mUniqueId;
- }
-
- @Nullable
- public MediaRoute2ProviderInfo getProviderInfo() {
- return mProviderInfo;
- }
-
public boolean hasComponentName(String packageName, String className) {
return mComponentName.getPackageName().equals(packageName)
&& mComponentName.getClassName().equals(className);
@@ -270,20 +253,6 @@
setAndNotifyProviderInfo(info);
}
- private void setAndNotifyProviderInfo(MediaRoute2ProviderInfo info) {
- //TODO: check if info is not updated
- if (info == null) {
- mProviderInfo = null;
- } else {
- mProviderInfo = new MediaRoute2ProviderInfo.Builder(info)
- .setUniqueId(mUniqueId)
- .build();
- }
- if (mCallback != null) {
- mCallback.onProviderStateChanged(MediaRoute2ProviderProxy.this);
- }
- }
-
private void disconnect() {
if (mActiveConnection != null) {
mConnectionReady = false;
@@ -298,10 +267,6 @@
return "Service connection " + mComponentName.flattenToShortString();
}
- public interface Callback {
- void onProviderStateChanged(@NonNull MediaRoute2ProviderProxy provider);
- }
-
private final class Connection implements DeathRecipient {
private final IMediaRoute2Provider mProvider;
private final ProviderClient mClient;
diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
index adfb9cb..7820cd7 100644
--- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
+++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
@@ -728,14 +728,15 @@
static final class UserHandler extends Handler implements
MediaRoute2ProviderWatcher.Callback,
- MediaRoute2ProviderProxy.Callback {
+ MediaRoute2Provider.Callback {
private final WeakReference<MediaRouter2ServiceImpl> mServiceRef;
private final UserRecord mUserRecord;
private final MediaRoute2ProviderWatcher mWatcher;
//TODO: Make this thread-safe.
- private final ArrayList<MediaRoute2ProviderProxy> mMediaProviders =
+ private final SystemMediaRoute2Provider mSystemProvider;
+ private final ArrayList<MediaRoute2Provider> mMediaProviders =
new ArrayList<>();
private final List<MediaRoute2ProviderInfo> mProviderInfos = new ArrayList<>();
@@ -746,6 +747,8 @@
super(Looper.getMainLooper(), null, true);
mServiceRef = new WeakReference<>(service);
mUserRecord = userRecord;
+ mSystemProvider = new SystemMediaRoute2Provider(service.mContext, this);
+ mMediaProviders.add(mSystemProvider);
mWatcher = new MediaRoute2ProviderWatcher(service.mContext, this,
this, mUserRecord.mUserId);
}
@@ -777,7 +780,7 @@
}
@Override
- public void onProviderStateChanged(@NonNull MediaRoute2ProviderProxy provider) {
+ public void onProviderStateChanged(@NonNull MediaRoute2Provider provider) {
sendMessage(PooledLambda.obtainMessage(UserHandler::updateProvider, this, provider));
}
@@ -790,7 +793,7 @@
controlHints, seq));
}
- private void updateProvider(MediaRoute2ProviderProxy provider) {
+ private void updateProvider(MediaRoute2Provider provider) {
int providerIndex = getProviderInfoIndex(provider.getUniqueId());
MediaRoute2ProviderInfo providerInfo = provider.getProviderInfo();
MediaRoute2ProviderInfo prevInfo =
@@ -954,7 +957,7 @@
private void requestSelectRoute(String clientPackageName, MediaRoute2Info route, int seq) {
if (route != null) {
- MediaRoute2ProviderProxy provider = findProvider(route.getProviderId());
+ MediaRoute2Provider provider = findProvider(route.getProviderId());
if (provider == null) {
Slog.w(TAG, "Ignoring to select route of unknown provider " + route);
} else {
@@ -965,7 +968,7 @@
private void unselectRoute(String clientPackageName, MediaRoute2Info route) {
if (route != null) {
- MediaRoute2ProviderProxy provider = findProvider(route.getProviderId());
+ MediaRoute2Provider provider = findProvider(route.getProviderId());
if (provider == null) {
Slog.w(TAG, "Ignoring to unselect route of unknown provider " + route);
} else {
@@ -975,21 +978,21 @@
}
private void sendControlRequest(MediaRoute2Info route, Intent request) {
- final MediaRoute2ProviderProxy provider = findProvider(route.getProviderId());
+ final MediaRoute2Provider provider = findProvider(route.getProviderId());
if (provider != null) {
provider.sendControlRequest(route, request);
}
}
private void requestSetVolume(MediaRoute2Info route, int volume) {
- final MediaRoute2ProviderProxy provider = findProvider(route.getProviderId());
+ final MediaRoute2Provider provider = findProvider(route.getProviderId());
if (provider != null) {
provider.requestSetVolume(route, volume);
}
}
private void requestUpdateVolume(MediaRoute2Info route, int delta) {
- final MediaRoute2ProviderProxy provider = findProvider(route.getProviderId());
+ final MediaRoute2Provider provider = findProvider(route.getProviderId());
if (provider != null) {
provider.requestUpdateVolume(route, delta);
}
@@ -1153,8 +1156,8 @@
}
}
- private MediaRoute2ProviderProxy findProvider(String providerId) {
- for (MediaRoute2ProviderProxy provider : mMediaProviders) {
+ private MediaRoute2Provider findProvider(String providerId) {
+ for (MediaRoute2Provider provider : mMediaProviders) {
if (TextUtils.equals(provider.getUniqueId(), providerId)) {
return provider;
}
diff --git a/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java b/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java
new file mode 100644
index 0000000..13ded61
--- /dev/null
+++ b/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java
@@ -0,0 +1,202 @@
+/*
+ * Copyright 2019 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.media;
+
+import android.annotation.NonNull;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.media.AudioManager;
+import android.media.AudioRoutesInfo;
+import android.media.IAudioRoutesObserver;
+import android.media.IAudioService;
+import android.media.MediaRoute2Info;
+import android.media.MediaRoute2ProviderInfo;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.internal.R;
+
+/**
+ * Provides routes for local playbacks such as phone speaker, wired headset, or Bluetooth speakers.
+ */
+class SystemMediaRoute2Provider extends MediaRoute2Provider {
+ private static final String TAG = "MR2SystemProvider";
+ private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+
+ private static final String DEFAULT_ROUTE_ID = "DEFAULT_ROUTE";
+ private static final String BLUETOOTH_ROUTE_ID = "BLUETOOTH_ROUTE";
+
+ // TODO: Move these to a proper place
+ public static final String CATEGORY_LIVE_AUDIO = "android.media.intent.category.LIVE_AUDIO";
+ public static final String CATEGORY_LIVE_VIDEO = "android.media.intent.category.LIVE_VIDEO";
+
+ private final AudioManager mAudioManager;
+ private final IAudioService mAudioService;
+ private final Handler mHandler;
+ private final Context mContext;
+
+ private static ComponentName sComponentName = new ComponentName(
+ SystemMediaRoute2Provider.class.getPackageName$(),
+ SystemMediaRoute2Provider.class.getName());
+
+ //TODO: Clean up these when audio manager support multiple bt devices
+ MediaRoute2Info mDefaultRoute;
+ MediaRoute2Info mBluetoothA2dpRoute;
+ final AudioRoutesInfo mCurAudioRoutesInfo = new AudioRoutesInfo();
+
+ final IAudioRoutesObserver.Stub mAudioRoutesObserver = new IAudioRoutesObserver.Stub() {
+ @Override
+ public void dispatchAudioRoutesChanged(final AudioRoutesInfo newRoutes) {
+ mHandler.post(new Runnable() {
+ @Override public void run() {
+ updateAudioRoutes(newRoutes);
+ }
+ });
+ }
+ };
+
+ SystemMediaRoute2Provider(Context context, Callback callback) {
+ super(sComponentName);
+ setCallback(callback);
+
+ mContext = context;
+ mHandler = new Handler(Looper.getMainLooper());
+
+ mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+ mAudioService = IAudioService.Stub.asInterface(
+ ServiceManager.getService(Context.AUDIO_SERVICE));
+
+ initializeRoutes();
+ }
+
+ //TODO: implement method
+ @Override
+ public void requestSelectRoute(@NonNull String packageName, @NonNull String routeId, int seq) {
+ try {
+ mAudioService.setBluetoothA2dpOn(
+ !TextUtils.equals(routeId, mDefaultRoute.getId()));
+ } catch (RemoteException ex) {
+ Log.e(TAG, "Error changing Bluetooth A2DP route");
+ }
+ }
+
+ //TODO: implement method
+ @Override
+ public void unselectRoute(@NonNull String packageName, @NonNull String routeId) {
+ // does nothing..?
+ }
+
+ //TODO: implement method
+ @Override
+ public void sendControlRequest(@NonNull MediaRoute2Info route, @NonNull Intent request) {
+ }
+
+ //TODO: implement method
+ @Override
+ public void requestSetVolume(MediaRoute2Info route, int volume) {
+ }
+
+ //TODO: implement method
+ @Override
+ public void requestUpdateVolume(MediaRoute2Info route, int delta) {
+ }
+
+ void initializeRoutes() {
+ //TODO: adds necessary info
+ mDefaultRoute = new MediaRoute2Info.Builder(
+ DEFAULT_ROUTE_ID,
+ mContext.getResources().getText(R.string.default_audio_route_name).toString())
+ .setVolumeHandling(mAudioManager.isVolumeFixed()
+ ? MediaRoute2Info.PLAYBACK_VOLUME_FIXED
+ : MediaRoute2Info.PLAYBACK_VOLUME_VARIABLE)
+ .setVolumeMax(mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC))
+ .setVolume(mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC))
+ .addSupportedCategory(CATEGORY_LIVE_AUDIO)
+ .addSupportedCategory(CATEGORY_LIVE_VIDEO)
+ .build();
+
+ AudioRoutesInfo newAudioRoutes = null;
+ try {
+ newAudioRoutes = mAudioService.startWatchingRoutes(mAudioRoutesObserver);
+ } catch (RemoteException e) {
+ }
+ if (newAudioRoutes != null) {
+ // This will select the active BT route if there is one and the current
+ // selected route is the default system route, or if there is no selected
+ // route yet.
+ updateAudioRoutes(newAudioRoutes);
+ }
+
+ publishRoutes();
+ }
+
+ void updateAudioRoutes(AudioRoutesInfo newRoutes) {
+ int name = R.string.default_audio_route_name;
+ mCurAudioRoutesInfo.mainType = newRoutes.mainType;
+ if ((newRoutes.mainType & AudioRoutesInfo.MAIN_HEADPHONES) != 0
+ || (newRoutes.mainType & AudioRoutesInfo.MAIN_HEADSET) != 0) {
+ name = com.android.internal.R.string.default_audio_route_name_headphones;
+ } else if ((newRoutes.mainType & AudioRoutesInfo.MAIN_DOCK_SPEAKERS) != 0) {
+ name = com.android.internal.R.string.default_audio_route_name_dock_speakers;
+ } else if ((newRoutes.mainType & AudioRoutesInfo.MAIN_HDMI) != 0) {
+ name = com.android.internal.R.string.default_audio_route_name_hdmi;
+ } else if ((newRoutes.mainType & AudioRoutesInfo.MAIN_USB) != 0) {
+ name = com.android.internal.R.string.default_audio_route_name_usb;
+ }
+
+ mDefaultRoute = new MediaRoute2Info.Builder(
+ DEFAULT_ROUTE_ID, mContext.getResources().getText(name).toString())
+ .setVolumeHandling(mAudioManager.isVolumeFixed()
+ ? MediaRoute2Info.PLAYBACK_VOLUME_FIXED
+ : MediaRoute2Info.PLAYBACK_VOLUME_VARIABLE)
+ .setVolumeMax(mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC))
+ .setVolume(mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC))
+ .addSupportedCategory(CATEGORY_LIVE_AUDIO)
+ .addSupportedCategory(CATEGORY_LIVE_VIDEO)
+ .build();
+
+ if (!TextUtils.equals(newRoutes.bluetoothName, mCurAudioRoutesInfo.bluetoothName)) {
+ mCurAudioRoutesInfo.bluetoothName = newRoutes.bluetoothName;
+ if (mCurAudioRoutesInfo.bluetoothName != null) {
+ //TODO: mark as bluetooth once MediaRoute2Info has device type
+ mBluetoothA2dpRoute = new MediaRoute2Info.Builder(BLUETOOTH_ROUTE_ID,
+ mCurAudioRoutesInfo.bluetoothName.toString())
+ .setDescription(mContext.getResources().getText(
+ R.string.bluetooth_a2dp_audio_route_name).toString())
+ .addSupportedCategory(CATEGORY_LIVE_AUDIO)
+ .build();
+ } else if (mBluetoothA2dpRoute != null) {
+ mBluetoothA2dpRoute = null;
+ }
+ }
+
+ publishRoutes();
+ }
+ void publishRoutes() {
+ MediaRoute2ProviderInfo.Builder builder = new MediaRoute2ProviderInfo.Builder()
+ .addRoute(mDefaultRoute);
+ if (mBluetoothA2dpRoute != null) {
+ builder.addRoute(mBluetoothA2dpRoute);
+ }
+ setAndNotifyProviderInfo(builder.build());
+ }
+}
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index ec53157..52866f3 100755
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -131,6 +131,7 @@
import android.app.usage.UsageEvents;
import android.app.usage.UsageStatsManagerInternal;
import android.companion.ICompanionDeviceManager;
+import android.compat.annotation.ChangeId;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentProvider;
@@ -216,6 +217,7 @@
import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.compat.IPlatformCompat;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
@@ -236,6 +238,7 @@
import com.android.server.IoThread;
import com.android.server.LocalServices;
import com.android.server.SystemService;
+import com.android.server.UiThread;
import com.android.server.lights.Light;
import com.android.server.lights.LightsManager;
import com.android.server.notification.ManagedServices.ManagedServiceInfo;
@@ -355,6 +358,15 @@
private static final int REQUEST_CODE_TIMEOUT = 1;
private static final String SCHEME_TIMEOUT = "timeout";
private static final String EXTRA_KEY = "key";
+
+ /**
+ * Apps targeting R+ that post custom toasts in the background will have those blocked. Apps can
+ * still post toasts created with {@link Toast#makeText(Context, CharSequence, int)} and its
+ * variants while in the background.
+ */
+ @ChangeId
+ private static final long CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK = 128611929L;
+
private IActivityManager mAm;
private ActivityManager mActivityManager;
private IPackageManager mPackageManager;
@@ -372,9 +384,11 @@
private UriGrantsManagerInternal mUgmInternal;
private RoleObserver mRoleObserver;
private UserManager mUm;
+ private IPlatformCompat mPlatformCompat;
final IBinder mForegroundToken = new Binder();
private WorkerHandler mHandler;
+ private Handler mUiHandler;
private final HandlerThread mRankingThread = new HandlerThread("ranker",
Process.THREAD_PRIORITY_BACKGROUND);
@@ -1773,8 +1787,11 @@
ServiceManager.getService(Context.DEVICE_IDLE_CONTROLLER));
mDpm = dpm;
mUm = userManager;
+ mPlatformCompat = IPlatformCompat.Stub.asInterface(
+ ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE));
mHandler = new WorkerHandler(looper);
+ mUiHandler = new Handler(UiThread.get().getLooper());
String[] extractorNames;
try {
extractorNames = resources.getStringArray(R.array.config_notificationSignalExtractors);
@@ -2434,9 +2451,19 @@
// ============================================================================
@Override
+ public void enqueueTextToast(String pkg, ITransientNotification callback, int duration,
+ int displayId) {
+ enqueueToast(pkg, callback, duration, displayId, false);
+ }
+
+ @Override
public void enqueueToast(String pkg, ITransientNotification callback, int duration,
- int displayId)
- {
+ int displayId) {
+ enqueueToast(pkg, callback, duration, displayId, true);
+ }
+
+ private void enqueueToast(String pkg, ITransientNotification callback, int duration,
+ int displayId, boolean isCustomToast) {
if (DBG) {
Slog.i(TAG, "enqueueToast pkg=" + pkg + " callback=" + callback
+ " duration=" + duration + " displayId=" + displayId);
@@ -2448,27 +2475,54 @@
}
final int callingUid = Binder.getCallingUid();
+ final UserHandle callingUser = Binder.getCallingUserHandle();
final boolean isSystemToast = isCallerSystemOrPhone()
|| PackageManagerService.PLATFORM_PACKAGE_NAME.equals(pkg);
final boolean isPackageSuspended = isPackagePaused(pkg);
final boolean notificationsDisabledForPackage = !areNotificationsEnabledForPackage(pkg,
callingUid);
+ final boolean appIsForeground;
long callingIdentity = Binder.clearCallingIdentity();
try {
- final boolean appIsForeground = mActivityManager.getUidImportance(callingUid)
+ appIsForeground = mActivityManager.getUidImportance(callingUid)
== IMPORTANCE_FOREGROUND;
- if (ENABLE_BLOCKED_TOASTS && !isSystemToast && ((notificationsDisabledForPackage
- && !appIsForeground) || isPackageSuspended)) {
- Slog.e(TAG, "Suppressing toast from package " + pkg
- + (isPackageSuspended ? " due to package suspended."
- : " by user request."));
- return;
- }
} finally {
Binder.restoreCallingIdentity(callingIdentity);
}
+ if (ENABLE_BLOCKED_TOASTS && !isSystemToast && ((notificationsDisabledForPackage
+ && !appIsForeground) || isPackageSuspended)) {
+ Slog.e(TAG, "Suppressing toast from package " + pkg
+ + (isPackageSuspended ? " due to package suspended."
+ : " by user request."));
+ return;
+ }
+
+ if (isCustomToast && !appIsForeground && !isSystemToast) {
+ boolean block;
+ try {
+ block = mPlatformCompat.isChangeEnabledByPackageName(
+ CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK, pkg,
+ callingUser.getIdentifier());
+ } catch (RemoteException e) {
+ // Shouldn't happen have since it's a local local
+ Slog.e(TAG, "Unexpected exception while checking block background custom toasts"
+ + " change", e);
+ block = false;
+ }
+ if (block) {
+ // TODO(b/144152069): Remove informative toast
+ mUiHandler.post(() -> Toast.makeText(getContext(),
+ "Background custom toast blocked for package " + pkg + ".\n"
+ + "See go/r-toast-block.",
+ Toast.LENGTH_SHORT).show());
+ Slog.w(TAG, "Blocking custom toast from package " + pkg
+ + " due to package not in the foreground");
+ return;
+ }
+ }
+
synchronized (mToastQueue) {
int callingPid = Binder.getCallingPid();
long callingId = Binder.clearCallingIdentity();
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
index d5f4ff2..41c323c 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
@@ -1095,19 +1095,6 @@
assertMultiPackageConsistencyLocked(childSessions);
}
- if (params.isStaged) {
- final PackageInstallerSession activeSession = mStagingManager.getActiveSession();
- final boolean anotherSessionAlreadyInProgress =
- activeSession != null && sessionId != activeSession.sessionId
- && mParentSessionId != activeSession.sessionId;
- if (anotherSessionAlreadyInProgress) {
- throw new PackageManagerException(
- PackageManager.INSTALL_FAILED_OTHER_STAGED_SESSION_IN_PROGRESS,
- "There is already in-progress committed staged session "
- + activeSession.sessionId, null);
- }
- }
-
// Read transfers from the original owner stay open, but as the session's data
// cannot be modified anymore, there is no leak of information. For staged sessions,
// further validation is performed by the staging manager.
@@ -1130,6 +1117,10 @@
throw new PackageManagerException(e);
}
}
+
+ if (params.isStaged) {
+ mStagingManager.checkNonOverlappingWithStagedSessions(this);
+ }
} catch (PackageManagerException e) {
// Session is sealed but could not be verified, we need to destroy it.
destroyInternal();
@@ -1453,7 +1444,8 @@
/**
* Validate apex install.
* <p>
- * Sets {@link #mResolvedBaseFile} for RollbackManager to use.
+ * Sets {@link #mResolvedBaseFile} for RollbackManager to use. Sets {@link #mPackageName} for
+ * StagingManager to use.
*/
@GuardedBy("mLock")
private void validateApexInstallLocked()
@@ -1482,8 +1474,22 @@
final File targetFile = new File(stageDir, targetName);
resolveAndStageFile(addedFile, targetFile);
-
mResolvedBaseFile = targetFile;
+
+ // Populate package name of the apex session
+ mPackageName = null;
+ final ApkLite apk;
+ try {
+ apk = PackageParser.parseApkLite(
+ mResolvedBaseFile, PackageParser.PARSE_COLLECT_CERTIFICATES);
+ } catch (PackageParserException e) {
+ throw PackageManagerException.from(e);
+ }
+
+ if (mPackageName == null) {
+ mPackageName = apk.packageName;
+ mVersionCode = apk.getLongVersionCode();
+ }
}
/**
@@ -1852,6 +1858,15 @@
}
/**
+ * @return the package name of this session
+ */
+ String getPackageName() {
+ synchronized (mLock) {
+ return mPackageName;
+ }
+ }
+
+ /**
* @return the timestamp of when this session last changed state
*/
public long getUpdatedMillis() {
diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java
index 6b4ef69..532ff86 100644
--- a/services/core/java/com/android/server/pm/StagingManager.java
+++ b/services/core/java/com/android/server/pm/StagingManager.java
@@ -546,25 +546,95 @@
mPreRebootVerificationHandler.startPreRebootVerification(session.sessionId);
}
- @Nullable
- PackageInstallerSession getActiveSession() {
+ /**
+ * <p> Check if the session provided is non-overlapping with the active staged sessions.
+ *
+ * <p> A session is non-overlapping if it meets one of the following conditions: </p>
+ * <ul>
+ * <li>It is a parent session</li>
+ * <li>It is already one of the active sessions</li>
+ * <li>Its package name is not same as any of the active sessions</li>
+ * </ul>
+ * @throws PackageManagerException if session fails the check
+ */
+ void checkNonOverlappingWithStagedSessions(@NonNull PackageInstallerSession session)
+ throws PackageManagerException {
+ if (session.isMultiPackage()) {
+ // We cannot say a parent session overlaps until we process its children
+ return;
+ }
+ if (session.getPackageName() == null) {
+ throw new PackageManagerException(PackageManager.INSTALL_FAILED_INVALID_APK,
+ "Cannot stage session " + session.sessionId + " with package name null");
+ }
+
synchronized (mStagedSessions) {
for (int i = 0; i < mStagedSessions.size(); i++) {
- final PackageInstallerSession session = mStagedSessions.valueAt(i);
- if (!session.isCommitted()) {
+ final PackageInstallerSession stagedSession = mStagedSessions.valueAt(i);
+ if (!stagedSession.isCommitted() || stagedSession.isStagedAndInTerminalState()) {
continue;
}
- if (session.hasParentSessionId()) {
- // Staging manager will finalize only parent session. Ignore child sessions
- // picking the active.
+ if (stagedSession.isMultiPackage()) {
+ // This active parent staged session is useless as it doesn't have a package
+ // name and the session we are checking is not a parent session either.
continue;
}
- if (!session.isStagedSessionApplied() && !session.isStagedSessionFailed()) {
- return session;
+
+ // From here on, stagedSession is a non-parent active staged session
+
+ // Check if stagedSession has an active parent session or not
+ if (stagedSession.hasParentSessionId()) {
+ int parentId = stagedSession.getParentSessionId();
+ PackageInstallerSession parentSession = mStagedSessions.get(parentId);
+ if (parentSession == null || parentSession.isStagedAndInTerminalState()) {
+ // Parent session has been abandoned or terminated already
+ continue;
+ }
+ }
+
+ // Check if session is one of the active sessions
+ if (session.sessionId == stagedSession.sessionId) {
+ Slog.w(TAG, "Session " + session.sessionId + " is already staged");
+ continue;
+ }
+
+ // If session is not among the active sessions, then it cannot have same package
+ // name as any of the active sessions.
+ if (session.getPackageName().equals(stagedSession.getPackageName())) {
+ throw new PackageManagerException(
+ PackageManager.INSTALL_FAILED_OTHER_STAGED_SESSION_IN_PROGRESS,
+ "Package: " + session.getPackageName() + " in session: "
+ + session.sessionId + " has been staged already by session: "
+ + stagedSession.sessionId, null);
+ }
+
+ // TODO(b/141843321): Add support for staging multiple sessions in apexd
+ // Since apexd doesn't support multiple staged sessions yet, we have to careful how
+ // we handle apex sessions. We want to allow a set of apex sessions under the same
+ // parent to be staged when there is no previously staged apex sessions.
+ if (isApexSession(session) && isApexSession(stagedSession)) {
+ // session is apex and it can co-exist with stagedSession only if they are from
+ // same parent
+ final boolean coExist;
+ if (!session.hasParentSessionId() && !stagedSession.hasParentSessionId()) {
+ // Both single package apex sessions. Cannot co-exist.
+ coExist = false;
+ } else {
+ // At least one of the session has parent. Both must be from same parent.
+ coExist =
+ session.getParentSessionId() == stagedSession.getParentSessionId();
+ }
+ if (!coExist) {
+ throw new PackageManagerException(
+ PackageManager.INSTALL_FAILED_OTHER_STAGED_SESSION_IN_PROGRESS,
+ "Package: " + session.getPackageName() + " in session: "
+ + session.sessionId + " cannot be staged as there is "
+ + "already another apex staged session: "
+ + stagedSession.sessionId, null);
+ }
}
}
}
- return null;
}
void createSession(@NonNull PackageInstallerSession sessionInfo) {
@@ -591,7 +661,8 @@
ApexSessionInfo apexSession = mApexManager.getStagedSessionInfo(session.sessionId);
if (apexSession == null || isApexSessionFinalized(apexSession)) {
Slog.w(TAG,
- "Cannot abort session because it is not active or APEXD is not reachable");
+ "Cannot abort session " + session.sessionId
+ + " because it is not active or APEXD is not reachable");
return;
}
mApexManager.abortActiveSession();
diff --git a/services/core/java/com/android/server/power/InattentiveSleepWarningController.java b/services/core/java/com/android/server/power/InattentiveSleepWarningController.java
index db8a63f..dbedde6 100644
--- a/services/core/java/com/android/server/power/InattentiveSleepWarningController.java
+++ b/services/core/java/com/android/server/power/InattentiveSleepWarningController.java
@@ -75,18 +75,18 @@
* Dismiss the warning.
*/
@GuardedBy("PowerManagerService.mLock")
- public void dismiss() {
+ public void dismiss(boolean animated) {
if (!isShown()) {
return;
}
- mHandler.post(this::dismissInternal);
+ mHandler.post(() -> dismissInternal(animated));
mIsShown = false;
}
- private void dismissInternal() {
+ private void dismissInternal(boolean animated) {
try {
- getStatusBar().dismissInattentiveSleepWarning();
+ getStatusBar().dismissInattentiveSleepWarning(animated);
} catch (RemoteException e) {
Log.e(TAG, "Failed to dismiss inattentive sleep warning", e);
}
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 00e0f71..fce7f04 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -2240,10 +2240,16 @@
private boolean maybeHideInattentiveSleepWarningLocked(long now, long showWarningTime) {
long attentiveTimeout = getAttentiveTimeoutLocked();
- if (mInattentiveSleepWarningOverlayController.isShown() && (attentiveTimeout < 0
- || isBeingKeptFromShowingInattentiveSleepWarningLocked()
- || now < showWarningTime)) {
- mInattentiveSleepWarningOverlayController.dismiss();
+ if (!mInattentiveSleepWarningOverlayController.isShown()) {
+ return false;
+ }
+
+ if (mWakefulness != WAKEFULNESS_AWAKE) {
+ mInattentiveSleepWarningOverlayController.dismiss(false);
+ return true;
+ } else if (attentiveTimeout < 0 || isBeingKeptFromShowingInattentiveSleepWarningLocked()
+ || now < showWarningTime) {
+ mInattentiveSleepWarningOverlayController.dismiss(true);
return true;
}
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index c256b84..6ea08fe 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -1387,11 +1387,11 @@
}
@Override
- public void dismissInattentiveSleepWarning() {
+ public void dismissInattentiveSleepWarning(boolean animated) {
enforceStatusBarService();
if (mBar != null) {
try {
- mBar.dismissInattentiveSleepWarning();
+ mBar.dismissInattentiveSleepWarning(animated);
} catch (RemoteException ex) {
}
}
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index dd561e1..d66aa18 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -2170,14 +2170,21 @@
}
}
+ @Deprecated
@Override
public ParcelFileDescriptor getWallpaper(String callingPkg, IWallpaperManagerCallback cb,
final int which, Bundle outParams, int wallpaperUserId) {
+ return getWallpaperWithFeature(callingPkg, null, cb, which, outParams, wallpaperUserId);
+ }
+
+ @Override
+ public ParcelFileDescriptor getWallpaperWithFeature(String callingPkg, String callingFeatureId,
+ IWallpaperManagerCallback cb, final int which, Bundle outParams, int wallpaperUserId) {
final int hasPrivilege = mContext.checkCallingOrSelfPermission(
android.Manifest.permission.READ_WALLPAPER_INTERNAL);
if (hasPrivilege != PackageManager.PERMISSION_GRANTED) {
mContext.getSystemService(StorageManager.class).checkPermissionReadImages(true,
- Binder.getCallingPid(), Binder.getCallingUid(), callingPkg);
+ Binder.getCallingPid(), Binder.getCallingUid(), callingPkg, callingFeatureId);
}
wallpaperUserId = ActivityManager.handleIncomingUser(Binder.getCallingPid(),
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index e80c9b3..8039724 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -4358,7 +4358,7 @@
final boolean isDisplaySleeping = getDisplay().isSleeping()
&& getDisplayId() != DEFAULT_DISPLAY;
// Whether this activity is the top activity of this stack.
- final boolean isTop = this == stack.getTopActivity();
+ final boolean isTop = this == stack.getTopNonFinishingActivity();
// Exclude the case where this is the top activity in a pinned stack.
final boolean isTopNotPinnedStack = stack.isAttached()
&& stack.getDisplay().isTopNotPinnedStack(stack);
@@ -6171,8 +6171,7 @@
// The rest of the condition is that only one side is smaller than the parent, but it still
// needs to exclude the cases where the size is limited by the fixed aspect ratio.
if (info.maxAspectRatio > 0) {
- final float aspectRatio = (0.5f + Math.max(appWidth, appHeight))
- / Math.min(appWidth, appHeight);
+ final float aspectRatio = Math.max(appWidth, appHeight) / Math.min(appWidth, appHeight);
if (aspectRatio >= info.maxAspectRatio) {
// The current size has reached the max aspect ratio.
return false;
diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java
index a91998a..8385232 100644
--- a/services/core/java/com/android/server/wm/ActivityStack.java
+++ b/services/core/java/com/android/server/wm/ActivityStack.java
@@ -421,8 +421,6 @@
/** Stores the override windowing-mode from before a transient mode change (eg. split) */
private int mRestoreOverrideWindowingMode = WINDOWING_MODE_UNDEFINED;
- private final ActivityOptions mTmpOptions = ActivityOptions.makeBasic();
-
/** List for processing through a set of activities */
private final ArrayList<ActivityRecord> mTmpActivities = new ArrayList<>();
@@ -750,7 +748,6 @@
// Leaving a transient mode. Interpret UNDEFINED as "restore"
windowingMode = mRestoreOverrideWindowingMode;
}
- mTmpOptions.setLaunchWindowingMode(windowingMode);
// Need to make sure windowing mode is supported. If we in the process of creating the stack
// no need to resolve the windowing mode again as it is already resolved to the right mode.
@@ -797,7 +794,7 @@
return;
}
- final ActivityRecord topActivity = getTopActivity();
+ final ActivityRecord topActivity = getTopNonFinishingActivity();
// For now, assume that the Stack's windowing mode is what will actually be used
// by it's activities. In the future, there may be situations where this doesn't
@@ -1044,9 +1041,9 @@
return null;
}
- ActivityRecord getTopActivity() {
+ ActivityRecord getTopNonFinishingActivity() {
for (int taskNdx = getChildCount() - 1; taskNdx >= 0; --taskNdx) {
- final ActivityRecord r = getChildAt(taskNdx).getTopActivity();
+ final ActivityRecord r = getChildAt(taskNdx).getTopNonFinishingActivity();
if (r != null) {
return r;
}
@@ -1267,7 +1264,7 @@
}
// Overlays should not be considered as the task's logical top activity.
- final ActivityRecord r = task.getTopActivity(false /* includeOverlays */);
+ final ActivityRecord r = task.getTopNonFinishingActivity(false /* includeOverlays */);
if (r == null || r.finishing || r.mUserId != userId ||
r.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE) {
if (DEBUG_TASKS) Slog.d(TAG_TASKS, "Skipping " + task + ": mismatch root " + r);
@@ -1826,7 +1823,7 @@
}
boolean isTopActivityVisible() {
- final ActivityRecord topActivity = getTopActivity();
+ final ActivityRecord topActivity = getTopNonFinishingActivity();
return topActivity != null && topActivity.visible;
}
@@ -2902,7 +2899,7 @@
boolean startIt = true;
for (int taskNdx = getChildCount() - 1; taskNdx >= 0; --taskNdx) {
task = getChildAt(taskNdx);
- if (task.getTopActivity() == null) {
+ if (task.getTopNonFinishingActivity() == null) {
// All activities in task are finishing.
continue;
}
@@ -3383,7 +3380,7 @@
int taskNdx = mChildren.indexOf(task);
if (taskNdx >= 0) {
- ActivityRecord newTop = getChildAt(taskNdx).getTopActivity();
+ ActivityRecord newTop = getChildAt(taskNdx).getTopNonFinishingActivity();
if (newTop != null) {
taskTop = newTop;
}
@@ -4005,7 +4002,8 @@
if (DEBUG_SWITCH) Slog.v(TAG_SWITCH, "moveTaskToFront: " + tr);
final ActivityStack topStack = getDisplay().getTopStack();
- final ActivityRecord topActivity = topStack != null ? topStack.getTopActivity() : null;
+ final ActivityRecord topActivity = topStack != null
+ ? topStack.getTopNonFinishingActivity() : null;
final int numTasks = getChildCount();
final int index = mChildren.indexOf(tr);
if (numTasks == 0 || index < 0) {
@@ -4036,7 +4034,7 @@
positionChildAtTop(tr);
// Don't refocus if invisible to current user
- final ActivityRecord top = tr.getTopActivity();
+ final ActivityRecord top = tr.getTopNonFinishingActivity();
if (top == null || !top.okToShowLocked()) {
if (top != null) {
mStackSupervisor.mRecentTasks.add(top.getTask());
@@ -4355,7 +4353,7 @@
int userId = UserHandle.getUserId(callingUid);
for (int taskNdx = getChildCount() - 1; taskNdx >= 0; --taskNdx) {
final Task task = getChildAt(taskNdx);
- if (task.getTopActivity() == null) {
+ if (task.getTopNonFinishingActivity() == null) {
// Skip if there are no activities in the task
continue;
}
diff --git a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
index 016654f..530fdcf 100644
--- a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
@@ -1428,7 +1428,7 @@
moveHomeStackToFrontIfNeeded(flags, currentStack.getDisplay(), reason);
}
- final ActivityRecord r = task.getTopActivity();
+ final ActivityRecord r = task.getTopNonFinishingActivity();
currentStack.moveTaskToFrontLocked(task, false /* noAnimation */, options,
r == null ? null : r.appTimeTracker, reason);
@@ -2077,7 +2077,7 @@
// When launching tasks behind, update the last active time of the top task after the new
// task has been shown briefly
- final ActivityRecord top = stack.getTopActivity();
+ final ActivityRecord top = stack.getTopNonFinishingActivity();
if (top != null) {
top.getTask().touchActiveTime();
}
@@ -2458,7 +2458,7 @@
/** Notifies that the top activity of the task is forced to be resizeable. */
private void handleForcedResizableTaskIfNeeded(Task task, int reason) {
- final ActivityRecord topActivity = task.getTopActivity();
+ final ActivityRecord topActivity = task.getTopNonFinishingActivity();
if (topActivity == null || topActivity.noDisplay
|| !topActivity.isNonResizableOrForcedResizable(task.getWindowingMode())) {
return;
@@ -2750,7 +2750,7 @@
// Work Challenge is present) let startActivityInPackage handle the intercepting.
if (!mService.mAmInternal.shouldConfirmCredentials(task.mUserId)
&& task.getRootActivity() != null) {
- final ActivityRecord targetActivity = task.getTopActivity();
+ final ActivityRecord targetActivity = task.getTopNonFinishingActivity();
mRootActivityContainer.sendPowerHintForLaunchStartIfNeeded(
true /* forceSend */, targetActivity);
@@ -2767,7 +2767,7 @@
}
mService.getActivityStartController().postStartActivityProcessingForLastStarter(
- task.getTopActivity(), ActivityManager.START_TASK_TO_FRONT,
+ task.getTopNonFinishingActivity(), ActivityManager.START_TASK_TO_FRONT,
task.getStack());
return ActivityManager.START_TASK_TO_FRONT;
}
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index 2218c72..be7f887 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -1502,7 +1502,8 @@
return startResult;
}
- final ActivityRecord targetTaskTop = newTask ? null : targetTask.getTopActivity();
+ final ActivityRecord targetTaskTop = newTask
+ ? null : targetTask.getTopNonFinishingActivity();
if (targetTaskTop != null) {
// Recycle the target task for this launch.
startResult = recycleTask(targetTask, targetTaskTop, reusedTask);
@@ -1559,8 +1560,8 @@
mRootActivityContainer.sendPowerHintForLaunchStartIfNeeded(
false /* forceSend */, mStartActivity);
- mTargetStack.startActivityLocked(mStartActivity, topStack.getTopActivity(), newTask,
- mKeepCurTransition, mOptions);
+ mTargetStack.startActivityLocked(mStartActivity, topStack.getTopNonFinishingActivity(),
+ newTask, mKeepCurTransition, mOptions);
if (mDoResume) {
final ActivityRecord topTaskActivity =
mStartActivity.getTask().topRunningActivityLocked();
@@ -1612,7 +1613,7 @@
return mInTask;
} else {
final ActivityRecord top = computeStackFocus(mStartActivity, false /* newTask */,
- mLaunchFlags, mOptions).getTopActivity();
+ mLaunchFlags, mOptions).getTopNonFinishingActivity();
if (top != null) {
return top.getTask();
}
@@ -1727,7 +1728,8 @@
return START_RETURN_INTENT_TO_CALLER;
}
- complyActivityFlags(targetTask, reusedTask != null ? reusedTask.getTopActivity() : null);
+ complyActivityFlags(targetTask,
+ reusedTask != null ? reusedTask.getTopNonFinishingActivity() : null);
if (clearTaskForReuse) {
// Clear task for re-use so later code to methods
@@ -1755,7 +1757,7 @@
// FLAG_ACTIVITY_CLEAR_TOP flag. In that case, return the top running activity in the
// task instead.
mLastStartActivityRecord =
- targetTaskTop.finishing ? targetTask.getTopActivity() : targetTaskTop;
+ targetTaskTop.finishing ? targetTask.getTopNonFinishingActivity() : targetTaskTop;
return mMovedToFront ? START_TASK_TO_FRONT : START_DELIVERED_TO_TOP;
}
@@ -1806,7 +1808,7 @@
* task.
*/
private void complyActivityFlags(Task targetTask, ActivityRecord reusedActivity) {
- ActivityRecord targetTaskTop = targetTask.getTopActivity();
+ ActivityRecord targetTaskTop = targetTask.getTopNonFinishingActivity();
final boolean resetTask =
reusedActivity != null && (mLaunchFlags & FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) != 0;
if (resetTask) {
@@ -2037,7 +2039,8 @@
if (!mOptions.canTaskOverlayResume()) {
final Task task = mRootActivityContainer.anyTaskForId(
mOptions.getLaunchTaskId());
- final ActivityRecord top = task != null ? task.getTopActivity() : null;
+ final ActivityRecord top = task != null
+ ? task.getTopNonFinishingActivity() : null;
if (top != null && !top.isState(RESUMED)) {
// The caller specifies that we'd like to be avoided to be moved to the
@@ -2295,8 +2298,8 @@
if (differentTopTask && !mAvoidMoveToFront) {
mStartActivity.intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
- if (mSourceRecord == null || (mSourceStack.getTopActivity() != null &&
- mSourceStack.getTopActivity().getTask()
+ if (mSourceRecord == null || (mSourceStack.getTopNonFinishingActivity() != null &&
+ mSourceStack.getTopNonFinishingActivity().getTask()
== mSourceRecord.getTask())) {
// We really do want to push this one into the user's face, right now.
if (mLaunchTaskBehind && mSourceRecord != null) {
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 79c76b9..6977a45 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -2410,7 +2410,7 @@
mStackSupervisor.findTaskToMoveToFront(task, flags, realOptions, "moveTaskToFront",
false /* forceNonResizable */);
- final ActivityRecord topActivity = task.getTopActivity();
+ final ActivityRecord topActivity = task.getTopNonFinishingActivity();
if (topActivity != null) {
// We are reshowing a task, use a starting window to hide the initial draw delay
@@ -2999,7 +2999,7 @@
public boolean isTopOfTask(IBinder token) {
synchronized (mGlobalLock) {
ActivityRecord r = ActivityRecord.isInStackLocked(token);
- return r != null && r.getTask().getTopActivity() == r;
+ return r != null && r.getTask().getTopNonFinishingActivity() == r;
}
}
@@ -3589,7 +3589,7 @@
"enqueueAssistContext()");
synchronized (mGlobalLock) {
- ActivityRecord activity = getTopDisplayFocusedStack().getTopActivity();
+ ActivityRecord activity = getTopDisplayFocusedStack().getTopNonFinishingActivity();
if (activity == null) {
Slog.w(TAG, "getAssistContextExtras failed: no top activity");
return null;
@@ -3722,7 +3722,7 @@
return false;
}
- final ActivityRecord activity = focusedStack.getTopActivity();
+ final ActivityRecord activity = focusedStack.getTopNonFinishingActivity();
if (activity == null) {
return false;
}
@@ -3737,7 +3737,7 @@
try {
synchronized (mGlobalLock) {
ActivityRecord caller = ActivityRecord.forTokenLocked(token);
- ActivityRecord top = getTopDisplayFocusedStack().getTopActivity();
+ ActivityRecord top = getTopDisplayFocusedStack().getTopNonFinishingActivity();
if (top != caller) {
Slog.w(TAG, "showAssistFromActivity failed: caller " + caller
+ " is not current top " + top);
@@ -4355,7 +4355,7 @@
public void startLocalVoiceInteraction(IBinder callingActivity, Bundle options) {
Slog.i(TAG, "Activity tried to startLocalVoiceInteraction");
synchronized (mGlobalLock) {
- ActivityRecord activity = getTopDisplayFocusedStack().getTopActivity();
+ ActivityRecord activity = getTopDisplayFocusedStack().getTopNonFinishingActivity();
if (ActivityRecord.forTokenLocked(callingActivity) != activity) {
throw new SecurityException("Only focused activity can call startVoiceInteraction");
}
@@ -6576,7 +6576,7 @@
+ " Requested task not found");
return null;
}
- final ActivityRecord activity = task.getTopActivity();
+ final ActivityRecord activity = task.getTopNonFinishingActivity();
if (activity == null) {
Slog.w(TAG, "getApplicationThreadForTopActivity failed:"
+ " Requested activity not found");
diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java
index 0c68084..c76d03c 100644
--- a/services/core/java/com/android/server/wm/DisplayRotation.java
+++ b/services/core/java/com/android/server/wm/DisplayRotation.java
@@ -541,8 +541,8 @@
}
mService.mH.removeCallbacks(mDisplayRotationHandlerTimeout);
mIsWaitingForRemoteRotation = false;
- mService.mAtmService.applyContainerTransaction(t);
mDisplayContent.sendNewConfiguration();
+ mService.mAtmService.applyContainerTransaction(t);
}
}
diff --git a/services/core/java/com/android/server/wm/LockTaskController.java b/services/core/java/com/android/server/wm/LockTaskController.java
index 6810f8c..2ece6e2 100644
--- a/services/core/java/com/android/server/wm/LockTaskController.java
+++ b/services/core/java/com/android/server/wm/LockTaskController.java
@@ -239,7 +239,7 @@
boolean activityBlockedFromFinish(ActivityRecord activity) {
final Task task = activity.getTask();
if (activity == task.getRootActivity()
- && activity == task.getTopActivity()
+ && activity == task.getTopNonFinishingActivity()
&& task.mLockTaskAuth != LOCK_TASK_AUTH_LAUNCHABLE_PRIV
&& isRootTask(task)) {
Slog.i(TAG, "Not finishing task in lock task mode");
diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java
index 2f46937..f0e441f 100644
--- a/services/core/java/com/android/server/wm/RecentTasks.java
+++ b/services/core/java/com/android/server/wm/RecentTasks.java
@@ -717,7 +717,7 @@
// Only look at tasks for the user ID of interest.
continue;
}
- if (task.autoRemoveRecents && task.getTopActivity() == null) {
+ if (task.autoRemoveRecents && task.getTopNonFinishingActivity() == null) {
// This situation is broken, and we should just get rid of it now.
remove(task);
Slog.w(TAG, "Removing auto-remove without activity: " + task);
@@ -931,7 +931,7 @@
}
}
- if (task.autoRemoveRecents && task.getTopActivity() == null) {
+ if (task.autoRemoveRecents && task.getTopNonFinishingActivity() == null) {
// Don't include auto remove tasks that are finished or finishing.
if (DEBUG_RECENTS) {
Slog.d(TAG_RECENTS, "Skipping, auto-remove without activity: " + task);
diff --git a/services/core/java/com/android/server/wm/RecentsAnimation.java b/services/core/java/com/android/server/wm/RecentsAnimation.java
index caf95de..948ed79 100644
--- a/services/core/java/com/android/server/wm/RecentsAnimation.java
+++ b/services/core/java/com/android/server/wm/RecentsAnimation.java
@@ -429,7 +429,7 @@
// 1) The next launching task is not being animated by the recents animation
// 2) The next task is home activity. (i.e. pressing home key to back home in recents).
if ((!controller.isAnimatingTask(stack.getTopChild())
- || controller.isTargetApp(stack.getTopActivity()))
+ || controller.isTargetApp(stack.getTopNonFinishingActivity()))
&& controller.shouldDeferCancelUntilNextTransition()) {
// Always prepare an app transition since we rely on the transition callbacks to cleanup
mWindowManager.prepareAppTransition(TRANSIT_NONE, false);
@@ -494,7 +494,7 @@
final Task task = targetStack.getChildAt(i);
if (task.mUserId == mUserId
&& task.getBaseIntent().getComponent().equals(mTargetIntent.getComponent())) {
- return task.getTopActivity();
+ return task.getTopNonFinishingActivity();
}
}
return null;
diff --git a/services/core/java/com/android/server/wm/RootActivityContainer.java b/services/core/java/com/android/server/wm/RootActivityContainer.java
index 06cce52..0995df8 100644
--- a/services/core/java/com/android/server/wm/RootActivityContainer.java
+++ b/services/core/java/com/android/server/wm/RootActivityContainer.java
@@ -676,7 +676,7 @@
final ActivityStack stack = display.getChildAt(j);
// Get top activity from a visible stack and add it to the list.
if (stack.shouldBeVisible(null /* starting */)) {
- final ActivityRecord top = stack.getTopActivity();
+ final ActivityRecord top = stack.getTopNonFinishingActivity();
if (top != null) {
if (stack == topFocusedStack) {
topActivityTokens.add(0, top.appToken);
@@ -1268,8 +1268,8 @@
taskIds[i] = task.mTaskId;
taskNames[i] = task.origActivity != null ? task.origActivity.flattenToString()
: task.realActivity != null ? task.realActivity.flattenToString()
- : task.getTopActivity() != null ? task.getTopActivity().packageName
- : "unknown";
+ : task.getTopNonFinishingActivity() != null
+ ? task.getTopNonFinishingActivity().packageName : "unknown";
taskBounds[i] = mService.getTaskBounds(task.mTaskId);
taskUserIds[i] = task.mUserId;
}
@@ -2138,7 +2138,7 @@
*/
private boolean taskTopActivityIsUser(Task task, @UserIdInt int userId) {
// To handle the case that work app is in the task but just is not the top one.
- final ActivityRecord activityRecord = task.getTopActivity();
+ final ActivityRecord activityRecord = task.getTopNonFinishingActivity();
final ActivityRecord resultTo = (activityRecord != null ? activityRecord.resultTo : null);
return (activityRecord != null && activityRecord.mUserId == userId)
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index b229a1d..96bac88 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -60,9 +60,7 @@
import static com.android.server.EventLogTags.WM_TASK_REMOVED;
import static com.android.server.am.TaskRecordProto.ACTIVITIES;
import static com.android.server.am.TaskRecordProto.ACTIVITY_TYPE;
-import static com.android.server.am.TaskRecordProto.BOUNDS;
import static com.android.server.am.TaskRecordProto.FULLSCREEN;
-import static com.android.server.am.TaskRecordProto.ID;
import static com.android.server.am.TaskRecordProto.LAST_NON_FULLSCREEN_BOUNDS;
import static com.android.server.am.TaskRecordProto.MIN_HEIGHT;
import static com.android.server.am.TaskRecordProto.MIN_WIDTH;
@@ -89,10 +87,8 @@
import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_DOCKED_DIVIDER;
import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_ADD_REMOVE;
import static com.android.server.wm.TaskProto.APP_WINDOW_TOKENS;
-import static com.android.server.wm.TaskProto.BOUNDS;
import static com.android.server.wm.TaskProto.DISPLAYED_BOUNDS;
import static com.android.server.wm.TaskProto.FILLS_PARENT;
-import static com.android.server.wm.TaskProto.ID;
import static com.android.server.wm.TaskProto.SURFACE_HEIGHT;
import static com.android.server.wm.TaskProto.SURFACE_WIDTH;
import static com.android.server.wm.TaskProto.WINDOW_CONTAINER;
@@ -314,6 +310,7 @@
private final Rect mTmpNonDecorBounds = new Rect();
private final Rect mTmpBounds = new Rect();
private final Rect mTmpInsets = new Rect();
+ private final Rect mTmpFullBounds = new Rect();
// Last non-fullscreen bounds the task was launched in or resized to.
// The information is persisted and used to determine the appropriate stack to launch the
@@ -658,7 +655,7 @@
}
final int toStackWindowingMode = toStack.getWindowingMode();
- final ActivityRecord topActivity = getTopActivity();
+ final ActivityRecord topActivity = getTopNonFinishingActivity();
final boolean mightReplaceWindow = topActivity != null
&& replaceWindowsOnTaskMove(getWindowingMode(), toStackWindowingMode);
@@ -1080,11 +1077,11 @@
return getChildAt(rootActivityIndex);
}
- ActivityRecord getTopActivity() {
- return getTopActivity(true /* includeOverlays */);
+ ActivityRecord getTopNonFinishingActivity() {
+ return getTopNonFinishingActivity(true /* includeOverlays */);
}
- ActivityRecord getTopActivity(boolean includeOverlays) {
+ ActivityRecord getTopNonFinishingActivity(boolean includeOverlays) {
for (int i = getChildCount() - 1; i >= 0; --i) {
final ActivityRecord r = getChildAt(i);
if (r.finishing || (!includeOverlays && r.mTaskOverlay)) {
@@ -1331,9 +1328,9 @@
* Completely remove all activities associated with an existing
* task starting at a specified index.
*/
- private void performClearTaskAtIndexLocked(int activityNdx, String reason) {
+ private void performClearTaskAtIndexLocked(String reason) {
int numActivities = getChildCount();
- for ( ; activityNdx < numActivities; ++activityNdx) {
+ for (int activityNdx = 0; activityNdx < numActivities; ++activityNdx) {
final ActivityRecord r = getChildAt(activityNdx);
if (r.finishing) {
continue;
@@ -1358,7 +1355,7 @@
*/
void performClearTaskLocked() {
mReuseTask = true;
- performClearTaskAtIndexLocked(0, "clear-task-all");
+ performClearTaskAtIndexLocked("clear-task-all");
mReuseTask = false;
}
@@ -1428,7 +1425,7 @@
void removeTaskActivitiesLocked(String reason) {
// Just remove the entire task.
- performClearTaskAtIndexLocked(0, reason);
+ performClearTaskAtIndexLocked(reason);
}
String lockTaskAuthToString() {
@@ -1673,7 +1670,9 @@
}
void adjustForMinimalTaskDimensions(Rect bounds, Rect previousBounds) {
- if (bounds == null) {
+ final Rect parentBounds = getParent() != null ? getParent().getBounds() : null;
+ if (bounds == null
+ || (bounds.isEmpty() && (parentBounds == null || parentBounds.isEmpty()))) {
return;
}
int minWidth = mMinWidth;
@@ -1697,6 +1696,14 @@
minHeight = defaultMinSize;
}
}
+ if (bounds.isEmpty()) {
+ // If inheriting parent bounds, check if parent bounds adhere to minimum size. If they
+ // do, we can just skip.
+ if (parentBounds.width() >= minWidth && parentBounds.height() >= minHeight) {
+ return;
+ }
+ bounds.set(parentBounds);
+ }
final boolean adjustWidth = minWidth > bounds.width();
final boolean adjustHeight = minHeight > bounds.height();
if (!(adjustWidth || adjustHeight)) {
@@ -1948,10 +1955,19 @@
}
density *= DisplayMetrics.DENSITY_DEFAULT_SCALE;
- final Rect bounds = inOutConfig.windowConfiguration.getBounds();
+ final Rect resolvedBounds = inOutConfig.windowConfiguration.getBounds();
+ if (resolvedBounds == null) {
+ mTmpFullBounds.setEmpty();
+ } else {
+ mTmpFullBounds.set(resolvedBounds);
+ }
+ if (mTmpFullBounds.isEmpty()) {
+ mTmpFullBounds.set(parentConfig.windowConfiguration.getBounds());
+ }
+
Rect outAppBounds = inOutConfig.windowConfiguration.getAppBounds();
if (outAppBounds == null || outAppBounds.isEmpty()) {
- inOutConfig.windowConfiguration.setAppBounds(bounds);
+ inOutConfig.windowConfiguration.setAppBounds(mTmpFullBounds);
outAppBounds = inOutConfig.windowConfiguration.getAppBounds();
}
// Non-null compatibility insets means the activity prefers to keep its original size, so
@@ -1974,7 +1990,7 @@
// area, i.e. the screen area without the system bars.
// The non decor inset are areas that could never be removed in Honeycomb. See
// {@link WindowManagerPolicy#getNonDecorInsetsLw}.
- calculateInsetFrames(mTmpNonDecorBounds, mTmpStableBounds, bounds, di);
+ calculateInsetFrames(mTmpNonDecorBounds, mTmpStableBounds, mTmpFullBounds, di);
} else {
// Apply the given non-decor and stable insets to calculate the corresponding bounds
// for screen size of configuration.
@@ -1983,8 +1999,8 @@
rotation = parentConfig.windowConfiguration.getRotation();
}
if (rotation != ROTATION_UNDEFINED && compatInsets != null) {
- mTmpNonDecorBounds.set(bounds);
- mTmpStableBounds.set(bounds);
+ mTmpNonDecorBounds.set(mTmpFullBounds);
+ mTmpStableBounds.set(mTmpFullBounds);
compatInsets.getDisplayBoundsByRotation(mTmpBounds, rotation);
intersectWithInsetsIfFits(mTmpNonDecorBounds, mTmpBounds,
compatInsets.mNonDecorInsets[rotation]);
@@ -2016,13 +2032,13 @@
if (WindowConfiguration.isFloating(windowingMode)) {
// For floating tasks, calculate the smallest width from the bounds of the task
inOutConfig.smallestScreenWidthDp = (int) (
- Math.min(bounds.width(), bounds.height()) / density);
+ Math.min(mTmpFullBounds.width(), mTmpFullBounds.height()) / density);
} else if (WindowConfiguration.isSplitScreenWindowingMode(windowingMode)) {
// Iterating across all screen orientations, and return the minimum of the task
// width taking into account that the bounds might change because the snap
// algorithm snaps to a different value
inOutConfig.smallestScreenWidthDp =
- getSmallestScreenWidthDpForDockedBounds(bounds);
+ getSmallestScreenWidthDpForDockedBounds(mTmpFullBounds);
}
// otherwise, it will just inherit
}
@@ -2067,11 +2083,6 @@
newParentConfig.orientation);
}
- if (outOverrideBounds.isEmpty()) {
- // If the task fills the parent, just inherit all the other configs from parent.
- return;
- }
-
adjustForMinimalTaskDimensions(outOverrideBounds, mTmpBounds);
if (windowingMode == WINDOWING_MODE_FREEFORM) {
// by policy, make sure the window remains within parent somewhere
@@ -2118,7 +2129,7 @@
// Use the top activity as the reference of orientation. Don't include overlays because
// it is usually not the actual content or just temporarily shown.
// E.g. ForcedResizableInfoActivity.
- refActivity = getTopActivity(false /* includeOverlays */);
+ refActivity = getTopNonFinishingActivity(false /* includeOverlays */);
}
// If the task or the reference activity requires a different orientation (either by
@@ -2901,7 +2912,7 @@
info.stackId = getStackId();
info.taskId = mTaskId;
info.displayId = mStack == null ? Display.INVALID_DISPLAY : mStack.mDisplayId;
- info.isRunning = getTopActivity() != null;
+ info.isRunning = getTopNonFinishingActivity() != null;
info.baseIntent = new Intent(getBaseIntent());
info.baseActivity = mReuseActivitiesReport.base != null
? mReuseActivitiesReport.base.intent.getComponent()
diff --git a/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java b/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java
index d7bc072..8ad8972 100644
--- a/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java
+++ b/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java
@@ -284,7 +284,8 @@
&& outParams.mBounds.isEmpty()
&& source.getDisplayId() == display.mDisplayId) {
// Set bounds to be not very far from source activity.
- cascadeBounds(source.getBounds(), display, outParams.mBounds);
+ cascadeBounds(source.getConfiguration().windowConfiguration.getBounds(),
+ display, outParams.mBounds);
}
getTaskBounds(root, display, layout, resolvedMode, hasInitialBounds, outParams.mBounds);
}
diff --git a/services/core/java/com/android/server/wm/WindowFrames.java b/services/core/java/com/android/server/wm/WindowFrames.java
index 84fcfbd..bafa38c 100644
--- a/services/core/java/com/android/server/wm/WindowFrames.java
+++ b/services/core/java/com/android/server/wm/WindowFrames.java
@@ -106,6 +106,16 @@
*/
final Rect mLastFrame = new Rect();
+ /**
+ * mFrame but relative to the parent container.
+ */
+ final Rect mRelFrame = new Rect();
+
+ /**
+ * mLastFrame but relative to the parent container
+ */
+ final Rect mLastRelFrame = new Rect();
+
private boolean mFrameSizeChanged = false;
// Frame that is scaled to the application's coordinate space when in
diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java
index d63fbc21..41e88c8 100644
--- a/services/core/java/com/android/server/wm/WindowProcessController.java
+++ b/services/core/java/com/android/server/wm/WindowProcessController.java
@@ -554,7 +554,7 @@
if (task == null) {
continue;
}
- ActivityRecord topActivity = task.getTopActivity();
+ ActivityRecord topActivity = task.getTopNonFinishingActivity();
if (topActivity != null && topActivity.visible) {
return true;
}
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index f98e307..db0f3bc 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -212,7 +212,6 @@
import com.android.server.policy.WindowManagerPolicy;
import com.android.server.protolog.common.ProtoLog;
import com.android.server.wm.LocalAnimationAdapter.AnimationSpec;
-import com.android.server.wm.utils.InsetUtils;
import com.android.server.wm.utils.WmDisplayCutout;
import java.io.PrintWriter;
@@ -1129,6 +1128,22 @@
}
}
+ // Calculate relative frame
+ mWindowFrames.mRelFrame.set(mWindowFrames.mFrame);
+ WindowContainer parent = getParent();
+ int parentLeft = 0;
+ int parentTop = 0;
+ if (mIsChildWindow) {
+ parentLeft = ((WindowState) parent).mWindowFrames.mFrame.left;
+ parentTop = ((WindowState) parent).mWindowFrames.mFrame.top;
+ } else if (parent != null) {
+ final Rect parentBounds = parent.getDisplayedBounds();
+ parentLeft = parentBounds.left;
+ parentTop = parentBounds.top;
+ }
+ mWindowFrames.mRelFrame.offsetTo(mWindowFrames.mFrame.left - parentLeft,
+ mWindowFrames.mFrame.top - parentTop);
+
if (DEBUG_LAYOUT || DEBUG) {
Slog.v(TAG, "Resolving (mRequestedWidth="
+ mRequestedWidth + ", mRequestedheight="
@@ -1154,6 +1169,11 @@
return mWindowFrames.mFrame;
}
+ /** Accessor for testing */
+ Rect getRelativeFrameLw() {
+ return mWindowFrames.mRelFrame;
+ }
+
@Override
public Rect getDisplayFrameLw() {
return mWindowFrames.mDisplayFrame;
@@ -1289,6 +1309,7 @@
// We update mLastFrame always rather than in the conditional with the last inset
// variables, because mFrameSizeChanged only tracks the width and height changing.
mWindowFrames.mLastFrame.set(mWindowFrames.mFrame);
+ mWindowFrames.mLastRelFrame.set(mWindowFrames.mRelFrame);
if (didFrameInsetsChange
|| winAnimator.mSurfaceResized
@@ -1859,8 +1880,8 @@
private boolean hasMoved() {
return mHasSurface && (mWindowFrames.hasContentChanged() || mMovedByResize)
&& !mAnimatingExit
- && (mWindowFrames.mFrame.top != mWindowFrames.mLastFrame.top
- || mWindowFrames.mFrame.left != mWindowFrames.mLastFrame.left)
+ && (mWindowFrames.mRelFrame.top != mWindowFrames.mLastRelFrame.top
+ || mWindowFrames.mRelFrame.left != mWindowFrames.mLastRelFrame.left)
&& (!mIsChildWindow || !getParentWindow().hasMoved());
}
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 2a364e6..3043b6f 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -83,6 +83,7 @@
import com.android.server.appbinding.AppBindingService;
import com.android.server.attention.AttentionManagerService;
import com.android.server.audio.AudioService;
+import com.android.server.biometrics.AuthService;
import com.android.server.biometrics.BiometricService;
import com.android.server.biometrics.face.FaceService;
import com.android.server.biometrics.fingerprint.FingerprintService;
@@ -1775,8 +1776,13 @@
t.traceBegin("StartBiometricService");
mSystemServiceManager.startService(BiometricService.class);
t.traceEnd();
+
+ t.traceBegin("StartAuthService");
+ mSystemServiceManager.startService(AuthService.class);
+ t.traceEnd();
}
+
t.traceBegin("StartBackgroundDexOptService");
try {
BackgroundDexOptService.schedule(context);
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/AuthServiceTest.java b/services/tests/servicestests/src/com/android/server/biometrics/AuthServiceTest.java
new file mode 100644
index 0000000..106a723
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/biometrics/AuthServiceTest.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright (C) 2019 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.biometrics;
+
+import static android.hardware.biometrics.BiometricConstants.BIOMETRIC_SUCCESS;
+
+import static junit.framework.Assert.assertEquals;
+
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.hardware.biometrics.IBiometricEnabledOnKeyguardCallback;
+import android.hardware.biometrics.IBiometricService;
+import android.hardware.biometrics.IBiometricServiceReceiver;
+import android.os.Binder;
+import android.os.Bundle;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@SmallTest
+public class AuthServiceTest {
+
+ private static final String TAG = "AuthServiceTest";
+ private static final String TEST_OP_PACKAGE_NAME = "test_package";
+
+ private AuthService mAuthService;
+
+ @Mock
+ private Context mContext;
+ @Mock
+ private PackageManager mPackageManager;
+ @Mock
+ IBiometricServiceReceiver mReceiver;
+ @Mock
+ AuthService.Injector mInjector;
+ @Mock
+ IBiometricService mBiometricService;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ when(mContext.getPackageManager()).thenReturn(mPackageManager);
+ when(mInjector.getBiometricService()).thenReturn(mBiometricService);
+ when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT))
+ .thenReturn(true);
+ when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_IRIS)).thenReturn(true);
+ when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FACE)).thenReturn(true);
+ }
+
+
+ // TODO(b/141025588): Check that an exception is thrown when the userId != callingUserId
+ @Test
+ public void testAuthenticate_callsBiometricServiceAuthenticate() throws
+ Exception {
+ mAuthService = new AuthService(mContext, mInjector);
+ mAuthService.onStart();
+
+ final Binder token = new Binder();
+ final Bundle bundle = new Bundle();
+ final long sessionId = 0;
+ final int userId = 0;
+
+ mAuthService.mImpl.authenticate(
+ token,
+ sessionId,
+ userId,
+ mReceiver,
+ TEST_OP_PACKAGE_NAME,
+ bundle);
+ waitForIdle();
+ verify(mBiometricService).authenticate(
+ eq(token),
+ eq(sessionId),
+ eq(userId),
+ eq(mReceiver),
+ eq(TEST_OP_PACKAGE_NAME),
+ eq(bundle));
+ }
+
+ @Test
+ public void testCanAuthenticate_callsBiometricServiceCanAuthenticate() throws
+ Exception {
+ mAuthService = new AuthService(mContext, mInjector);
+ mAuthService.onStart();
+
+ final int userId = 0;
+ final int expectedResult = BIOMETRIC_SUCCESS;
+ when(mBiometricService.canAuthenticate(anyString(), anyInt())).thenReturn(expectedResult);
+
+ final int result = mAuthService.mImpl.canAuthenticate(TEST_OP_PACKAGE_NAME, userId);
+
+ assertEquals(expectedResult, result);
+ waitForIdle();
+ verify(mBiometricService).canAuthenticate(
+ eq(TEST_OP_PACKAGE_NAME),
+ eq(userId));
+ }
+
+
+ @Test
+ public void testHasEnrolledBiometrics_callsBiometricServiceHasEnrolledBiometrics() throws
+ Exception {
+ mAuthService = new AuthService(mContext, mInjector);
+ mAuthService.onStart();
+
+ final int userId = 0;
+ final boolean expectedResult = true;
+ when(mBiometricService.hasEnrolledBiometrics(anyInt(), anyString())).thenReturn(
+ expectedResult);
+
+ final boolean result = mAuthService.mImpl.hasEnrolledBiometrics(userId,
+ TEST_OP_PACKAGE_NAME);
+
+ assertEquals(expectedResult, result);
+ waitForIdle();
+ verify(mBiometricService).hasEnrolledBiometrics(
+ eq(userId),
+ eq(TEST_OP_PACKAGE_NAME));
+ }
+
+
+ @Test
+ public void testRegisterKeyguardCallback_callsBiometricServiceRegisterKeyguardCallback()
+ throws Exception {
+ mAuthService = new AuthService(mContext, mInjector);
+ mAuthService.onStart();
+
+ final IBiometricEnabledOnKeyguardCallback callback =
+ new IBiometricEnabledOnKeyguardCallback.Default();
+
+ mAuthService.mImpl.registerEnabledOnKeyguardCallback(callback);
+
+ waitForIdle();
+ verify(mBiometricService).registerEnabledOnKeyguardCallback(eq(callback));
+ }
+
+ @Test
+ public void testSetActiveUser_callsBiometricServiceSetActiveUser() throws
+ Exception {
+ mAuthService = new AuthService(mContext, mInjector);
+ mAuthService.onStart();
+
+ final int userId = 0;
+
+ mAuthService.mImpl.setActiveUser(userId);
+
+ waitForIdle();
+ verify(mBiometricService).setActiveUser(eq(userId));
+ }
+
+ @Test
+ public void testResetLockout_callsBiometricServiceResetLockout() throws
+ Exception {
+ mAuthService = new AuthService(mContext, mInjector);
+ mAuthService.onStart();
+
+ final byte[] token = new byte[0];
+
+ mAuthService.mImpl.resetLockout(token);
+
+ waitForIdle();
+ verify(mBiometricService).resetLockout(token);
+ }
+
+ private static void waitForIdle() {
+ InstrumentationRegistry.getInstrumentation().waitForIdleSync();
+ }
+}
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/BiometricServiceTest.java b/services/tests/servicestests/src/com/android/server/biometrics/BiometricServiceTest.java
index ec47a95..4ced421 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/BiometricServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/BiometricServiceTest.java
@@ -36,7 +36,6 @@
import android.app.IActivityManager;
import android.content.ContentResolver;
import android.content.Context;
-import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.hardware.biometrics.Authenticator;
import android.hardware.biometrics.BiometricAuthenticator;
@@ -82,6 +81,8 @@
private static final String FINGERPRINT_ACQUIRED_SENSOR_DIRTY = "sensor_dirty";
+ private static final int STRENGTH_STRONG = 1;
+
private BiometricService mBiometricService;
@Mock
@@ -91,8 +92,6 @@
@Mock
private Resources mResources;
@Mock
- private PackageManager mPackageManager;
- @Mock
IBiometricServiceReceiver mReceiver1;
@Mock
IBiometricServiceReceiver mReceiver2;
@@ -107,14 +106,11 @@
public void setUp() {
MockitoAnnotations.initMocks(this);
- when(mContext.getPackageManager()).thenReturn(mPackageManager);
when(mContext.getContentResolver()).thenReturn(mContentResolver);
when(mContext.getResources()).thenReturn(mResources);
when(mInjector.getActivityManagerService()).thenReturn(mock(IActivityManager.class));
when(mInjector.getStatusBarService()).thenReturn(mock(IStatusBarService.class));
- when(mInjector.getFingerprintAuthenticator()).thenReturn(mFingerprintAuthenticator);
- when(mInjector.getFaceAuthenticator()).thenReturn(mFaceAuthenticator);
when(mInjector.getSettingObserver(any(), any(), any())).thenReturn(
mock(BiometricService.SettingObserver.class));
when(mInjector.getKeyStore()).thenReturn(mock(KeyStore.class));
@@ -131,11 +127,6 @@
@Test
public void testAuthenticate_withoutHardware_returnsErrorHardwareNotPresent() throws
Exception {
- when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT))
- .thenReturn(false);
- when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_IRIS)).thenReturn(false);
- when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FACE)).thenReturn(false);
-
mBiometricService = new BiometricService(mContext, mInjector);
mBiometricService.onStart();
@@ -150,11 +141,13 @@
@Test
public void testAuthenticate_withoutEnrolled_returnsErrorNoBiometrics() throws Exception {
- when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)).thenReturn(true);
when(mFingerprintAuthenticator.isHardwareDetected(any())).thenReturn(true);
mBiometricService = new BiometricService(mContext, mInjector);
mBiometricService.onStart();
+ mBiometricService.mImpl.registerAuthenticator(0 /* id */, STRENGTH_STRONG,
+ BiometricAuthenticator.TYPE_FINGERPRINT, mFingerprintAuthenticator);
+
invokeAuthenticate(mBiometricService.mImpl, mReceiver1, false /* requireConfirmation */,
false /* allowDeviceCredential */);
@@ -168,12 +161,13 @@
@Test
public void testAuthenticate_whenHalIsDead_returnsErrorHardwareUnavailable() throws
Exception {
- when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)).thenReturn(true);
when(mFingerprintAuthenticator.hasEnrolledTemplates(anyInt(), any())).thenReturn(true);
when(mFingerprintAuthenticator.isHardwareDetected(any())).thenReturn(false);
mBiometricService = new BiometricService(mContext, mInjector);
mBiometricService.onStart();
+ mBiometricService.mImpl.registerAuthenticator(0 /* id */, STRENGTH_STRONG,
+ BiometricAuthenticator.TYPE_FINGERPRINT, mFingerprintAuthenticator);
invokeAuthenticate(mBiometricService.mImpl, mReceiver1, false /* requireConfirmation */,
false /* allowDeviceCredential */);
@@ -187,12 +181,13 @@
@Test
public void testAuthenticateFace_respectsUserSetting()
throws Exception {
- when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FACE)).thenReturn(true);
when(mFaceAuthenticator.hasEnrolledTemplates(anyInt(), any())).thenReturn(true);
when(mFaceAuthenticator.isHardwareDetected(any())).thenReturn(true);
mBiometricService = new BiometricService(mContext, mInjector);
mBiometricService.onStart();
+ mBiometricService.mImpl.registerAuthenticator(0 /* id */, STRENGTH_STRONG,
+ BiometricAuthenticator.TYPE_FACE, mFaceAuthenticator);
// Disabled in user settings receives onError
when(mBiometricService.mSettingObserver.getFaceEnabledForApps(anyInt())).thenReturn(false);
@@ -248,8 +243,6 @@
@Test
public void testAuthenticate_happyPathWithoutConfirmation() throws Exception {
setupAuthForOnly(BiometricAuthenticator.TYPE_FINGERPRINT);
- mBiometricService = new BiometricService(mContext, mInjector);
- mBiometricService.onStart();
// Start testing the happy path
invokeAuthenticate(mBiometricService.mImpl, mReceiver1, false /* requireConfirmation */,
@@ -861,27 +854,24 @@
// Helper methods
private void setupAuthForOnly(int modality) throws RemoteException {
- when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT))
- .thenReturn(false);
- when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FACE)).thenReturn(false);
-
- if (modality == BiometricAuthenticator.TYPE_FINGERPRINT) {
- when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT))
- .thenReturn(true);
- when(mFingerprintAuthenticator.hasEnrolledTemplates(anyInt(), any())).thenReturn(true);
- when(mFingerprintAuthenticator.isHardwareDetected(any())).thenReturn(true);
- } else if (modality == BiometricAuthenticator.TYPE_FACE) {
- when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FACE)).thenReturn(true);
- when(mFaceAuthenticator.hasEnrolledTemplates(anyInt(), any())).thenReturn(true);
- when(mFaceAuthenticator.isHardwareDetected(any())).thenReturn(true);
- } else {
- fail("Unknown modality: " + modality);
- }
-
mBiometricService = new BiometricService(mContext, mInjector);
mBiometricService.onStart();
when(mBiometricService.mSettingObserver.getFaceEnabledForApps(anyInt())).thenReturn(true);
+
+ if (modality == BiometricAuthenticator.TYPE_FINGERPRINT) {
+ when(mFingerprintAuthenticator.hasEnrolledTemplates(anyInt(), any())).thenReturn(true);
+ when(mFingerprintAuthenticator.isHardwareDetected(any())).thenReturn(true);
+ mBiometricService.mImpl.registerAuthenticator(0 /* id */, STRENGTH_STRONG, modality,
+ mFingerprintAuthenticator);
+ } else if (modality == BiometricAuthenticator.TYPE_FACE) {
+ when(mFaceAuthenticator.hasEnrolledTemplates(anyInt(), any())).thenReturn(true);
+ when(mFaceAuthenticator.isHardwareDetected(any())).thenReturn(true);
+ mBiometricService.mImpl.registerAuthenticator(0 /* id */, STRENGTH_STRONG, modality,
+ mFaceAuthenticator);
+ } else {
+ fail("Unknown modality: " + modality);
+ }
}
private void resetReceiver() {
diff --git a/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java b/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java
index 7081d2e..1d04c83 100644
--- a/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java
@@ -37,6 +37,7 @@
import android.hardware.SensorEventListener;
import android.hardware.display.AmbientBrightnessDayStats;
import android.hardware.display.BrightnessChangeEvent;
+import android.hardware.display.BrightnessConfiguration;
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayedContentSample;
import android.hardware.display.DisplayedContentSamplingAttributes;
@@ -78,6 +79,7 @@
@RunWith(AndroidJUnit4.class)
public class BrightnessTrackerTest {
private static final float DEFAULT_INITIAL_BRIGHTNESS = 2.5f;
+ private static final boolean DEFAULT_COLOR_SAMPLING_ENABLED = true;
private static final float FLOAT_DELTA = 0.01f;
private BrightnessTracker mTracker;
@@ -151,6 +153,40 @@
}
@Test
+ public void testModifyBrightnessConfiguration() {
+ mInjector.mInteractive = true;
+ // Start with tracker not listening for color samples.
+ startTracker(mTracker, DEFAULT_INITIAL_BRIGHTNESS, /* collectColorSamples= */ false);
+ assertFalse(mInjector.mColorSamplingEnabled);
+
+ // Update brightness config to enabled color sampling.
+ mTracker.setBrightnessConfiguration(buildBrightnessConfiguration(
+ /* collectColorSamples= */ true));
+ mInjector.waitForHandler();
+ assertTrue(mInjector.mColorSamplingEnabled);
+
+ // Update brightness config to disable color sampling.
+ mTracker.setBrightnessConfiguration(buildBrightnessConfiguration(
+ /* collectColorSamples= */ false));
+ mInjector.waitForHandler();
+ assertFalse(mInjector.mColorSamplingEnabled);
+
+ // Pretend screen is off, update config to turn on color sampling.
+ mInjector.sendScreenChange(/*screen on */ false);
+ mTracker.setBrightnessConfiguration(buildBrightnessConfiguration(
+ /* collectColorSamples= */ true));
+ mInjector.waitForHandler();
+ assertFalse(mInjector.mColorSamplingEnabled);
+
+ // Pretend screen is on.
+ mInjector.sendScreenChange(/*screen on */ true);
+ assertTrue(mInjector.mColorSamplingEnabled);
+
+ mTracker.stop();
+ assertFalse(mInjector.mColorSamplingEnabled);
+ }
+
+ @Test
public void testNoColorSampling_WrongPixelFormat() {
mInjector.mDefaultSamplingAttributes =
new DisplayedContentSamplingAttributes(
@@ -278,7 +314,7 @@
mInjector.mSecureIntSettings.put(Settings.Secure.NIGHT_DISPLAY_ACTIVATED, 1);
mInjector.mSecureIntSettings.put(Settings.Secure.NIGHT_DISPLAY_COLOR_TEMPERATURE, 3333);
- startTracker(mTracker, initialBrightness);
+ startTracker(mTracker, initialBrightness, DEFAULT_COLOR_SAMPLING_ENABLED);
mInjector.mBroadcastReceiver.onReceive(InstrumentationRegistry.getContext(),
batteryChangeEvent(30, 60));
mInjector.mSensorListener.onSensorChanged(createSensorEvent(1000.0f));
@@ -311,7 +347,7 @@
@Test
public void testIgnoreAutomaticBrightnessChange() {
final int initialBrightness = 30;
- startTracker(mTracker, initialBrightness);
+ startTracker(mTracker, initialBrightness, DEFAULT_COLOR_SAMPLING_ENABLED);
mInjector.mSensorListener.onSensorChanged(createSensorEvent(1.0f));
mInjector.incrementTime(TimeUnit.SECONDS.toMillis(1));
@@ -750,11 +786,13 @@
}
private void startTracker(BrightnessTracker tracker) {
- startTracker(tracker, DEFAULT_INITIAL_BRIGHTNESS);
+ startTracker(tracker, DEFAULT_INITIAL_BRIGHTNESS, DEFAULT_COLOR_SAMPLING_ENABLED);
}
- private void startTracker(BrightnessTracker tracker, float initialBrightness) {
+ private void startTracker(BrightnessTracker tracker, float initialBrightness,
+ boolean collectColorSamples) {
tracker.start(initialBrightness);
+ tracker.setBrightnessConfiguration(buildBrightnessConfiguration(collectColorSamples));
mInjector.waitForHandler();
}
@@ -772,6 +810,14 @@
mInjector.waitForHandler();
}
+ private BrightnessConfiguration buildBrightnessConfiguration(boolean collectColorSamples) {
+ BrightnessConfiguration.Builder builder = new BrightnessConfiguration.Builder(
+ /* lux = */ new float[] {0f, 10f, 100f},
+ /* nits = */ new float[] {1f, 90f, 100f});
+ builder.setShouldCollectColorSamples(collectColorSamples);
+ return builder.build();
+ }
+
private static final class Idle implements MessageQueue.IdleHandler {
private boolean mIdle;
diff --git a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
index 592f4ec..0ca62e2 100644
--- a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
@@ -668,11 +668,11 @@
startSystem();
verify(mInattentiveSleepWarningControllerMock, times(1)).show();
- verify(mInattentiveSleepWarningControllerMock, never()).dismiss();
+ verify(mInattentiveSleepWarningControllerMock, never()).dismiss(anyBoolean());
when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true);
setPluggedIn(true);
- verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).dismiss();
+ verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).dismiss(true);
}
@Test
@@ -690,12 +690,12 @@
SystemClock.sleep(70);
verify(mInattentiveSleepWarningControllerMock, times(1)).show();
- verify(mInattentiveSleepWarningControllerMock, never()).dismiss();
+ verify(mInattentiveSleepWarningControllerMock, never()).dismiss(anyBoolean());
when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true);
mService.getBinderServiceInstance().userActivity(SystemClock.uptimeMillis(),
PowerManager.USER_ACTIVITY_EVENT_TOUCH, 0);
- verify(mInattentiveSleepWarningControllerMock, times(1)).dismiss();
+ verify(mInattentiveSleepWarningControllerMock, times(1)).dismiss(true);
}
@Test
@@ -711,7 +711,7 @@
when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true);
SystemClock.sleep(30);
forceAwake();
- verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).dismiss();
+ verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).dismiss(false);
}
@Test
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityDisplayTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityDisplayTests.java
index 9df7b45..24db657 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityDisplayTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityDisplayTests.java
@@ -38,12 +38,7 @@
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.when;
-import android.app.TaskStackListener;
-import android.content.pm.ActivityInfo;
-import android.content.res.Configuration;
-import android.os.IBinder;
import android.platform.test.annotations.Presubmit;
import androidx.test.filters.SmallTest;
@@ -51,10 +46,6 @@
import org.junit.Test;
import org.junit.runner.RunWith;
-import java.util.ArrayList;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.TimeUnit;
-
/**
* Tests for the {@link ActivityDisplay} class.
*
@@ -181,7 +172,7 @@
final ActivityDisplay display = mRootActivityContainer.getDefaultDisplay();
final KeyguardController keyguard = mSupervisor.getKeyguardController();
final ActivityStack stack = new StackBuilder(mRootActivityContainer).build();
- final ActivityRecord activity = stack.getTopActivity();
+ final ActivityRecord activity = stack.getTopNonFinishingActivity();
// Create empty stack on top.
final ActivityStack emptyStack =
@@ -237,7 +228,7 @@
display.positionChildAtTop(alwaysOnTopStack, false /* includingParents */);
assertTrue(alwaysOnTopStack.isAlwaysOnTop());
// Ensure always on top state is synced to the children of the stack.
- assertTrue(alwaysOnTopStack.getTopActivity().isAlwaysOnTop());
+ assertTrue(alwaysOnTopStack.getTopNonFinishingActivity().isAlwaysOnTop());
assertEquals(alwaysOnTopStack, display.getTopStack());
final ActivityStack pinnedStack = display.createStack(
@@ -331,50 +322,4 @@
verify(mSupervisor).removeTaskByIdLocked(eq(task1.mTaskId), anyBoolean(), anyBoolean(),
any());
}
-
- /**
- * Ensures that {@link TaskStackListener} can receive callback about the activity in size
- * compatibility mode.
- */
- @Test
- public void testHandleActivitySizeCompatMode() throws Exception {
- final ActivityDisplay display = mRootActivityContainer.getDefaultDisplay();
- final ActivityRecord activity = createFullscreenStackWithSimpleActivityAt(
- display).topRunningActivityLocked();
- activity.setState(ActivityStack.ActivityState.RESUMED, "testHandleActivitySizeCompatMode");
- when(activity.getRequestedOrientation()).thenReturn(
- ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
- activity.info.resizeMode = ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
- activity.info.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
- activity.visible = true;
- activity.ensureActivityConfiguration(0 /* globalChanges */, false /* preserveWindow */);
-
- final ArrayList<CompletableFuture<IBinder>> resultWrapper = new ArrayList<>();
- mService.getTaskChangeNotificationController().registerTaskStackListener(
- new TaskStackListener() {
- @Override
- public void onSizeCompatModeActivityChanged(int displayId,
- IBinder activityToken) {
- resultWrapper.get(0).complete(activityToken);
- }
- });
-
- resultWrapper.add(new CompletableFuture<>());
-
- // resize the display to exercise size-compat mode
- final DisplayContent displayContent = display.mDisplayContent;
- displayContent.mBaseDisplayHeight = (int) (0.8f * displayContent.mBaseDisplayHeight);
- Configuration c = new Configuration();
- displayContent.computeScreenConfiguration(c);
- display.onRequestedOverrideConfigurationChanged(c);
-
- assertEquals(activity.appToken, resultWrapper.get(0).get(2, TimeUnit.SECONDS));
-
- // Expect null token when switching to non-size-compat mode activity.
- activity.info.resizeMode = ActivityInfo.RESIZE_MODE_RESIZEABLE;
- resultWrapper.set(0, new CompletableFuture<>());
- display.handleActivitySizeCompatModeIfNeeded(activity);
-
- assertNull(resultWrapper.get(0).get(2, TimeUnit.SECONDS));
- }
}
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 c51a46a..6c63d41 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
@@ -18,24 +18,18 @@
import static android.content.pm.ActivityInfo.CONFIG_ORIENTATION;
import static android.content.pm.ActivityInfo.CONFIG_SCREEN_LAYOUT;
-import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
import static android.os.Process.NOBODY_UID;
import static android.view.Display.DEFAULT_DISPLAY;
-import static android.view.Surface.ROTATION_0;
-import static android.view.Surface.ROTATION_90;
import static android.view.WindowManager.TRANSIT_TASK_CLOSE;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.any;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.anyInt;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.atLeast;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.eq;
-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.spyOn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.times;
@@ -61,18 +55,13 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.when;
-import android.app.ActivityManager;
-import android.app.ActivityManagerInternal;
import android.app.ActivityOptions;
-import android.app.WindowConfiguration;
import android.app.servertransaction.ActivityConfigurationChangeItem;
import android.app.servertransaction.ClientTransaction;
import android.app.servertransaction.PauseActivityItem;
@@ -80,13 +69,11 @@
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
-import android.graphics.Rect;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.platform.test.annotations.Presubmit;
import android.util.MergedConfiguration;
import android.util.MutableBoolean;
-import android.view.DisplayInfo;
import android.view.IRemoteAnimationFinishedCallback;
import android.view.IRemoteAnimationRunner.Stub;
import android.view.RemoteAnimationAdapter;
@@ -120,7 +107,7 @@
public void setUp() throws Exception {
mStack = new StackBuilder(mRootActivityContainer).build();
mTask = mStack.getChildAt(0);
- mActivity = mTask.getTopActivity();
+ mActivity = mTask.getTopNonFinishingActivity();
doReturn(false).when(mService).isBooting();
doReturn(true).when(mService).isBooted();
@@ -219,23 +206,6 @@
}
@Test
- public void testRestartProcessIfVisible() {
- doNothing().when(mSupervisor).scheduleRestartTimeout(mActivity);
- mActivity.visible = true;
- mActivity.setSavedState(null /* savedState */);
- mActivity.setState(ActivityStack.ActivityState.RESUMED, "testRestart");
- prepareFixedAspectRatioUnresizableActivity();
-
- final Rect originalOverrideBounds = new Rect(mActivity.getBounds());
- setupDisplayAndParentSize(600, 1200);
- // The visible activity should recompute configuration according to the last parent bounds.
- mService.restartActivityProcessIfVisible(mActivity.appToken);
-
- assertEquals(ActivityStack.ActivityState.RESTARTING_PROCESS, mActivity.getState());
- assertNotEquals(originalOverrideBounds, mActivity.getBounds());
- }
-
- @Test
public void testsApplyOptionsLocked() {
ActivityOptions activityOptions = ActivityOptions.makeBasic();
@@ -484,214 +454,6 @@
}
@Test
- public void testSizeCompatMode_KeepBoundsWhenChangingFromFreeformToFullscreen() {
- setupDisplayContentForCompatDisplayInsets();
-
- // put display in freeform mode
- ActivityDisplay display = mActivity.getDisplay();
- final Configuration c = new Configuration(display.getRequestedOverrideConfiguration());
- c.windowConfiguration.setBounds(new Rect(0, 0, 2000, 1000));
- c.densityDpi = 300;
- c.windowConfiguration.setWindowingMode(WindowConfiguration.WINDOWING_MODE_FREEFORM);
- display.onRequestedOverrideConfigurationChanged(c);
-
- // launch compat activity in freeform and store bounds
- when(mActivity.getRequestedOrientation()).thenReturn(
- ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
- mTask.getRequestedOverrideConfiguration().orientation = Configuration.ORIENTATION_PORTRAIT;
- mTask.setBounds(100, 100, 400, 600);
- mActivity.info.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
- mActivity.info.resizeMode = ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
- mActivity.visible = true;
- ensureActivityConfiguration();
-
- final Rect bounds = new Rect(mActivity.getBounds());
- final int density = mActivity.getConfiguration().densityDpi;
-
- // change display configuration to fullscreen
- c.windowConfiguration.setWindowingMode(WindowConfiguration.WINDOWING_MODE_FULLSCREEN);
- display.onRequestedOverrideConfigurationChanged(c);
-
- // check if dimensions stay the same
- assertTrue(mActivity.inSizeCompatMode());
- assertEquals(bounds.width(), mActivity.getBounds().width());
- assertEquals(bounds.height(), mActivity.getBounds().height());
- assertEquals(density, mActivity.getConfiguration().densityDpi);
- assertEquals(WindowConfiguration.WINDOWING_MODE_FULLSCREEN, mActivity.getWindowingMode());
- }
-
- @Test
- public void testSizeCompatMode_FixedAspectRatioBoundsWithDecor() {
- setupDisplayContentForCompatDisplayInsets();
- final int decorHeight = 200; // e.g. The device has cutout.
- final DisplayPolicy policy = setupDisplayAndParentSize(600, 800).getDisplayPolicy();
- spyOn(policy);
- doAnswer(invocationOnMock -> {
- final int rotation = invocationOnMock.<Integer>getArgument(0);
- final Rect insets = invocationOnMock.<Rect>getArgument(4);
- if (rotation == ROTATION_0) {
- insets.top = decorHeight;
- } else if (rotation == ROTATION_90) {
- insets.left = decorHeight;
- }
- return null;
- }).when(policy).getNonDecorInsetsLw(anyInt() /* rotation */, anyInt() /* width */,
- anyInt() /* height */, any() /* displayCutout */, any() /* outInsets */);
- // set appBounds to incorporate decor
- final Configuration c =
- new Configuration(mStack.getDisplay().getRequestedOverrideConfiguration());
- c.windowConfiguration.getAppBounds().top = decorHeight;
- mStack.getDisplay().onRequestedOverrideConfigurationChanged(c);
-
- doReturn(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
- .when(mActivity).getRequestedOrientation();
- mActivity.info.resizeMode = RESIZE_MODE_UNRESIZEABLE;
- mActivity.info.minAspectRatio = mActivity.info.maxAspectRatio = 1;
- mActivity.visible = true;
- ensureActivityConfiguration();
- // The parent configuration doesn't change since the first resolved configuration, so the
- // activity shouldn't be in the size compatibility mode.
- assertFalse(mActivity.inSizeCompatMode());
-
- final Rect appBounds = mActivity.getWindowConfiguration().getAppBounds();
- // Ensure the app bounds keep the declared aspect ratio.
- assertEquals(appBounds.width(), appBounds.height());
- // The decor height should be a part of the effective bounds.
- assertEquals(mActivity.getBounds().height(), appBounds.height() + decorHeight);
-
- mTask.getConfiguration().windowConfiguration.setRotation(ROTATION_90);
- mActivity.onConfigurationChanged(mTask.getConfiguration());
- // After changing orientation, the aspect ratio should be the same.
- assertEquals(appBounds.width(), appBounds.height());
- // The decor height will be included in width.
- assertEquals(mActivity.getBounds().width(), appBounds.width() + decorHeight);
- }
-
- @Test
- public void testSizeCompatMode_FixedScreenConfigurationWhenMovingToDisplay() {
- // Initialize different bounds on a new display.
- final Rect newDisplayBounds = new Rect(0, 0, 1000, 2000);
- DisplayInfo info = new DisplayInfo();
- mService.mContext.getDisplay().getDisplayInfo(info);
- info.logicalWidth = newDisplayBounds.width();
- info.logicalHeight = newDisplayBounds.height();
- info.logicalDensityDpi = 300;
-
- final ActivityDisplay newDisplay =
- addNewActivityDisplayAt(info, ActivityDisplay.POSITION_TOP);
-
- final Configuration c =
- new Configuration(mStack.getDisplay().getRequestedOverrideConfiguration());
- c.densityDpi = 200;
- mStack.getDisplay().onRequestedOverrideConfigurationChanged(c);
- mActivity = new ActivityBuilder(mService)
- .setTask(mTask)
- .setResizeMode(RESIZE_MODE_UNRESIZEABLE)
- .setMaxAspectRatio(1.5f)
- .build();
- mActivity.visible = true;
-
- final Rect originalBounds = new Rect(mActivity.getBounds());
- final int originalDpi = mActivity.getConfiguration().densityDpi;
-
- // Move the non-resizable activity to the new display.
- mStack.reparent(newDisplay.mDisplayContent, true /* onTop */);
-
- assertEquals(originalBounds.width(),
- mActivity.getWindowConfiguration().getBounds().width());
- assertEquals(originalBounds.height(),
- mActivity.getWindowConfiguration().getBounds().height());
- assertEquals(originalDpi, mActivity.getConfiguration().densityDpi);
- assertTrue(mActivity.inSizeCompatMode());
- }
-
- @Test
- public void testSizeCompatMode_FixedScreenBoundsWhenDisplaySizeChanged() {
- setupDisplayContentForCompatDisplayInsets();
- when(mActivity.getRequestedOrientation()).thenReturn(
- ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
- mTask.getWindowConfiguration().setAppBounds(mStack.getDisplay().getBounds());
- mTask.getRequestedOverrideConfiguration().orientation = Configuration.ORIENTATION_PORTRAIT;
- mActivity.info.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
- mActivity.info.resizeMode = ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
- mActivity.visible = true;
-
- ensureActivityConfiguration();
- final Rect originalBounds = new Rect(mActivity.getBounds());
-
- // Change the size of current display.
- setupDisplayAndParentSize(1000, 2000);
- ensureActivityConfiguration();
-
- assertEquals(originalBounds.width(),
- mActivity.getWindowConfiguration().getBounds().width());
- assertEquals(originalBounds.height(),
- mActivity.getWindowConfiguration().getBounds().height());
- assertTrue(mActivity.inSizeCompatMode());
- }
-
- @Test
- public void testSizeCompatMode_FixedScreenLayoutSizeBits() {
- final int fixedScreenLayout = Configuration.SCREENLAYOUT_LONG_NO
- | Configuration.SCREENLAYOUT_SIZE_NORMAL;
- final int layoutMask = Configuration.SCREENLAYOUT_LONG_MASK
- | Configuration.SCREENLAYOUT_SIZE_MASK
- | Configuration.SCREENLAYOUT_LAYOUTDIR_MASK;
- mTask.getRequestedOverrideConfiguration().screenLayout = fixedScreenLayout
- | Configuration.SCREENLAYOUT_LAYOUTDIR_LTR;
- prepareFixedAspectRatioUnresizableActivity();
-
- // The initial configuration should inherit from parent.
- assertEquals(mTask.getConfiguration().screenLayout & layoutMask,
- mActivity.getConfiguration().screenLayout & layoutMask);
-
- mTask.getConfiguration().screenLayout = Configuration.SCREENLAYOUT_LAYOUTDIR_RTL
- | Configuration.SCREENLAYOUT_LONG_YES | Configuration.SCREENLAYOUT_SIZE_LARGE;
- mActivity.onConfigurationChanged(mTask.getConfiguration());
-
- // The size and aspect ratio bits don't change, but the layout direction should be updated.
- assertEquals(fixedScreenLayout | Configuration.SCREENLAYOUT_LAYOUTDIR_RTL,
- mActivity.getConfiguration().screenLayout & layoutMask);
- }
-
- @Test
- public void testSizeCompatMode_ResetNonVisibleActivity() {
- final ActivityDisplay display = mStack.getDisplay();
- spyOn(display);
-
- prepareFixedAspectRatioUnresizableActivity();
- mActivity.setState(STOPPED, "testSizeCompatMode");
- mActivity.visible = false;
- mActivity.app.setReportedProcState(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY);
- // Make the parent bounds to be different so the activity is in size compatibility mode.
- setupDisplayAndParentSize(600, 1200);
-
- // Simulate the display changes orientation.
- doReturn(ActivityInfo.CONFIG_SCREEN_SIZE | CONFIG_ORIENTATION
- | ActivityInfo.CONFIG_WINDOW_CONFIGURATION)
- .when(display).getLastOverrideConfigurationChanges();
- mActivity.onConfigurationChanged(mTask.getConfiguration());
- when(display.getLastOverrideConfigurationChanges()).thenCallRealMethod();
- // The override configuration should not change so it is still in size compatibility mode.
- assertTrue(mActivity.inSizeCompatMode());
-
- // Change display density
- final DisplayContent displayContent = mStack.getDisplay().mDisplayContent;
- displayContent.mBaseDisplayDensity = (int) (0.7f * displayContent.mBaseDisplayDensity);
- final Configuration c = new Configuration();
- displayContent.computeScreenConfiguration(c);
- mService.mAmInternal = mock(ActivityManagerInternal.class);
- mStack.getDisplay().onRequestedOverrideConfigurationChanged(c);
-
- // The override configuration should be reset and the activity's process will be killed.
- assertFalse(mActivity.inSizeCompatMode());
- verify(mActivity).restartProcessIfVisible();
- waitHandlerIdle(mService.mH);
- verify(mService.mAmInternal).killProcess(
- eq(mActivity.app.mName), eq(mActivity.app.mUid), anyString());
- }
-
- @Test
public void testTakeOptions() {
ActivityOptions opts = ActivityOptions.makeRemoteAnimation(
new RemoteAnimationAdapter(new Stub() {
@@ -1015,7 +777,7 @@
// Simulates that {@code currentTop} starts an existing activity from background (so its
// state is stopped) and the starting flow just goes to place it at top.
final ActivityStack nextStack = new StackBuilder(mRootActivityContainer).build();
- final ActivityRecord nextTop = nextStack.getTopActivity();
+ final ActivityRecord nextTop = nextStack.getTopNonFinishingActivity();
nextTop.setState(STOPPED, "test");
mStack.mPausingActivity = currentTop;
@@ -1340,33 +1102,4 @@
verify(mActivity).removeFromHistory(anyString());
}
-
- /** Setup {@link #mActivity} as a size-compat-mode-able activity without fixed orientation. */
- private void prepareFixedAspectRatioUnresizableActivity() {
- setupDisplayContentForCompatDisplayInsets();
- mActivity.info.resizeMode = RESIZE_MODE_UNRESIZEABLE;
- mActivity.info.maxAspectRatio = 1.5f;
- mActivity.visible = true;
- ensureActivityConfiguration();
- }
-
- private void setupDisplayContentForCompatDisplayInsets() {
- final Rect displayBounds = mStack.getDisplay().getBounds();
- setupDisplayAndParentSize(displayBounds.width(), displayBounds.height());
- }
-
- private DisplayContent setupDisplayAndParentSize(int width, int height) {
- final DisplayContent displayContent = mStack.getDisplay().mDisplayContent;
- displayContent.mBaseDisplayWidth = width;
- displayContent.mBaseDisplayHeight = height;
- final Configuration c =
- new Configuration(mStack.getDisplay().getRequestedOverrideConfiguration());
- c.windowConfiguration.setBounds(new Rect(0, 0, width, height));
- c.windowConfiguration.setAppBounds(0, 0, width, height);
- c.windowConfiguration.setRotation(ROTATION_0);
- c.orientation = width > height
- ? Configuration.ORIENTATION_LANDSCAPE : Configuration.ORIENTATION_PORTRAIT;
- mStack.getDisplay().onRequestedOverrideConfigurationChanged(c);
- return displayContent;
- }
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStackSupervisorTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStackSupervisorTests.java
index 128ed2a..0219539 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStackSupervisorTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStackSupervisorTests.java
@@ -115,7 +115,7 @@
final ActivityDisplay newDisplay = addNewActivityDisplayAt(ActivityDisplay.POSITION_TOP);
final ActivityStack stack = new StackBuilder(mRootActivityContainer)
.setDisplay(newDisplay).build();
- final ActivityRecord unresizableActivity = stack.getTopActivity();
+ final ActivityRecord unresizableActivity = stack.getTopNonFinishingActivity();
final Task task = unresizableActivity.getTask();
unresizableActivity.info.resizeMode = ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
task.setResizeMode(unresizableActivity.info.resizeMode);
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java
index d0e07b6..aa9dd9d 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java
@@ -243,8 +243,8 @@
new RootActivityContainer.FindTaskResult();
mStack.findTaskLocked(r, result);
- assertEquals(r, task.getTopActivity(false /* includeOverlays */));
- assertEquals(taskOverlay, task.getTopActivity(true /* includeOverlays */));
+ assertEquals(r, task.getTopNonFinishingActivity(false /* includeOverlays */));
+ assertEquals(taskOverlay, task.getTopNonFinishingActivity(true /* includeOverlays */));
assertNotNull(result.mRecord);
}
@@ -1006,7 +1006,7 @@
// There is still an activity1 in stack1 so the activity2 should be added to finishing list
// that will be destroyed until idle.
- stack2.getTopActivity().visible = true;
+ stack2.getTopNonFinishingActivity().visible = true;
final ActivityRecord activity2 = finishTopActivity(stack2);
assertEquals(STOPPING, activity2.getState());
assertThat(mSupervisor.mStoppingActivities).contains(activity2);
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 a23e2f1..e9546a2 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java
@@ -55,7 +55,7 @@
@Test
public void testActivityFinish() {
final ActivityStack stack = new StackBuilder(mRootActivityContainer).build();
- final ActivityRecord activity = stack.getChildAt(0).getTopActivity();
+ final ActivityRecord activity = stack.getChildAt(0).getTopNonFinishingActivity();
assertTrue("Activity must be finished", mService.finishActivity(activity.appToken,
0 /* resultCode */, null /* resultData */,
Activity.DONT_FINISH_TASK_WITH_ACTIVITY));
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
index 9f4143f..571f214 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
@@ -711,18 +711,14 @@
final ActivityStack stack =
new ActivityTestsBase.StackBuilder(mWm.mAtmService.mRootActivityContainer)
.setDisplay(dc.mActivityDisplay).build();
- final ActivityRecord activity = stack.topTask().getTopActivity();
+ final ActivityRecord activity = stack.topTask().getTopNonFinishingActivity();
activity.setRequestedOrientation(newOrientation);
- final ArgumentCaptor<Configuration> captor = ArgumentCaptor.forClass(Configuration.class);
- verify(dc.mActivityDisplay).updateDisplayOverrideConfigurationLocked(captor.capture(),
- same(activity), anyBoolean(), same(null));
- final Configuration newDisplayConfig = captor.getValue();
final int expectedOrientation = newOrientation == SCREEN_ORIENTATION_PORTRAIT
? Configuration.ORIENTATION_PORTRAIT
: Configuration.ORIENTATION_LANDSCAPE;
- assertEquals(expectedOrientation, newDisplayConfig.orientation);
+ assertEquals(expectedOrientation, dc.getConfiguration().orientation);
}
@Test
@@ -737,7 +733,7 @@
final ActivityStack stack =
new ActivityTestsBase.StackBuilder(mWm.mAtmService.mRootActivityContainer)
.setDisplay(dc.mActivityDisplay).build();
- final ActivityRecord activity = stack.topTask().getTopActivity();
+ final ActivityRecord activity = stack.topTask().getTopNonFinishingActivity();
activity.setRequestedOrientation(newOrientation);
diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java
index 41cbd81..b2cb8c9 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java
@@ -154,7 +154,7 @@
ACTIVITY_TYPE_RECENTS);
assertThat(recentsStack).isNotNull();
- ActivityRecord recentsActivity = recentsStack.getTopActivity();
+ ActivityRecord recentsActivity = recentsStack.getTopNonFinishingActivity();
// The activity is started in background so it should be invisible and will be stopped.
assertThat(recentsActivity).isNotNull();
assertThat(mSupervisor.mStoppingActivities).contains(recentsActivity);
@@ -211,7 +211,7 @@
display.mDisplayContent.mBoundsAnimationController = mock(BoundsAnimationController.class);
ActivityStack homeStack = display.getHomeStack();
// Assume the home activity support recents.
- ActivityRecord targetActivity = homeStack.getTopActivity();
+ ActivityRecord targetActivity = homeStack.getTopNonFinishingActivity();
if (targetActivity == null) {
targetActivity = new ActivityBuilder(mService)
.setCreateTask(true)
diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
new file mode 100644
index 0000000..ecd9a83
--- /dev/null
+++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
@@ -0,0 +1,426 @@
+/*
+ * Copyright (C) 2019 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;
+
+import static android.content.pm.ActivityInfo.CONFIG_ORIENTATION;
+import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
+import static android.view.Surface.ROTATION_270;
+import static android.view.Surface.ROTATION_90;
+
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.eq;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
+import static com.android.server.wm.ActivityStack.ActivityState.STOPPED;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.when;
+
+import android.app.ActivityManager;
+import android.app.ActivityManagerInternal;
+import android.app.TaskStackListener;
+import android.app.WindowConfiguration;
+import android.content.pm.ActivityInfo;
+import android.content.res.Configuration;
+import android.graphics.Rect;
+import android.os.IBinder;
+import android.platform.test.annotations.Presubmit;
+
+import androidx.test.filters.MediumTest;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Tests for Size Compatibility mode.
+ *
+ * Build/Install/Run:
+ * atest WmTests:SizeCompatTests
+ */
+@MediumTest
+@Presubmit
+@RunWith(WindowTestRunner.class)
+public class SizeCompatTests extends ActivityTestsBase {
+ private ActivityStack mStack;
+ private Task mTask;
+ private ActivityRecord mActivity;
+
+ private void setUpApp(ActivityDisplay display) {
+ mStack = new StackBuilder(mRootActivityContainer).setDisplay(display).build();
+ mTask = mStack.getChildAt(0);
+ mActivity = mTask.getTopNonFinishingActivity();
+ }
+
+ private void ensureActivityConfiguration() {
+ mActivity.ensureActivityConfiguration(0 /* globalChanges */, false /* preserveWindow */);
+ }
+
+ @Test
+ public void testRestartProcessIfVisible() {
+ setUpApp(new TestActivityDisplay.Builder(mService, 1000, 2500).build());
+ doNothing().when(mSupervisor).scheduleRestartTimeout(mActivity);
+ mActivity.visible = true;
+ mActivity.setSavedState(null /* savedState */);
+ mActivity.setState(ActivityStack.ActivityState.RESUMED, "testRestart");
+ prepareUnresizable(1.5f /* maxAspect */, SCREEN_ORIENTATION_UNSPECIFIED);
+
+ final Rect originalOverrideBounds = new Rect(mActivity.getBounds());
+ resizeDisplay(mStack.getDisplay(), 600, 1200);
+ // The visible activity should recompute configuration according to the last parent bounds.
+ mService.restartActivityProcessIfVisible(mActivity.appToken);
+
+ assertEquals(ActivityStack.ActivityState.RESTARTING_PROCESS, mActivity.getState());
+ assertNotEquals(originalOverrideBounds, mActivity.getBounds());
+ }
+
+ @Test
+ public void testKeepBoundsWhenChangingFromFreeformToFullscreen() {
+ removeGlobalMinSizeRestriction();
+ // create freeform display and a freeform app
+ ActivityDisplay display = new TestActivityDisplay.Builder(mService, 2000, 1000)
+ .setCanRotate(false)
+ .setWindowingMode(WindowConfiguration.WINDOWING_MODE_FREEFORM).build();
+ setUpApp(display);
+
+ // Put app window into freeform and then make it a compat app.
+ mTask.setBounds(100, 100, 400, 600);
+ prepareUnresizable(-1.f /* maxAspect */, SCREEN_ORIENTATION_PORTRAIT);
+
+ final Rect bounds = new Rect(mActivity.getBounds());
+ final int density = mActivity.getConfiguration().densityDpi;
+
+ // change display configuration to fullscreen
+ Configuration c = new Configuration(display.getRequestedOverrideConfiguration());
+ c.windowConfiguration.setWindowingMode(WindowConfiguration.WINDOWING_MODE_FULLSCREEN);
+ display.onRequestedOverrideConfigurationChanged(c);
+
+ // check if dimensions stay the same
+ assertTrue(mActivity.inSizeCompatMode());
+ assertEquals(bounds.width(), mActivity.getBounds().width());
+ assertEquals(bounds.height(), mActivity.getBounds().height());
+ assertEquals(density, mActivity.getConfiguration().densityDpi);
+ }
+
+ @Test
+ public void testFixedAspectRatioBoundsWithDecor() {
+ final int decorHeight = 200; // e.g. The device has cutout.
+ setUpApp(new TestActivityDisplay.Builder(mService, 600, 800)
+ .setNotch(decorHeight).build());
+
+ mActivity.info.minAspectRatio = mActivity.info.maxAspectRatio = 1;
+ prepareUnresizable(-1f, SCREEN_ORIENTATION_UNSPECIFIED);
+
+ // The parent configuration doesn't change since the first resolved configuration, so the
+ // activity shouldn't be in the size compatibility mode.
+ assertFalse(mActivity.inSizeCompatMode());
+
+ final Rect appBounds = mActivity.getWindowConfiguration().getAppBounds();
+ // Ensure the app bounds keep the declared aspect ratio.
+ assertEquals(appBounds.width(), appBounds.height());
+ // The decor height should be a part of the effective bounds.
+ assertEquals(mActivity.getBounds().height(), appBounds.height() + decorHeight);
+
+ mTask.getConfiguration().windowConfiguration.setRotation(ROTATION_90);
+ mActivity.onConfigurationChanged(mTask.getConfiguration());
+ // After changing orientation, the aspect ratio should be the same.
+ assertEquals(appBounds.width(), appBounds.height());
+ // The decor height will be included in width.
+ assertEquals(mActivity.getBounds().width(), appBounds.width() + decorHeight);
+ }
+
+ @Test
+ public void testFixedScreenConfigurationWhenMovingToDisplay() {
+ setUpApp(new TestActivityDisplay.Builder(mService, 1000, 2500).build());
+
+ // Make a new less-tall display with lower density
+ final ActivityDisplay newDisplay =
+ new TestActivityDisplay.Builder(mService, 1000, 2000)
+ .setDensityDpi(200).build();
+
+ mActivity = new ActivityBuilder(mService)
+ .setTask(mTask)
+ .setResizeMode(RESIZE_MODE_UNRESIZEABLE)
+ .setMaxAspectRatio(1.5f)
+ .build();
+ mActivity.visible = true;
+
+ final Rect originalBounds = new Rect(mActivity.getBounds());
+ final int originalDpi = mActivity.getConfiguration().densityDpi;
+
+ // Move the non-resizable activity to the new display.
+ mStack.reparent(newDisplay.mDisplayContent, true /* onTop */);
+
+ assertEquals(originalBounds.width(), mActivity.getBounds().width());
+ assertEquals(originalBounds.height(), mActivity.getBounds().height());
+ assertEquals(originalDpi, mActivity.getConfiguration().densityDpi);
+ assertTrue(mActivity.inSizeCompatMode());
+ }
+
+ @Test
+ public void testFixedScreenBoundsWhenDisplaySizeChanged() {
+ setUpApp(new TestActivityDisplay.Builder(mService, 1000, 2500).build());
+ prepareUnresizable(-1f /* maxAspect */, SCREEN_ORIENTATION_PORTRAIT);
+ assertFalse(mActivity.inSizeCompatMode());
+
+ final Rect origBounds = new Rect(mActivity.getBounds());
+
+ // Change the size of current display.
+ resizeDisplay(mStack.getDisplay(), 1000, 2000);
+ ensureActivityConfiguration();
+
+ assertEquals(origBounds.width(), mActivity.getWindowConfiguration().getBounds().width());
+ assertEquals(origBounds.height(), mActivity.getWindowConfiguration().getBounds().height());
+ assertTrue(mActivity.inSizeCompatMode());
+
+ // Change display size to a different orientation
+ resizeDisplay(mStack.getDisplay(), 2000, 1000);
+ ensureActivityConfiguration();
+ assertEquals(origBounds.width(), mActivity.getWindowConfiguration().getBounds().width());
+ assertEquals(origBounds.height(), mActivity.getWindowConfiguration().getBounds().height());
+ }
+
+ @Test
+ public void testLetterboxFullscreenBounds() {
+ setUpApp(new TestActivityDisplay.Builder(mService, 1000, 2500).build());
+
+ // Fill out required fields on default display since WM-side is mocked out
+ prepareUnresizable(-1.f /* maxAspect */, SCREEN_ORIENTATION_LANDSCAPE);
+ assertFalse(mActivity.inSizeCompatMode());
+ assertTrue(mActivity.getBounds().width() > mActivity.getBounds().height());
+ }
+
+ @Test
+ public void testMoveToDifferentOrientDisplay() {
+ setUpApp(new TestActivityDisplay.Builder(mService, 1000, 2500).build());
+
+ final ActivityDisplay newDisplay =
+ new TestActivityDisplay.Builder(mService, 2000, 1000)
+ .setCanRotate(false).build();
+
+ prepareUnresizable(-1.f /* maxAspect */, SCREEN_ORIENTATION_PORTRAIT);
+ assertFalse(mActivity.inSizeCompatMode());
+
+ final Rect origBounds = new Rect(mActivity.getBounds());
+
+ // Move the non-resizable activity to the new display.
+ mStack.reparent(newDisplay.mDisplayContent, true /* onTop */);
+ ensureActivityConfiguration();
+ assertEquals(origBounds.width(), mActivity.getWindowConfiguration().getBounds().width());
+ assertEquals(origBounds.height(), mActivity.getWindowConfiguration().getBounds().height());
+ assertTrue(mActivity.inSizeCompatMode());
+ }
+
+ @Test
+ public void testFixedOrientRotateCutoutDisplay() {
+ // Create a display with a notch/cutout
+ setUpApp(new TestActivityDisplay.Builder(mService, 1000, 2500).setNotch(60).build());
+ prepareUnresizable(1.4f /* maxAspect */, SCREEN_ORIENTATION_PORTRAIT);
+
+ final Rect origBounds = new Rect(mActivity.getBounds());
+ final Rect origAppBounds = new Rect(mActivity.getWindowConfiguration().getAppBounds());
+
+ // Rotate the display
+ Configuration c = new Configuration();
+ mStack.getDisplay().mDisplayContent.getDisplayRotation().setRotation(ROTATION_270);
+ mStack.getDisplay().mDisplayContent.computeScreenConfiguration(c);
+ mStack.getDisplay().onRequestedOverrideConfigurationChanged(c);
+
+ // Make sure the app size is the same
+ assertEquals(ROTATION_270, mStack.getWindowConfiguration().getRotation());
+ assertEquals(origBounds.width(), mActivity.getWindowConfiguration().getBounds().width());
+ assertEquals(origBounds.height(), mActivity.getWindowConfiguration().getBounds().height());
+ assertEquals(origAppBounds.width(),
+ mActivity.getWindowConfiguration().getAppBounds().width());
+ assertEquals(origAppBounds.height(),
+ mActivity.getWindowConfiguration().getAppBounds().height());
+ }
+
+ @Test
+ public void testFixedAspOrientChangeOrient() {
+ setUpApp(new TestActivityDisplay.Builder(mService, 1000, 2500).build());
+
+ prepareUnresizable(1.4f /* maxAspect */, SCREEN_ORIENTATION_LANDSCAPE);
+ assertTrue(mActivity.inSizeCompatMode());
+
+ final Rect originalBounds = new Rect(mActivity.getBounds());
+ final Rect originalAppBounds = new Rect(mActivity.getWindowConfiguration().getAppBounds());
+
+ // Change the fixed orientation
+ mActivity.mOrientation = SCREEN_ORIENTATION_PORTRAIT;
+ mActivity.info.screenOrientation = SCREEN_ORIENTATION_PORTRAIT;
+ // TaskRecord's configuration actually depends on the activity config right now for
+ // pillarboxing.
+ mActivity.getTask().onRequestedOverrideConfigurationChanged(
+ mActivity.getTask().getRequestedOverrideConfiguration());
+
+ assertEquals(originalBounds.width(), mActivity.getBounds().height());
+ assertEquals(originalBounds.height(), mActivity.getBounds().width());
+ assertEquals(originalAppBounds.width(),
+ mActivity.getWindowConfiguration().getAppBounds().height());
+ assertEquals(originalAppBounds.height(),
+ mActivity.getWindowConfiguration().getAppBounds().width());
+ }
+
+ @Test
+ public void testFixedScreenLayoutSizeBits() {
+ setUpApp(new TestActivityDisplay.Builder(mService, 1000, 2500).build());
+ final int fixedScreenLayout = Configuration.SCREENLAYOUT_LONG_NO
+ | Configuration.SCREENLAYOUT_SIZE_NORMAL;
+ final int layoutMask = Configuration.SCREENLAYOUT_LONG_MASK
+ | Configuration.SCREENLAYOUT_SIZE_MASK
+ | Configuration.SCREENLAYOUT_LAYOUTDIR_MASK;
+ Configuration c = new Configuration(mTask.getRequestedOverrideConfiguration());
+ c.screenLayout = fixedScreenLayout | Configuration.SCREENLAYOUT_LAYOUTDIR_LTR;
+ mTask.onRequestedOverrideConfigurationChanged(c);
+ prepareUnresizable(1.5f, SCREEN_ORIENTATION_UNSPECIFIED);
+
+ // The initial configuration should inherit from parent.
+ assertEquals(fixedScreenLayout | Configuration.SCREENLAYOUT_LAYOUTDIR_LTR,
+ mActivity.getConfiguration().screenLayout & layoutMask);
+
+ mTask.getConfiguration().screenLayout = Configuration.SCREENLAYOUT_LAYOUTDIR_RTL
+ | Configuration.SCREENLAYOUT_LONG_YES | Configuration.SCREENLAYOUT_SIZE_LARGE;
+ mActivity.onConfigurationChanged(mTask.getConfiguration());
+
+ // The size and aspect ratio bits don't change, but the layout direction should be updated.
+ assertEquals(fixedScreenLayout | Configuration.SCREENLAYOUT_LAYOUTDIR_RTL,
+ mActivity.getConfiguration().screenLayout & layoutMask);
+ }
+
+ @Test
+ public void testResetNonVisibleActivity() {
+ setUpApp(new TestActivityDisplay.Builder(mService, 1000, 2500).build());
+ final ActivityDisplay display = mStack.getDisplay();
+ spyOn(display);
+
+ prepareUnresizable(1.5f, SCREEN_ORIENTATION_UNSPECIFIED);
+ mActivity.setState(STOPPED, "testSizeCompatMode");
+ mActivity.visible = false;
+ mActivity.app.setReportedProcState(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY);
+ // Make the parent bounds to be different so the activity is in size compatibility mode.
+ mTask.getWindowConfiguration().setAppBounds(new Rect(0, 0, 600, 1200));
+
+ // Simulate the display changes orientation.
+ when(display.getLastOverrideConfigurationChanges()).thenReturn(
+ ActivityInfo.CONFIG_SCREEN_SIZE | CONFIG_ORIENTATION
+ | ActivityInfo.CONFIG_WINDOW_CONFIGURATION);
+ mActivity.onConfigurationChanged(mTask.getConfiguration());
+ when(display.getLastOverrideConfigurationChanges()).thenCallRealMethod();
+ // The override configuration should not change so it is still in size compatibility mode.
+ assertTrue(mActivity.inSizeCompatMode());
+
+ // Change display density
+ final DisplayContent displayContent = mStack.getDisplay().mDisplayContent;
+ displayContent.mBaseDisplayDensity = (int) (0.7f * displayContent.mBaseDisplayDensity);
+ final Configuration c = new Configuration();
+ displayContent.computeScreenConfiguration(c);
+ mService.mAmInternal = mock(ActivityManagerInternal.class);
+ mStack.getDisplay().onRequestedOverrideConfigurationChanged(c);
+
+ // The override configuration should be reset and the activity's process will be killed.
+ assertFalse(mActivity.inSizeCompatMode());
+ verify(mActivity).restartProcessIfVisible();
+ mLockRule.runWithScissors(mService.mH, () -> { }, TimeUnit.SECONDS.toMillis(3));
+ verify(mService.mAmInternal).killProcess(
+ eq(mActivity.app.mName), eq(mActivity.app.mUid), anyString());
+ }
+
+ /**
+ * Ensures that {@link TaskStackListener} can receive callback about the activity in size
+ * compatibility mode.
+ */
+ @Test
+ public void testHandleActivitySizeCompatMode() {
+ setUpApp(new TestActivityDisplay.Builder(mService, 1000, 2000).build());
+ ActivityRecord activity = mActivity;
+ activity.setState(ActivityStack.ActivityState.RESUMED, "testHandleActivitySizeCompatMode");
+ prepareUnresizable(-1.f /* maxAspect */, SCREEN_ORIENTATION_PORTRAIT);
+ ensureActivityConfiguration();
+ assertFalse(mActivity.inSizeCompatMode());
+
+ final ArrayList<IBinder> compatTokens = new ArrayList<>();
+ mService.getTaskChangeNotificationController().registerTaskStackListener(
+ new TaskStackListener() {
+ @Override
+ public void onSizeCompatModeActivityChanged(int displayId,
+ IBinder activityToken) {
+ compatTokens.add(activityToken);
+ }
+ });
+
+ // Resize the display so that the activity exercises size-compat mode.
+ resizeDisplay(mStack.getDisplay(), 1000, 2500);
+
+ // Expect the exact token when the activity is in size compatibility mode.
+ assertEquals(1, compatTokens.size());
+ assertEquals(activity.appToken, compatTokens.get(0));
+
+ compatTokens.clear();
+ // Make the activity resizable again by restarting it
+ activity.info.resizeMode = ActivityInfo.RESIZE_MODE_RESIZEABLE;
+ activity.visible = true;
+ activity.restartProcessIfVisible();
+ // The full lifecycle isn't hooked up so manually set state to resumed
+ activity.setState(ActivityStack.ActivityState.RESUMED, "testHandleActivitySizeCompatMode");
+ mStack.getDisplay().handleActivitySizeCompatModeIfNeeded(activity);
+
+ // Expect null token when switching to non-size-compat mode activity.
+ assertEquals(1, compatTokens.size());
+ assertEquals(null, compatTokens.get(0));
+ }
+
+ /**
+ * Setup {@link #mActivity} as a size-compat-mode-able activity with fixed aspect and/or
+ * orientation.
+ */
+ private void prepareUnresizable(float maxAspect, int screenOrientation) {
+ mActivity.info.resizeMode = RESIZE_MODE_UNRESIZEABLE;
+ mActivity.visible = true;
+ if (maxAspect >= 0) {
+ mActivity.info.maxAspectRatio = maxAspect;
+ }
+ if (screenOrientation != SCREEN_ORIENTATION_UNSPECIFIED) {
+ mActivity.mOrientation = screenOrientation;
+ mActivity.info.screenOrientation = screenOrientation;
+ // TaskRecord's configuration actually depends on the activity config right now for
+ // pillarboxing.
+ mActivity.getTask().onRequestedOverrideConfigurationChanged(
+ mActivity.getTask().getRequestedOverrideConfiguration());
+ }
+ ensureActivityConfiguration();
+ }
+
+ private void resizeDisplay(ActivityDisplay display, int width, int height) {
+ final DisplayContent displayContent = display.mDisplayContent;
+ displayContent.mBaseDisplayWidth = width;
+ displayContent.mBaseDisplayHeight = height;
+ Configuration c = new Configuration();
+ displayContent.computeScreenConfiguration(c);
+ display.onRequestedOverrideConfigurationChanged(c);
+ }
+}
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java
index faa9f11..b07a27b 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java
@@ -45,6 +45,7 @@
import static org.hamcrest.Matchers.sameInstance;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
@@ -161,12 +162,12 @@
assertTrue(task.returnsToHomeStack());
}
- /** Ensures that empty bounds are not propagated to the configuration. */
+ /** Ensures that empty bounds cause appBounds to inherit from parent. */
@Test
public void testAppBounds_EmptyBounds() {
final Rect emptyBounds = new Rect();
testStackBoundsConfiguration(WINDOWING_MODE_FULLSCREEN, mParentBounds, emptyBounds,
- null /*ExpectedBounds*/);
+ mParentBounds);
}
/** Ensures that bounds on freeform stacks are not clipped. */
@@ -280,7 +281,7 @@
ActivityStack stack = new StackBuilder(mRootActivityContainer)
.setWindowingMode(WINDOWING_MODE_FULLSCREEN).setDisplay(display).build();
Task task = stack.getChildAt(0);
- ActivityRecord root = task.getTopActivity();
+ ActivityRecord root = task.getTopNonFinishingActivity();
assertEquals(fullScreenBounds, task.getBounds());
@@ -293,7 +294,7 @@
// Top activity gets used
ActivityRecord top = new ActivityBuilder(mService).setTask(task).setStack(stack).build();
- assertEquals(top, task.getTopActivity());
+ assertEquals(top, task.getTopNonFinishingActivity());
top.setRequestedOrientation(SCREEN_ORIENTATION_LANDSCAPE);
assertThat(task.getBounds().width()).isGreaterThan(task.getBounds().height());
assertEquals(task.getBounds().width(), fullScreenBounds.width());
@@ -344,7 +345,7 @@
ActivityStack stack = new StackBuilder(mRootActivityContainer)
.setWindowingMode(WINDOWING_MODE_FULLSCREEN).setDisplay(display).build();
Task task = stack.getChildAt(0);
- ActivityRecord root = task.getTopActivity();
+ ActivityRecord root = task.getTopNonFinishingActivity();
final WindowContainer parentWindowContainer =
new WindowContainer(mSystemServicesTestRule.getWindowManagerService());
@@ -415,6 +416,24 @@
assertEquals(Configuration.ORIENTATION_LANDSCAPE, inOutConfig.orientation);
}
+ @Test
+ public void testComputeNestedConfigResourceOverrides() {
+ final Task task = new TaskBuilder(mSupervisor).build();
+ assertTrue(task.getResolvedOverrideBounds().isEmpty());
+ int origScreenH = task.getConfiguration().screenHeightDp;
+ Configuration stackConfig = new Configuration();
+ stackConfig.setTo(task.getStack().getRequestedOverrideConfiguration());
+ stackConfig.windowConfiguration.setWindowingMode(WINDOWING_MODE_FREEFORM);
+
+ // Set bounds on stack (not task) and verify that the task resource configuration changes
+ // despite it's override bounds being empty.
+ Rect bounds = new Rect(task.getStack().getBounds());
+ bounds.bottom = (int) (bounds.bottom * 0.6f);
+ stackConfig.windowConfiguration.setBounds(bounds);
+ task.getStack().onRequestedOverrideConfigurationChanged(stackConfig);
+ assertNotEquals(origScreenH, task.getConfiguration().screenHeightDp);
+ }
+
/** Ensures that the alias intent won't have target component resolved. */
@Test
public void testTaskIntentActivityAlias() {
diff --git a/services/tests/wmtests/src/com/android/server/wm/TestActivityDisplay.java b/services/tests/wmtests/src/com/android/server/wm/TestActivityDisplay.java
index 9c3ff65..48ec261 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TestActivityDisplay.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TestActivityDisplay.java
@@ -23,12 +23,17 @@
import static com.android.dx.mockito.inline.extended.ExtendedMockito.anyBoolean;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static org.mockito.ArgumentMatchers.any;
+import android.content.res.Configuration;
+import android.graphics.Insets;
+import android.graphics.Rect;
import android.hardware.display.DisplayManagerGlobal;
import android.view.Display;
+import android.view.DisplayCutout;
import android.view.DisplayInfo;
class TestActivityDisplay extends ActivityDisplay {
@@ -107,4 +112,94 @@
.setCreateActivity(false)
.build();
}
+
+ public static class Builder {
+ private final DisplayInfo mInfo;
+ private boolean mCanRotate = true;
+ private int mWindowingMode = WINDOWING_MODE_FULLSCREEN;
+ private int mPosition = POSITION_TOP;
+ private final ActivityTaskManagerService mService;
+ private boolean mSystemDecorations = false;
+
+ Builder(ActivityTaskManagerService service, int width, int height) {
+ mService = service;
+ mInfo = new DisplayInfo();
+ mService.mContext.getDisplay().getDisplayInfo(mInfo);
+ mInfo.logicalWidth = width;
+ mInfo.logicalHeight = height;
+ mInfo.logicalDensityDpi = 300;
+ mInfo.displayCutout = null;
+ }
+ Builder(ActivityTaskManagerService service, DisplayInfo info) {
+ mService = service;
+ mInfo = info;
+ }
+ Builder setSystemDecorations(boolean yes) {
+ mSystemDecorations = yes;
+ return this;
+ }
+ Builder setPosition(int position) {
+ mPosition = position;
+ return this;
+ }
+ Builder setUniqueId(String uniqueId) {
+ mInfo.uniqueId = uniqueId;
+ return this;
+ }
+ Builder setType(int type) {
+ mInfo.type = type;
+ return this;
+ }
+ Builder setOwnerUid(int ownerUid) {
+ mInfo.ownerUid = ownerUid;
+ return this;
+ }
+ Builder setNotch(int height) {
+ mInfo.displayCutout = new DisplayCutout(
+ Insets.of(0, height, 0, 0), null, new Rect(20, 0, 80, height), null, null);
+ return this;
+ }
+ Builder setCanRotate(boolean canRotate) {
+ mCanRotate = canRotate;
+ return this;
+ }
+ Builder setWindowingMode(int windowingMode) {
+ mWindowingMode = windowingMode;
+ return this;
+ }
+ Builder setDensityDpi(int dpi) {
+ mInfo.logicalDensityDpi = dpi;
+ return this;
+ }
+ TestActivityDisplay build() {
+ final int displayId = SystemServicesTestRule.sNextDisplayId++;
+ final Display display = new Display(DisplayManagerGlobal.getInstance(), displayId,
+ mInfo, DEFAULT_DISPLAY_ADJUSTMENTS);
+ final TestActivityDisplay newDisplay;
+ synchronized (mService.mGlobalLock) {
+ newDisplay = new TestActivityDisplay(mService.mStackSupervisor, display);
+ mService.mRootActivityContainer.addChild(newDisplay, mPosition);
+ }
+ // disable the normal system decorations
+ final DisplayPolicy displayPolicy = newDisplay.mDisplayContent.getDisplayPolicy();
+ spyOn(displayPolicy);
+ if (mSystemDecorations) {
+ doReturn(true).when(newDisplay).supportsSystemDecorations();
+ } else {
+ doReturn(false).when(displayPolicy).hasNavigationBar();
+ doReturn(false).when(displayPolicy).hasStatusBar();
+ doReturn(false).when(newDisplay).supportsSystemDecorations();
+ }
+ Configuration c = new Configuration();
+ newDisplay.mDisplayContent.computeScreenConfiguration(c);
+ c.windowConfiguration.setWindowingMode(mWindowingMode);
+ newDisplay.onRequestedOverrideConfigurationChanged(c);
+ // This is a rotating display
+ if (mCanRotate) {
+ doReturn(false).when(newDisplay.mDisplayContent)
+ .handlesOrientationChangeFromDescendant();
+ }
+ return newDisplay;
+ }
+ }
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowFrameTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowFrameTests.java
index 0b8b6a1..7be05a3 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowFrameTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowFrameTests.java
@@ -96,6 +96,10 @@
assertRect(w.getFrameLw(), left, top, right, bottom);
}
+ private void assertRelFrame(WindowState w, int left, int top, int right, int bottom) {
+ assertRect(w.getRelativeFrameLw(), left, top, right, bottom);
+ }
+
private void assertContentFrame(WindowState w, Rect expectedRect) {
assertRect(w.getContentFrameLw(), expectedRect.left, expectedRect.top, expectedRect.right,
expectedRect.bottom);
@@ -153,6 +157,7 @@
w.getWindowFrames().setFrames(pf, df, cf, vf, dcf, sf);
w.computeFrameLw();
assertFrame(w, 0, 0, 1000, 1000);
+ assertRelFrame(w, 0, 0, 1000, 1000);
assertContentInset(w, 0, topContentInset, 0, bottomContentInset);
assertVisibleInset(w, 0, topVisibleInset, 0, bottomVisibleInset);
assertStableInset(w, leftStableInset, 0, rightStableInset, 0);
@@ -167,6 +172,7 @@
w.mRequestedHeight = 100;
w.computeFrameLw();
assertFrame(w, 100, 100, 200, 200);
+ assertRelFrame(w, 100, 100, 200, 200);
assertContentInset(w, 0, 0, 0, 0);
// In this case the frames are shrunk to the window frame.
assertContentFrame(w, w.getFrameLw());
@@ -189,6 +195,7 @@
w.getWindowFrames().setFrames(pf, pf, pf, pf, pf, pf);
w.computeFrameLw();
assertFrame(w, 0, 0, 1000, 1000);
+ assertRelFrame(w, 0, 0, 1000, 1000);
// It can select various widths and heights within the bounds.
// Strangely the window attribute width is ignored for normal windows
@@ -242,15 +249,18 @@
w.mAttrs.gravity = Gravity.RIGHT | Gravity.TOP;
w.computeFrameLw();
assertFrame(w, 700, 0, 1000, 300);
+ assertRelFrame(w, 700, 0, 1000, 300);
w.mAttrs.gravity = Gravity.RIGHT | Gravity.BOTTOM;
w.computeFrameLw();
assertFrame(w, 700, 700, 1000, 1000);
+ assertRelFrame(w, 700, 700, 1000, 1000);
// Window specified x and y are interpreted as offsets in the opposite
// direction of gravity
w.mAttrs.x = 100;
w.mAttrs.y = 100;
w.computeFrameLw();
assertFrame(w, 600, 600, 900, 900);
+ assertRelFrame(w, 600, 600, 900, 900);
}
@Test
@@ -279,6 +289,8 @@
// For non fullscreen tasks the containing frame is based off the
// task bounds not the parent frame.
assertEquals(resolvedTaskBounds, w.getFrameLw());
+ assertEquals(0, w.getRelativeFrameLw().left);
+ assertEquals(0, w.getRelativeFrameLw().top);
assertContentFrame(w, resolvedTaskBounds);
assertContentInset(w, 0, 0, 0, 0);
@@ -290,6 +302,8 @@
windowFrames.setFrames(pf, pf, cf, cf, pf, cf);
w.computeFrameLw();
assertEquals(resolvedTaskBounds, w.getFrameLw());
+ assertEquals(0, w.getRelativeFrameLw().left);
+ assertEquals(0, w.getRelativeFrameLw().top);
int contentInsetRight = resolvedTaskBounds.right - cfRight;
int contentInsetBottom = resolvedTaskBounds.bottom - cfBottom;
assertContentInset(w, 0, 0, contentInsetRight, contentInsetBottom);
@@ -309,6 +323,8 @@
windowFrames.setFrames(pf, pf, cf, cf, pf, cf);
w.computeFrameLw();
assertEquals(resolvedTaskBounds, w.getFrameLw());
+ assertEquals(0, w.getRelativeFrameLw().left);
+ assertEquals(0, w.getRelativeFrameLw().top);
contentInsetRight = insetRight - cfRight;
contentInsetBottom = insetBottom - cfBottom;
assertContentInset(w, 0, 0, contentInsetRight, contentInsetBottom);
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 2cdf21d..46c89d2 100755
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -821,13 +821,6 @@
"always_show_emergency_alert_onoff_bool";
/**
- * The flag to disable cell broadcast severe alert when extreme alert is disabled.
- * @hide
- */
- public static final String KEY_DISABLE_SEVERE_WHEN_EXTREME_DISABLED_BOOL =
- "disable_severe_when_extreme_disabled_bool";
-
- /**
* The data call retry configuration for different types of APN.
* @hide
*/
@@ -3455,7 +3448,6 @@
sDefaults.putStringArray(KEY_APN_SETTINGS_DEFAULT_APN_TYPES_STRING_ARRAY, null);
sDefaults.putBoolean(KEY_BROADCAST_EMERGENCY_CALL_STATE_CHANGES_BOOL, false);
sDefaults.putBoolean(KEY_ALWAYS_SHOW_EMERGENCY_ALERT_ONOFF_BOOL, false);
- sDefaults.putBoolean(KEY_DISABLE_SEVERE_WHEN_EXTREME_DISABLED_BOOL, true);
sDefaults.putStringArray(KEY_CARRIER_DATA_CALL_RETRY_CONFIG_STRINGS, new String[]{
"default:default_randomization=2000,5000,10000,20000,40000,80000:5000,160000:5000,"
+ "320000:5000,640000:5000,1280000:5000,1800000:5000",
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index 90343d4..f7d2b40 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -384,12 +384,7 @@
public void setSecurityParams(@SecurityType int securityType) {
// Clear all the bitsets.
allowedKeyManagement.clear();
- allowedProtocols.clear();
allowedAuthAlgorithms.clear();
- allowedPairwiseCiphers.clear();
- allowedGroupCiphers.clear();
- allowedGroupManagementCiphers.clear();
- allowedSuiteBCiphers.clear();
switch (securityType) {
case SECURITY_TYPE_OPEN:
@@ -412,6 +407,9 @@
requirePMF = true;
break;
case SECURITY_TYPE_EAP_SUITE_B:
+ allowedGroupCiphers.clear();
+ allowedGroupManagementCiphers.clear();
+ allowedSuiteBCiphers.clear();
allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SUITE_B_192);
allowedGroupCiphers.set(WifiConfiguration.GroupCipher.GCMP_256);
allowedGroupManagementCiphers.set(WifiConfiguration.GroupMgmtCipher.BIP_GMAC_256);
@@ -947,6 +945,12 @@
public int meteredOverride = METERED_OVERRIDE_NONE;
/**
+ * This Wifi configuration is a clone of another network with lower security
+ * @hide
+ */
+ public String clonedNetworkConfigKey;
+
+ /**
* Blend together all the various opinions to decide if the given network
* should be considered metered or not.
*
@@ -1804,6 +1808,7 @@
shared = true;
dtimInterval = 0;
mRandomizedMacAddress = MacAddress.fromString(WifiInfo.DEFAULT_MAC_ADDRESS);
+ clonedNetworkConfigKey = null;
}
/**
@@ -2371,6 +2376,7 @@
/** copy constructor {@hide} */
@UnsupportedAppUsage
+
public WifiConfiguration(WifiConfiguration source) {
if (source != null) {
networkId = source.networkId;
@@ -2454,6 +2460,7 @@
requirePMF = source.requirePMF;
updateIdentifier = source.updateIdentifier;
carrierId = source.carrierId;
+ clonedNetworkConfigKey = source.clonedNetworkConfigKey;
}
}
@@ -2529,6 +2536,7 @@
dest.writeInt(osu ? 1 : 0);
dest.writeLong(randomizedMacExpirationTimeMs);
dest.writeInt(carrierId);
+ dest.writeString(clonedNetworkConfigKey);
}
/** Implement the Parcelable interface {@hide} */
@@ -2606,6 +2614,7 @@
config.osu = in.readInt() != 0;
config.randomizedMacExpirationTimeMs = in.readLong();
config.carrierId = in.readInt();
+ config.clonedNetworkConfigKey = in.readString();
return config;
}
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index a61a5af..16cb964 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -380,14 +380,6 @@
* @hide
*/
public static final String EXTRA_DELAY = "android.net.wifi.extra.DELAY";
- /**
- * String representation of an URL.
- *
- * Retrieve with {@link android.content.Intent#getStringExtra(String)}.
- *
- * @hide
- */
- public static final String EXTRA_URL = "android.net.wifi.extra.URL";
/**
* Broadcast intent action indicating a Passpoint subscription remediation frame has been
@@ -420,34 +412,49 @@
"android.net.wifi.extra.SUBSCRIPTION_REMEDIATION_METHOD";
/**
- * Activity Action: lunch OSU (Online Sign Up) view.
+ * Activity Action: Receiver should launch Passpoint OSU (Online Sign Up) view.
* Included extras:
*
* {@link #EXTRA_OSU_NETWORK}: {@link Network} instance associated with OSU AP.
* {@link #EXTRA_URL}: String representation of a server URL used for OSU process.
*
- * <p>Note: The broadcast is only delivered to registered receivers - no manifest registered
- * components will be launched.
- *
* @hide
*/
+ @SystemApi
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_PASSPOINT_LAUNCH_OSU_VIEW =
"android.net.wifi.action.PASSPOINT_LAUNCH_OSU_VIEW";
/**
- * The lookup key for a {@link android.net.Network} associated with OSU server.
+ * The lookup key for a {@link android.net.Network} associated with a Passpoint OSU server.
+ * Included in the {@link #ACTION_PASSPOINT_LAUNCH_OSU_VIEW} broadcast.
*
* Retrieve with {@link android.content.Intent#getParcelableExtra(String)}.
*
* @hide
*/
+ @SystemApi
public static final String EXTRA_OSU_NETWORK = "android.net.wifi.extra.OSU_NETWORK";
/**
+ * String representation of an URL for Passpoint OSU.
+ * Included in the {@link #ACTION_PASSPOINT_LAUNCH_OSU_VIEW} broadcast.
+ *
+ * Retrieve with {@link android.content.Intent#getStringExtra(String)}.
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String EXTRA_URL = "android.net.wifi.extra.URL";
+
+ /**
* Broadcast intent action indicating that Wi-Fi has been enabled, disabled,
* enabling, disabling, or unknown. One extra provides this state as an int.
- * Another extra provides the previous state, if available.
+ * Another extra provides the previous state, if available. No network-related
+ * permissions are required to subscribe to this broadcast.
+ *
+ * <p class="note">This broadcast is not delivered to manifest receivers in
+ * applications that target API version 26 or later.
*
* @see #EXTRA_WIFI_STATE
* @see #EXTRA_PREVIOUS_WIFI_STATE
@@ -656,6 +663,7 @@
*
* @hide
*/
+ @SystemApi
public static final int SAP_START_FAILURE_GENERAL= 0;
/**
@@ -664,6 +672,7 @@
*
* @hide
*/
+ @SystemApi
public static final int SAP_START_FAILURE_NO_CHANNEL = 1;
/** @hide */
@@ -748,7 +757,11 @@
/**
* Broadcast intent action indicating that the state of Wi-Fi connectivity
* has changed. An extra provides the new state
- * in the form of a {@link android.net.NetworkInfo} object.
+ * in the form of a {@link android.net.NetworkInfo} object. No network-related
+ * permissions are required to subscribe to this broadcast.
+ *
+ * <p class="note">This broadcast is not delivered to manifest receivers in
+ * applications that target API version 26 or later.
* @see #EXTRA_NETWORK_INFO
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
@@ -917,7 +930,7 @@
* The RSSI (signal strength) has changed.
*
* Receiver Required Permission: android.Manifest.permission.ACCESS_WIFI_STATE
- * @see {@link #EXTRA_NEW_RSSI}
+ * @see #EXTRA_NEW_RSSI
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String RSSI_CHANGED_ACTION = "android.net.wifi.RSSI_CHANGED";
@@ -927,21 +940,37 @@
public static final String EXTRA_NEW_RSSI = "newRssi";
/**
- * Broadcast intent action indicating that the link configuration
- * changed on wifi.
+ * @see #ACTION_LINK_CONFIGURATION_CHANGED
* @hide
*/
@UnsupportedAppUsage
public static final String LINK_CONFIGURATION_CHANGED_ACTION =
- "android.net.wifi.LINK_CONFIGURATION_CHANGED";
+ "android.net.wifi.LINK_CONFIGURATION_CHANGED";
+
+ /**
+ * Broadcast intent action indicating that the link configuration changed on wifi.
+ * <br />Included Extras:
+ * <br />{@link #EXTRA_LINK_PROPERTIES}: {@link android.net.LinkProperties} object associated
+ * with the Wi-Fi network.
+ * <br /> No permissions are required to listen to this broadcast.
+ * @hide
+ */
+ @SystemApi
+ public static final String ACTION_LINK_CONFIGURATION_CHANGED =
+ // should be android.net.wifi.action.LINK_CONFIGURATION_CHANGED, but due to
+ // @UnsupportedAppUsage leaving it as android.net.wifi.LINK_CONFIGURATION_CHANGED.
+ LINK_CONFIGURATION_CHANGED_ACTION;
/**
* The lookup key for a {@link android.net.LinkProperties} object associated with the
- * Wi-Fi network. Retrieve with
- * {@link android.content.Intent#getParcelableExtra(String)}.
+ * Wi-Fi network.
+ * Included in the {@link #ACTION_LINK_CONFIGURATION_CHANGED} broadcast.
+ *
+ * Retrieve with {@link android.content.Intent#getParcelableExtra(String)}.
* @hide
*/
- public static final String EXTRA_LINK_PROPERTIES = "linkProperties";
+ @SystemApi
+ public static final String EXTRA_LINK_PROPERTIES = "android.net.wifi.extra.LINK_PROPERTIES";
/**
* The lookup key for a {@link android.net.NetworkCapabilities} object associated with the
@@ -981,24 +1010,26 @@
public static final String ACTION_PICK_WIFI_NETWORK = "android.net.wifi.PICK_WIFI_NETWORK";
/**
- * Activity Action: Show UI to get user approval to enable WiFi.
+ * Activity Action: Receiver should show UI to get user approval to enable WiFi.
* <p>Input: {@link android.content.Intent#EXTRA_PACKAGE_NAME} string extra with
* the name of the app requesting the action.
* <p>Output: Nothing.
- *
+ * <p>No permissions are required to send this action.
* @hide
*/
+ @SystemApi
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_REQUEST_ENABLE = "android.net.wifi.action.REQUEST_ENABLE";
/**
- * Activity Action: Show UI to get user approval to disable WiFi.
+ * Activity Action: Receiver should show UI to get user approval to disable WiFi.
* <p>Input: {@link android.content.Intent#EXTRA_PACKAGE_NAME} string extra with
* the name of the app requesting the action.
* <p>Output: Nothing.
- *
+ * <p>No permissions are required to send this action.
* @hide
*/
+ @SystemApi
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_REQUEST_DISABLE = "android.net.wifi.action.REQUEST_DISABLE";
@@ -1115,11 +1146,15 @@
private static final int MAX_RSSI = -55;
/**
- * Number of RSSI levels used in the framework to initiate
- * {@link #RSSI_CHANGED_ACTION} broadcast
+ * Number of RSSI levels used in the framework to initiate {@link #RSSI_CHANGED_ACTION}
+ * broadcast, where each level corresponds to a range of RSSI values.
+ * The {@link #RSSI_CHANGED_ACTION} broadcast will only fire if the RSSI
+ * change is significant enough to change the RSSI signal level.
* @hide
*/
@UnsupportedAppUsage
+ // TODO(b/140781184): need to support custom number of RSSI levels, as well as levels that are
+ // not evenly spaced
public static final int RSSI_LEVELS = 5;
/**
@@ -1147,7 +1182,8 @@
/** @hide */
public static final boolean DEFAULT_POOR_NETWORK_AVOIDANCE_ENABLED = false;
- /* Maximum number of active locks we allow.
+ /**
+ * Maximum number of active locks we allow.
* This limit was added to prevent apps from creating a ridiculous number
* of locks and crashing the system by overflowing the global ref table.
*/
@@ -1487,40 +1523,43 @@
* {@link #reject()} to return the user's selection back to the platform via this callback.
* @hide
*/
+ @SystemApi
public interface NetworkRequestUserSelectionCallback {
/**
* User selected this network to connect to.
* @param wifiConfiguration WifiConfiguration object corresponding to the network
* user selected.
*/
- void select(@NonNull WifiConfiguration wifiConfiguration);
+ default void select(@NonNull WifiConfiguration wifiConfiguration) {}
/**
* User rejected the app's request.
*/
- void reject();
+ default void reject() {}
}
/**
* Interface for network request callback. Should be implemented by applications and passed when
- * calling {@link #registerNetworkRequestMatchCallback(NetworkRequestMatchCallback, Handler)}.
+ * calling {@link #registerNetworkRequestMatchCallback(Executor,
+ * WifiManager.NetworkRequestMatchCallback)}.
*
* This is meant to be implemented by a UI component to present the user with a list of networks
* matching the app's request. The user is allowed to pick one of these networks to connect to
* or reject the request by the app.
* @hide
*/
+ @SystemApi
public interface NetworkRequestMatchCallback {
/**
* Invoked to register a callback to be invoked to convey user selection. The callback
- * object paased in this method is to be invoked by the UI component after the service sends
+ * object passed in this method is to be invoked by the UI component after the service sends
* a list of matching scan networks using {@link #onMatch(List)} and user picks a network
* from that list.
*
* @param userSelectionCallback Callback object to send back the user selection.
*/
- void onUserSelectionCallbackRegistration(
- @NonNull NetworkRequestUserSelectionCallback userSelectionCallback);
+ default void onUserSelectionCallbackRegistration(
+ @NonNull NetworkRequestUserSelectionCallback userSelectionCallback) {}
/**
* Invoked when the active network request is aborted, either because
@@ -1529,7 +1568,7 @@
* This signals the end of processing for the current request and should stop the UI
* component. No subsequent calls from the UI component will be handled by the platform.
*/
- void onAbort();
+ default void onAbort() {}
/**
* Invoked when a network request initiated by an app matches some networks in scan results.
@@ -1539,7 +1578,7 @@
* @param scanResults List of {@link ScanResult} objects corresponding to the networks
* matching the request.
*/
- void onMatch(@NonNull List<ScanResult> scanResults);
+ default void onMatch(@NonNull List<ScanResult> scanResults) {}
/**
* Invoked on a successful connection with the network that the user selected
@@ -1548,7 +1587,7 @@
* @param wifiConfiguration WifiConfiguration object corresponding to the network that the
* user selected.
*/
- void onUserSelectionConnectSuccess(@NonNull WifiConfiguration wifiConfiguration);
+ default void onUserSelectionConnectSuccess(@NonNull WifiConfiguration wifiConfiguration) {}
/**
* Invoked on failure to establish connection with the network that the user selected
@@ -1557,7 +1596,7 @@
* @param wifiConfiguration WifiConfiguration object corresponding to the network
* user selected.
*/
- void onUserSelectionConnectFailure(@NonNull WifiConfiguration wifiConfiguration);
+ default void onUserSelectionConnectFailure(@NonNull WifiConfiguration wifiConfiguration) {}
}
/**
@@ -1606,11 +1645,11 @@
* @hide
*/
private class NetworkRequestMatchCallbackProxy extends INetworkRequestMatchCallback.Stub {
- private final Handler mHandler;
+ private final Executor mExecutor;
private final NetworkRequestMatchCallback mCallback;
- NetworkRequestMatchCallbackProxy(Looper looper, NetworkRequestMatchCallback callback) {
- mHandler = new Handler(looper);
+ NetworkRequestMatchCallbackProxy(Executor executor, NetworkRequestMatchCallback callback) {
+ mExecutor = executor;
mCallback = callback;
}
@@ -1621,7 +1660,8 @@
Log.v(TAG, "NetworkRequestMatchCallbackProxy: "
+ "onUserSelectionCallbackRegistration callback: " + userSelectionCallback);
}
- mHandler.post(() -> {
+ Binder.clearCallingIdentity();
+ mExecutor.execute(() -> {
mCallback.onUserSelectionCallbackRegistration(
new NetworkRequestUserSelectionCallbackProxy(userSelectionCallback));
});
@@ -1632,7 +1672,8 @@
if (mVerboseLoggingEnabled) {
Log.v(TAG, "NetworkRequestMatchCallbackProxy: onAbort");
}
- mHandler.post(() -> {
+ Binder.clearCallingIdentity();
+ mExecutor.execute(() -> {
mCallback.onAbort();
});
}
@@ -1643,7 +1684,8 @@
Log.v(TAG, "NetworkRequestMatchCallbackProxy: onMatch scanResults: "
+ scanResults);
}
- mHandler.post(() -> {
+ Binder.clearCallingIdentity();
+ mExecutor.execute(() -> {
mCallback.onMatch(scanResults);
});
}
@@ -1654,7 +1696,8 @@
Log.v(TAG, "NetworkRequestMatchCallbackProxy: onUserSelectionConnectSuccess "
+ " wificonfiguration: " + wifiConfiguration);
}
- mHandler.post(() -> {
+ Binder.clearCallingIdentity();
+ mExecutor.execute(() -> {
mCallback.onUserSelectionConnectSuccess(wifiConfiguration);
});
}
@@ -1665,13 +1708,26 @@
Log.v(TAG, "NetworkRequestMatchCallbackProxy: onUserSelectionConnectFailure"
+ " wificonfiguration: " + wifiConfiguration);
}
- mHandler.post(() -> {
+ Binder.clearCallingIdentity();
+ mExecutor.execute(() -> {
mCallback.onUserSelectionConnectFailure(wifiConfiguration);
});
}
}
/**
+ * Same as {@link #registerNetworkRequestMatchCallback(Executor, NetworkRequestMatchCallback)},
+ * except that the callback will be executed on the application's main thread.
+ * @param callback Callback for network match events to register.
+ * @hide
+ */
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
+ public void registerNetworkRequestMatchCallback(@NonNull NetworkRequestMatchCallback callback) {
+ registerNetworkRequestMatchCallback(mContext.getMainExecutor(), callback);
+ }
+
+ /**
* Registers a callback for NetworkRequest matches. See {@link NetworkRequestMatchCallback}.
* Caller can unregister a previously registered callback using
* {@link #unregisterNetworkRequestMatchCallback(NetworkRequestMatchCallback)}
@@ -1681,19 +1737,20 @@
* without the permission will trigger a {@link java.lang.SecurityException}.
* <p>
*
- * @param callback Callback for network match events
- * @param handler The Handler on whose thread to execute the callbacks of the {@code callback}
- * object. If null, then the application's main thread will be used.
+ * @param executor The Executor on whose thread to execute the callbacks of the {@code callback}
+ * object.
+ * @param callback Callback for network match events to register.
* @hide
*/
+ @SystemApi
@RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
- public void registerNetworkRequestMatchCallback(@NonNull NetworkRequestMatchCallback callback,
- @Nullable Handler handler) {
+ public void registerNetworkRequestMatchCallback(@NonNull @CallbackExecutor Executor executor,
+ @NonNull NetworkRequestMatchCallback callback) {
+ if (executor == null) throw new IllegalArgumentException("executor cannot be null");
if (callback == null) throw new IllegalArgumentException("callback cannot be null");
Log.v(TAG, "registerNetworkRequestMatchCallback: callback=" + callback
- + ", handler=" + handler);
+ + ", executor=" + executor);
- Looper looper = (handler == null) ? mContext.getMainLooper() : handler.getLooper();
Binder binder = new Binder();
try {
IWifiManager iWifiManager = getIWifiManager();
@@ -1701,7 +1758,7 @@
throw new RemoteException("Wifi service is not running");
}
iWifiManager.registerNetworkRequestMatchCallback(
- binder, new NetworkRequestMatchCallbackProxy(looper, callback),
+ binder, new NetworkRequestMatchCallbackProxy(executor, callback),
callback.hashCode());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
@@ -1716,9 +1773,10 @@
* without the permission will trigger a {@link java.lang.SecurityException}.
* <p>
*
- * @param callback Callback for network match events
+ * @param callback Callback for network match events to unregister.
* @hide
*/
+ @SystemApi
@RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
public void unregisterNetworkRequestMatchCallback(
@NonNull NetworkRequestMatchCallback callback) {
@@ -2561,29 +2619,30 @@
}
/**
- * get the country code.
- * @return the country code in ISO 3166 format.
- *
- * @hide
- */
- @UnsupportedAppUsage
+ * Get the country code.
+ * @return the country code in ISO 3166 format, or null if there is no country code configured.
+ * @hide
+ */
+ @Nullable
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL)
public String getCountryCode() {
try {
IWifiManager iWifiManager = getIWifiManager();
if (iWifiManager == null) return null;
- String country = iWifiManager.getCountryCode();
- return country;
+ return iWifiManager.getCountryCode();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/**
- * Check if the chipset supports dual frequency band (2.4 GHz and 5 GHz)
+ * Check if the chipset supports dual frequency band (2.4 GHz and 5 GHz).
+ * No permissions are required to call this method.
* @return {@code true} if supported, {@code false} otherwise.
* @hide
*/
- @UnsupportedAppUsage
+ @SystemApi
public boolean isDualBandSupported() {
try {
IWifiManager iWifiManager = getIWifiManager();
@@ -2595,10 +2654,20 @@
}
/**
- * Check if the chipset requires conversion of 5GHz Only apBand to ANY.
- * @return {@code true} if required, {@code false} otherwise.
+ * Check if the device is dual mode capable i.e. supports concurrent STA + Soft AP.
+ *
+ * If the device is dual mode capable, it may require conversion of the user's Soft AP band
+ * selection {@link WifiConfiguration#apBand} from {@link WifiConfiguration#AP_BAND_5GHZ} to
+ * {@link WifiConfiguration#AP_BAND_ANY}, since if the device is connected to a 5GHz DFS
+ * channel as a STA, it may be unable to honor a request to start Soft AP on the same DFS
+ * channel.
+ *
+ * @return {@code true} if dual mode STA + AP is supported by this device, {@code false}
+ * otherwise.
* @hide
*/
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
public boolean isDualModeSupported() {
try {
IWifiManager iWifiManager = getIWifiManager();
@@ -2685,6 +2754,7 @@
*
* @hide for CTS test only
*/
+ // TODO(b/144036594): add @TestApi
public void getTxPacketCount(@NonNull TxPacketCountListener listener) {
if (listener == null) throw new IllegalArgumentException("listener cannot be null");
Binder binder = new Binder();
@@ -3134,10 +3204,12 @@
}
/**
- * Method that triggers a notification to the user about a conversion to their saved AP config.
+ * Method that triggers a notification to the user about a band conversion
+ * (e.g. 5 GHz to 2.4 GHz) to their saved AP config.
*
* @hide
*/
+ // TODO(b/144218444): move the notification to Settings instead of making this @SystemApi
@RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
public void notifyUserOfApBandConversion() {
Log.d(TAG, "apBand was converted, notify the user");
@@ -3371,22 +3443,21 @@
/**
* Called when soft AP state changes.
*
- * @param state new new AP state. One of {@link #WIFI_AP_STATE_DISABLED},
+ * @param state the new AP state. One of {@link #WIFI_AP_STATE_DISABLED},
* {@link #WIFI_AP_STATE_DISABLING}, {@link #WIFI_AP_STATE_ENABLED},
* {@link #WIFI_AP_STATE_ENABLING}, {@link #WIFI_AP_STATE_FAILED}
* @param failureReason reason when in failed state. One of
* {@link #SAP_START_FAILURE_GENERAL},
* {@link #SAP_START_FAILURE_NO_CHANNEL}
*/
- void onStateChanged(@WifiApState int state,
- @SapStartFailure int failureReason);
+ default void onStateChanged(@WifiApState int state, @SapStartFailure int failureReason) {}
/**
* Called when the connected clients to soft AP changes.
*
* @param clients the currently connected clients
*/
- void onConnectedClientsChanged(@NonNull List<WifiClient> clients);
+ default void onConnectedClientsChanged(@NonNull List<WifiClient> clients) {}
/**
* Called when information of softap changes.
@@ -3452,31 +3523,42 @@
}
/**
+ * Same as {@link #registerSoftApCallback(Executor, SoftApCallback)},
+ * except that the callback will be executed on the application's main thread.
+ * @param callback Callback for soft AP events
+ * @hide
+ */
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
+ public void registerSoftApCallback(@NonNull SoftApCallback callback) {
+ registerSoftApCallback(mContext.getMainExecutor(), callback);
+ }
+
+ /**
* Registers a callback for Soft AP. See {@link SoftApCallback}. Caller will receive the current
* soft AP state and number of connected devices immediately after a successful call to this API
* via callback. Note that receiving an immediate WIFI_AP_STATE_FAILED value for soft AP state
* indicates that the latest attempt to start soft AP has failed. Caller can unregister a
- * previously registered callback using {@link unregisterSoftApCallback}
+ * previously registered callback using {@link #unregisterSoftApCallback}
* <p>
* Applications should have the
* {@link android.Manifest.permission#NETWORK_SETTINGS NETWORK_SETTINGS} permission. Callers
* without the permission will trigger a {@link java.lang.SecurityException}.
* <p>
*
- * @param executor The executor to execute the callbacks of the {@code executor}
- * object. If null, then the application's main executor will be used.
+ * @param executor The Executor on whose thread to execute the callbacks of the {@code callback}
+ * object.
* @param callback Callback for soft AP events
- *
* @hide
*/
@SystemApi
@RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
- public void registerSoftApCallback(@Nullable @CallbackExecutor Executor executor,
- @NonNull SoftApCallback callback) {
+ public void registerSoftApCallback(@NonNull @CallbackExecutor Executor executor,
+ @NonNull SoftApCallback callback) {
+ if (executor == null) throw new IllegalArgumentException("executor cannot be null");
if (callback == null) throw new IllegalArgumentException("callback cannot be null");
Log.v(TAG, "registerSoftApCallback: callback=" + callback + ", executor=" + executor);
- executor = (executor == null) ? mContext.getMainExecutor() : executor;
Binder binder = new Binder();
try {
IWifiManager iWifiManager = getIWifiManager();
@@ -3498,6 +3580,7 @@
*
* @hide
*/
+ @SystemApi
@RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
public void unregisterSoftApCallback(@NonNull SoftApCallback callback) {
if (callback == null) throw new IllegalArgumentException("callback cannot be null");
@@ -4042,23 +4125,27 @@
}
/**
- * Disable ephemeral Network
+ * Disable an ephemeral network.
*
- * @param SSID, in the format of WifiConfiguration's SSID.
+ * @param ssid in the format of WifiConfiguration's SSID.
+ *
* @hide
*/
+ @SystemApi
@RequiresPermission(anyOf = {
android.Manifest.permission.NETWORK_SETTINGS,
android.Manifest.permission.NETWORK_STACK
})
- public void disableEphemeralNetwork(String SSID) {
- if (TextUtils.isEmpty(SSID)) throw new IllegalArgumentException("SSID cannot be null");
+ public void disableEphemeralNetwork(@NonNull String ssid) {
+ if (TextUtils.isEmpty(ssid)) {
+ throw new IllegalArgumentException("SSID cannot be null or empty!");
+ }
try {
IWifiManager iWifiManager = getIWifiManager();
if (iWifiManager == null) {
throw new RemoteException("Wifi service is not running");
}
- iWifiManager.disableEphemeralNetwork(SSID, mContext.getOpPackageName());
+ iWifiManager.disableEphemeralNetwork(ssid, mContext.getOpPackageName());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -4554,11 +4641,15 @@
}
/**
- * Set wifi verbose log. Called from developer settings.
+ * Set Wi-Fi verbose logging level from developer settings.
+ *
+ * @param verbose the verbose logging level to set. 0 will disable verbose logging, a positive
+ * integer will enable verbose logging.
+ *
* @hide
*/
+ @SystemApi
@RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
- @UnsupportedAppUsage
public void enableVerboseLogging (int verbose) {
try {
IWifiManager iWifiManager = getIWifiManager();
@@ -4574,11 +4665,15 @@
}
/**
- * Get the WiFi verbose logging level.This is used by settings
- * to decide what to show within the picker.
+ * Get the persisted WiFi verbose logging level, set by {@link #enableVerboseLogging(int)}.
+ * No permissions are required to call this method.
+ *
+ * @return 0 to indicate that verbose logging is disabled, a positive integer to indicate that
+ * verbose logging is enabled.
+ *
* @hide
*/
- @UnsupportedAppUsage
+ @SystemApi
public int getVerboseLoggingLevel() {
try {
IWifiManager iWifiManager = getIWifiManager();
@@ -4590,10 +4685,13 @@
}
/**
- * Removes all saved wifi networks.
+ * Removes all saved Wi-Fi networks, Passpoint configurations, ephemeral networks, Network
+ * Requests, and Network Suggestions.
*
* @hide
*/
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL)
public void factoryReset() {
try {
IWifiManager iWifiManager = getIWifiManager();
@@ -4607,11 +4705,12 @@
}
/**
- * Get Network object of current wifi network
- * @return Get Network object of current wifi network
+ * Get {@link Network} object of current wifi network, or null if not connected.
* @hide
*/
- @UnsupportedAppUsage
+ @Nullable
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE)
public Network getCurrentNetwork() {
try {
IWifiManager iWifiManager = getIWifiManager();
@@ -4660,13 +4759,18 @@
}
/**
- * Retrieve the data to be backed to save the current state.
+ * Returns a byte stream representing the data that needs to be backed up to save the
+ * current Wifi state.
+ * This Wifi state can be restored by calling {@link #restoreBackupData(byte[])}.
* @hide
*/
+ @NonNull
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
public byte[] retrieveBackupData() {
try {
IWifiManager iWifiManager = getIWifiManager();
- if (iWifiManager == null) return null;
+ if (iWifiManager == null) return new byte[0];
return iWifiManager.retrieveBackupData();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
@@ -4675,9 +4779,12 @@
/**
* Restore state from the backed up data.
+ * @param data byte stream in the same format produced by {@link #retrieveBackupData()}
* @hide
*/
- public void restoreBackupData(byte[] data) {
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
+ public void restoreBackupData(@NonNull byte[] data) {
try {
IWifiManager iWifiManager = getIWifiManager();
if (iWifiManager == null) {
@@ -4694,11 +4801,16 @@
* Restore state from the older version of back up data.
* The old backup data was essentially a backup of wpa_supplicant.conf
* and ipconfig.txt file.
+ * @param supplicantData bytes representing wpa_supplicant.conf
+ * @param ipConfigData bytes representing ipconfig.txt
* @deprecated this is no longer supported.
* @hide
*/
@Deprecated
- public void restoreSupplicantBackupData(byte[] supplicantData, byte[] ipConfigData) {
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
+ public void restoreSupplicantBackupData(
+ @NonNull byte[] supplicantData, @NonNull byte[] ipConfigData) {
try {
IWifiManager iWifiManager = getIWifiManager();
if (iWifiManager == null) {
@@ -4774,22 +4886,29 @@
}
/**
- * Base class for Traffic state callback. Should be extended by applications and set when
- * calling {@link WifiManager#registerTrafficStateCallback(TrafficStateCallback, Handler)}.
+ * Interface for Traffic state callback. Should be extended by applications and set when
+ * calling {@link #registerTrafficStateCallback(Executor, WifiManager.TrafficStateCallback)}.
* @hide
*/
+ @SystemApi
public interface TrafficStateCallback {
- /**
- * Lowest bit indicates data reception and the second lowest
- * bit indicates data transmitted
- */
/** @hide */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(prefix = {"DATA_ACTIVITY_"}, value = {
+ DATA_ACTIVITY_NONE,
+ DATA_ACTIVITY_IN,
+ DATA_ACTIVITY_OUT,
+ DATA_ACTIVITY_INOUT})
+ @interface DataActivity {}
+
+ // Lowest bit indicates data reception and the second lowest bit indicates data transmitted
+ /** No data in or out */
int DATA_ACTIVITY_NONE = 0x00;
- /** @hide */
+ /** Data in, no data out */
int DATA_ACTIVITY_IN = 0x01;
- /** @hide */
+ /** Data out, no data in */
int DATA_ACTIVITY_OUT = 0x02;
- /** @hide */
+ /** Data in and out */
int DATA_ACTIVITY_INOUT = 0x03;
/**
@@ -4797,9 +4916,8 @@
*
* @param state One of the values: {@link #DATA_ACTIVITY_NONE}, {@link #DATA_ACTIVITY_IN},
* {@link #DATA_ACTIVITY_OUT} & {@link #DATA_ACTIVITY_INOUT}.
- * @hide
*/
- void onStateChanged(int state);
+ void onStateChanged(@DataActivity int state);
}
/**
@@ -4808,11 +4926,11 @@
* @hide
*/
private class TrafficStateCallbackProxy extends ITrafficStateCallback.Stub {
- private final Handler mHandler;
+ private final Executor mExecutor;
private final TrafficStateCallback mCallback;
- TrafficStateCallbackProxy(Looper looper, TrafficStateCallback callback) {
- mHandler = new Handler(looper);
+ TrafficStateCallbackProxy(Executor executor, TrafficStateCallback callback) {
+ mExecutor = executor;
mCallback = callback;
}
@@ -4821,13 +4939,26 @@
if (mVerboseLoggingEnabled) {
Log.v(TAG, "TrafficStateCallbackProxy: onStateChanged state=" + state);
}
- mHandler.post(() -> {
+ Binder.clearCallingIdentity();
+ mExecutor.execute(() -> {
mCallback.onStateChanged(state);
});
}
}
/**
+ * Same as {@link #registerTrafficStateCallback(Executor, TrafficStateCallback)},
+ * except that the callback will be executed on the application's main thread.
+ * @param callback Callback for traffic state events
+ * @hide
+ */
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
+ public void registerTrafficStateCallback(@NonNull TrafficStateCallback callback) {
+ registerTrafficStateCallback(mContext.getMainExecutor(), callback);
+ }
+
+ /**
* Registers a callback for monitoring traffic state. See {@link TrafficStateCallback}. These
* callbacks will be invoked periodically by platform to inform clients about the current
* traffic state. Caller can unregister a previously registered callback using
@@ -4838,18 +4969,19 @@
* without the permission will trigger a {@link java.lang.SecurityException}.
* <p>
*
+ * @param executor The Executor on whose thread to execute the callbacks of the {@code callback}
+ * object.
* @param callback Callback for traffic state events
- * @param handler The Handler on whose thread to execute the callbacks of the {@code callback}
- * object. If null, then the application's main thread will be used.
* @hide
*/
+ @SystemApi
@RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
- public void registerTrafficStateCallback(@NonNull TrafficStateCallback callback,
- @Nullable Handler handler) {
+ public void registerTrafficStateCallback(@NonNull @CallbackExecutor Executor executor,
+ @NonNull TrafficStateCallback callback) {
+ if (executor == null) throw new IllegalArgumentException("executor cannot be null");
if (callback == null) throw new IllegalArgumentException("callback cannot be null");
- Log.v(TAG, "registerTrafficStateCallback: callback=" + callback + ", handler=" + handler);
+ Log.v(TAG, "registerTrafficStateCallback: callback=" + callback + ", executor=" + executor);
- Looper looper = (handler == null) ? mContext.getMainLooper() : handler.getLooper();
Binder binder = new Binder();
try {
IWifiManager iWifiManager = getIWifiManager();
@@ -4857,7 +4989,7 @@
throw new RemoteException("Wifi service is not running");
}
iWifiManager.registerTrafficStateCallback(
- binder, new TrafficStateCallbackProxy(looper, callback), callback.hashCode());
+ binder, new TrafficStateCallbackProxy(executor, callback), callback.hashCode());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -4870,6 +5002,7 @@
* @param callback Callback to unregister for traffic state events
* @hide
*/
+ @SystemApi
@RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
public void unregisterTrafficStateCallback(@NonNull TrafficStateCallback callback) {
if (callback == null) throw new IllegalArgumentException("callback cannot be null");
@@ -4933,11 +5066,13 @@
* if failed.
* @hide
*/
+ @NonNull
+ @SystemApi
@RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
public String[] getFactoryMacAddresses() {
try {
IWifiManager iWifiManager = getIWifiManager();
- if (iWifiManager == null) return null;
+ if (iWifiManager == null) return new String[0];
return iWifiManager.getFactoryMacAddresses();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
diff --git a/wifi/java/android/net/wifi/WifiScanner.java b/wifi/java/android/net/wifi/WifiScanner.java
index 7e14451..0d36718 100644
--- a/wifi/java/android/net/wifi/WifiScanner.java
+++ b/wifi/java/android/net/wifi/WifiScanner.java
@@ -960,6 +960,9 @@
* Retrieve the most recent scan results from a single scan request.
* {@hide}
*/
+ @NonNull
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE)
public List<ScanResult> getSingleScanResults() {
validateChannel();
Bundle scanParams = new Bundle();
@@ -973,7 +976,7 @@
OperationResult result = (OperationResult) reply.obj;
Log.e(TAG, "Error retrieving SingleScan results reason: " + result.reason
+ " description: " + result.description);
- return new ArrayList<ScanResult>();
+ return new ArrayList<>();
}
private void startPnoScan(ScanSettings scanSettings, PnoSettings pnoSettings, int key) {
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java b/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java
index c3cfb02..767055f 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java
@@ -66,12 +66,6 @@
public int groupOwnerBand = GROUP_OWNER_BAND_AUTO;
/** @hide */
- public static final int MAX_GROUP_OWNER_INTENT = 15;
- /** @hide */
- @UnsupportedAppUsage
- public static final int MIN_GROUP_OWNER_INTENT = 0;
-
- /** @hide */
@IntDef(flag = false, prefix = { "GROUP_OWNER_BAND_" }, value = {
GROUP_OWNER_BAND_AUTO,
GROUP_OWNER_BAND_2GHZ,
@@ -94,13 +88,35 @@
public static final int GROUP_OWNER_BAND_5GHZ = 2;
/**
- * This is an integer value between 0 and 15 where 0 indicates the least
- * inclination to be a group owner and 15 indicates the highest inclination
- * to be a group owner.
- *
- * A value of -1 indicates the system can choose an appropriate value.
+ * The least inclination to be a group owner, to be filled in the field
+ * {@link #groupOwnerIntent}.
*/
- public int groupOwnerIntent = -1;
+ public static final int GROUP_OWNER_INTENT_MIN = 0;
+
+ /**
+ * The most inclination to be a group owner, to be filled in the field
+ * {@link #groupOwnerIntent}.
+ */
+ public static final int GROUP_OWNER_INTENT_MAX = 15;
+
+ /**
+ * The system can choose an appropriate owner intent value, to be filled in the field
+ * {@link #groupOwnerIntent}.
+ */
+ public static final int GROUP_OWNER_INTENT_AUTO = -1;
+
+ /**
+ * This is an integer value between {@link #GROUP_OWNER_INTENT_MIN} and
+ * {@link #GROUP_OWNER_INTENT_MAX} where
+ * {@link #GROUP_OWNER_INTENT_MIN} indicates the least inclination to be a group owner and
+ * {@link #GROUP_OWNER_INTENT_MAX} indicates the highest inclination to be a group owner.
+ *
+ * A value of {@link #GROUP_OWNER_INTENT_AUTO} indicates the system can choose an appropriate
+ * value.
+ *
+ * By default this field is set to {@link #GROUP_OWNER_INTENT_AUTO}.
+ */
+ public int groupOwnerIntent = GROUP_OWNER_INTENT_AUTO;
/** @hide */
@UnsupportedAppUsage
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java b/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java
index c5318a9..13b2520 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java
@@ -16,6 +16,8 @@
package android.net.wifi.p2p;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -237,6 +239,12 @@
}
}
+ /** The Wifi Display information for this device, or null if unavailable. */
+ @Nullable
+ public WifiP2pWfdInfo getWfdInfo() {
+ return wfdInfo;
+ }
+
/** Returns true if WPS push button configuration is supported */
public boolean wpsPbcSupported() {
return (wpsConfigMethodsSupported & WPS_CONFIG_PUSHBUTTON) != 0;
@@ -278,14 +286,15 @@
}
/**
- * Update device details. This will be throw an exception if the device address
- * does not match.
+ * Update device details. This will throw an exception if the device address does not match.
+ *
* @param device to be updated
- * @throws IllegalArgumentException if the device is null or device address does not match
+ * @throws IllegalArgumentException if the device is null or the device address does not match
+ *
* @hide
*/
@UnsupportedAppUsage
- public void update(WifiP2pDevice device) {
+ public void update(@NonNull WifiP2pDevice device) {
updateSupplicantDetails(device);
status = device.status;
}
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pGroup.java b/wifi/java/android/net/wifi/p2p/WifiP2pGroup.java
index 4866bd4..f9d1266 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pGroup.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pGroup.java
@@ -16,6 +16,7 @@
package android.net.wifi.p2p;
+import android.annotation.Nullable;
import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -36,15 +37,21 @@
*/
public class WifiP2pGroup implements Parcelable {
- /** The temporary network id.
- * {@hide} */
+ /**
+ * The temporary network id.
+ *
+ * @hide
+ */
@UnsupportedAppUsage
public static final int TEMPORARY_NET_ID = -1;
- /** The persistent network id.
+ /**
+ * The persistent network id.
* If a matching persistent profile is found, use it.
* Otherwise, create a new persistent profile.
- * {@hide} */
+ *
+ * @hide
+ */
public static final int PERSISTENT_NET_ID = -2;
/** The network name */
@@ -64,7 +71,7 @@
private String mInterface;
- /** The network id in the wpa_supplicant */
+ /** The network ID in wpa_supplicant */
private int mNetId;
/** The frequency (in MHz) used by this group */
@@ -225,10 +232,13 @@
return mClients.size() == 0;
}
- /** @hide Returns {@code true} if the device is part of the group */
- public boolean contains(WifiP2pDevice device) {
- if (mOwner.equals(device) || mClients.contains(device)) return true;
- return false;
+ /**
+ * Returns {@code true} if the device is part of the group, {@code false} otherwise.
+ *
+ * @hide
+ */
+ public boolean contains(@Nullable WifiP2pDevice device) {
+ return mOwner.equals(device) || mClients.contains(device);
}
/** Get the list of clients currently part of the p2p group */
@@ -261,8 +271,7 @@
return mInterface;
}
- /** @hide */
- @UnsupportedAppUsage
+ /** The network ID of the P2P group in wpa_supplicant. */
public int getNetworkId() {
return mNetId;
}
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java b/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java
index 62524d9..10fd09a 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java
@@ -15,14 +15,16 @@
*/
package android.net.wifi.p2p;
-import java.util.Collection;
-import java.util.Map;
-
+import android.annotation.NonNull;
+import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.LruCache;
+import java.util.Collection;
+import java.util.Map;
+
/**
* A class representing a Wi-Fi P2p group list
@@ -30,7 +32,8 @@
* {@see WifiP2pManager}
* @hide
*/
-public class WifiP2pGroupList implements Parcelable {
+@SystemApi
+public final class WifiP2pGroupList implements Parcelable {
private static final int CREDENTIAL_MAX_NUM = 32;
@@ -40,6 +43,7 @@
private boolean isClearCalled = false;
+ /** @hide */
public interface GroupDeleteListener {
public void onDeleteGroup(int netId);
}
@@ -71,11 +75,9 @@
}
/**
- * Return the list of p2p group.
- *
- * @return the list of p2p group.
+ * Get the list of P2P groups.
*/
- @UnsupportedAppUsage
+ @NonNull
public Collection<WifiP2pGroup> getGroupList() {
return mGroups.snapshot().values();
}
@@ -206,6 +208,7 @@
return false;
}
+ @Override
public String toString() {
StringBuffer sbuf = new StringBuffer();
@@ -217,12 +220,14 @@
}
/** Implement the Parcelable interface */
+ @Override
public int describeContents() {
return 0;
}
/** Implement the Parcelable interface */
- public void writeToParcel(Parcel dest, int flags) {
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
final Collection<WifiP2pGroup> groups = mGroups.snapshot().values();
dest.writeInt(groups.size());
for(WifiP2pGroup group : groups) {
@@ -231,7 +236,7 @@
}
/** Implement the Parcelable interface */
- public static final @android.annotation.NonNull Creator<WifiP2pGroupList> CREATOR =
+ public static final @NonNull Creator<WifiP2pGroupList> CREATOR =
new Creator<WifiP2pGroupList>() {
public WifiP2pGroupList createFromParcel(Parcel in) {
WifiP2pGroupList grpList = new WifiP2pGroupList();
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pManager.java b/wifi/java/android/net/wifi/p2p/WifiP2pManager.java
index 3178519..1c20679 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pManager.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pManager.java
@@ -22,6 +22,7 @@
import android.annotation.RequiresPermission;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
+import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.annotation.UnsupportedAppUsage;
import android.content.Context;
@@ -327,8 +328,9 @@
* Broadcast intent action indicating that remembered persistent groups have changed.
* @hide
*/
- public static final String WIFI_P2P_PERSISTENT_GROUPS_CHANGED_ACTION =
- "android.net.wifi.p2p.PERSISTENT_GROUPS_CHANGED";
+ @SystemApi
+ public static final String ACTION_WIFI_P2P_PERSISTENT_GROUPS_CHANGED =
+ "android.net.wifi.p2p.action.WIFI_P2P_PERSISTENT_GROUPS_CHANGED";
/**
* The lookup key for a handover message returned by the WifiP2pService.
@@ -756,13 +758,18 @@
}
- /** Interface for callback invocation when stored group info list is available {@hide}*/
+ /**
+ * Interface for callback invocation when stored group info list is available
+ *
+ * @hide
+ */
+ @SystemApi
public interface PersistentGroupInfoListener {
/**
* The requested stored p2p group info list is available
* @param groups Wi-Fi p2p group info list
*/
- public void onPersistentGroupInfoAvailable(WifiP2pGroupList groups);
+ void onPersistentGroupInfoAvailable(@NonNull WifiP2pGroupList groups);
}
/**
@@ -1202,7 +1209,7 @@
c.mAsyncChannel.sendMessage(DISCOVER_PEERS, 0, c.putListener(listener));
}
- /**
+ /**
* Stop an ongoing peer discovery
*
* <p> The function call immediately returns after sending a stop request
@@ -1347,20 +1354,36 @@
*
* @hide
*/
+ @SystemApi
@RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
- public void listen(Channel c, boolean enable, ActionListener listener) {
+ public void listen(@NonNull Channel c, boolean enable, @Nullable ActionListener listener) {
checkChannel(c);
c.mAsyncChannel.sendMessage(enable ? START_LISTEN : STOP_LISTEN,
0, c.putListener(listener));
}
- /** @hide */
- @UnsupportedAppUsage
- public void setWifiP2pChannels(Channel c, int lc, int oc, ActionListener listener) {
+ /**
+ * Set P2P listening and operating channel.
+ *
+ * @param c is the channel created at {@link #initialize}
+ * @param listeningChannel the listening channel's Wifi channel number. e.g. 1, 6, 11.
+ * @param operatingChannel the operating channel's Wifi channel number. e.g. 1, 6, 11.
+ * @param listener for callbacks on success or failure. Can be null.
+ *
+ * @hide
+ */
+ @SystemApi
+ @RequiresPermission(anyOf = {
+ android.Manifest.permission.NETWORK_SETTINGS,
+ android.Manifest.permission.NETWORK_STACK,
+ android.Manifest.permission.OVERRIDE_WIFI_CONFIG
+ })
+ public void setWifiP2pChannels(@NonNull Channel c, int listeningChannel, int operatingChannel,
+ @Nullable ActionListener listener) {
checkChannel(c);
Bundle p2pChannels = new Bundle();
- p2pChannels.putInt("lc", lc);
- p2pChannels.putInt("oc", oc);
+ p2pChannels.putInt("lc", listeningChannel);
+ p2pChannels.putInt("oc", operatingChannel);
c.mAsyncChannel.sendMessage(SET_CHANNEL, 0, c.putListener(listener), p2pChannels);
}
@@ -1618,23 +1641,47 @@
/**
* Set p2p device name.
- * @hide
+ *
* @param c is the channel created at {@link #initialize}
* @param listener for callback when group info is available. Can be null.
+ *
+ * @hide
*/
- @UnsupportedAppUsage
- public void setDeviceName(Channel c, String devName, ActionListener listener) {
+ @SystemApi
+ @RequiresPermission(anyOf = {
+ android.Manifest.permission.NETWORK_SETTINGS,
+ android.Manifest.permission.NETWORK_STACK,
+ android.Manifest.permission.OVERRIDE_WIFI_CONFIG
+ })
+ public void setDeviceName(@NonNull Channel c, @NonNull String devName,
+ @Nullable ActionListener listener) {
checkChannel(c);
WifiP2pDevice d = new WifiP2pDevice();
d.deviceName = devName;
c.mAsyncChannel.sendMessage(SET_DEVICE_NAME, 0, c.putListener(listener), d);
}
+ /**
+ * Set Wifi Display information.
+ *
+ * @param c is the channel created at {@link #initialize}
+ * @param wfdInfo the Wifi Display information to set
+ * @param listener for callbacks on success or failure. Can be null.
+ *
+ * @hide
+ */
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.CONFIGURE_WIFI_DISPLAY)
+ public void setWfdInfo(@NonNull Channel c, @NonNull WifiP2pWfdInfo wfdInfo,
+ @Nullable ActionListener listener) {
+ setWFDInfo(c, wfdInfo, listener);
+ }
+
/** @hide */
@UnsupportedAppUsage
- public void setWFDInfo(
- Channel c, WifiP2pWfdInfo wfdInfo,
- ActionListener listener) {
+ @RequiresPermission(android.Manifest.permission.CONFIGURE_WIFI_DISPLAY)
+ public void setWFDInfo(@NonNull Channel c, @NonNull WifiP2pWfdInfo wfdInfo,
+ @Nullable ActionListener listener) {
checkChannel(c);
try {
mService.checkConfigureWifiDisplayPermission();
@@ -1658,12 +1705,19 @@
* a network id can be obtained by {@link WifiP2pGroup#getNetworkId()}.
*
* @param c is the channel created at {@link #initialize}
- * @param netId he network id of the p2p group.
+ * @param netId the network id of the p2p group.
* @param listener for callbacks on success or failure. Can be null.
+ *
* @hide
*/
- @UnsupportedAppUsage
- public void deletePersistentGroup(Channel c, int netId, ActionListener listener) {
+ @SystemApi
+ @RequiresPermission(anyOf = {
+ android.Manifest.permission.NETWORK_SETTINGS,
+ android.Manifest.permission.NETWORK_STACK,
+ android.Manifest.permission.OVERRIDE_WIFI_CONFIG
+ })
+ public void deletePersistentGroup(@NonNull Channel c, int netId,
+ @Nullable ActionListener listener) {
checkChannel(c);
c.mAsyncChannel.sendMessage(DELETE_PERSISTENT_GROUP, netId, c.putListener(listener));
}
@@ -1673,23 +1727,68 @@
*
* @param c is the channel created at {@link #initialize}
* @param listener for callback when persistent group info list is available. Can be null.
+ *
* @hide
*/
- @UnsupportedAppUsage
- public void requestPersistentGroupInfo(Channel c, PersistentGroupInfoListener listener) {
+ @SystemApi
+ @RequiresPermission(anyOf = {
+ android.Manifest.permission.NETWORK_SETTINGS,
+ android.Manifest.permission.NETWORK_STACK,
+ android.Manifest.permission.READ_WIFI_CREDENTIAL
+ })
+ public void requestPersistentGroupInfo(@NonNull Channel c,
+ @Nullable PersistentGroupInfoListener listener) {
checkChannel(c);
c.mAsyncChannel.sendMessage(REQUEST_PERSISTENT_GROUP_INFO, 0, c.putListener(listener));
}
/** @hide */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(prefix = {"MIRACAST_"}, value = {
+ MIRACAST_DISABLED,
+ MIRACAST_SOURCE,
+ MIRACAST_SINK})
+ public @interface MiracastMode {}
+
+ /**
+ * Miracast is disabled.
+ * @hide
+ */
+ @SystemApi
public static final int MIRACAST_DISABLED = 0;
- /** @hide */
+ /**
+ * Device acts as a Miracast source.
+ * @hide
+ */
+ @SystemApi
public static final int MIRACAST_SOURCE = 1;
- /** @hide */
+ /**
+ * Device acts as a Miracast sink.
+ * @hide
+ */
+ @SystemApi
public static final int MIRACAST_SINK = 2;
- /** Internal use only @hide */
- @UnsupportedAppUsage
- public void setMiracastMode(int mode) {
+
+ /**
+ * This is used to provide information to drivers to optimize performance depending
+ * on the current mode of operation.
+ * {@link #MIRACAST_DISABLED} - disabled
+ * {@link #MIRACAST_SOURCE} - source operation
+ * {@link #MIRACAST_SINK} - sink operation
+ *
+ * As an example, the driver could reduce the channel dwell time during scanning
+ * when acting as a source or sink to minimize impact on Miracast.
+ *
+ * @param mode mode of operation. One of {@link #MIRACAST_DISABLED}, {@link #MIRACAST_SOURCE},
+ * or {@link #MIRACAST_SINK}
+ *
+ * @hide
+ */
+ @SystemApi
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.CONNECTIVITY_INTERNAL,
+ android.Manifest.permission.CONFIGURE_WIFI_DISPLAY})
+ public void setMiracastMode(@MiracastMode int mode) {
try {
mService.setMiracastMode(mode);
} catch (RemoteException e) {
@@ -1778,8 +1877,10 @@
*
* @param c is the channel created at {@link #initialize}.
* @param listener for callback on success or failure. Can be null.
+ *
* @hide
*/
+ @SystemApi
@RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
public void factoryReset(@NonNull Channel c, @Nullable ActionListener listener) {
checkChannel(c);
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pWfdInfo.java b/wifi/java/android/net/wifi/p2p/WifiP2pWfdInfo.java
index 3caa280..48b0703 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pWfdInfo.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pWfdInfo.java
@@ -16,49 +16,68 @@
package android.net.wifi.p2p;
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.UnsupportedAppUsage;
-import android.os.Build;
-import android.os.Parcelable;
import android.os.Parcel;
+import android.os.Parcelable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.Locale;
/**
- * A class representing Wifi Display information for a device
- * @hide
+ * A class representing Wifi Display information for a device.
+ *
+ * See Wifi Display technical specification v1.0.0, section 5.1.2.
*/
-public class WifiP2pWfdInfo implements Parcelable {
-
- private static final String TAG = "WifiP2pWfdInfo";
+public final class WifiP2pWfdInfo implements Parcelable {
private boolean mWfdEnabled;
+ /** Device information bitmap */
private int mDeviceInfo;
- public static final int WFD_SOURCE = 0;
- public static final int PRIMARY_SINK = 1;
- public static final int SECONDARY_SINK = 2;
- public static final int SOURCE_OR_PRIMARY_SINK = 3;
+ /** @hide */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(prefix = { "DEVICE_TYPE_" }, value = {
+ DEVICE_TYPE_WFD_SOURCE,
+ DEVICE_TYPE_PRIMARY_SINK,
+ DEVICE_TYPE_SECONDARY_SINK,
+ DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK})
+ public @interface DeviceType {}
- /* Device information bitmap */
- /** One of {@link #WFD_SOURCE}, {@link #PRIMARY_SINK}, {@link #SECONDARY_SINK}
- * or {@link #SOURCE_OR_PRIMARY_SINK}
+ /** The device is a Wifi Display Source. */
+ public static final int DEVICE_TYPE_WFD_SOURCE = 0;
+ /** The device is a primary sink. */
+ public static final int DEVICE_TYPE_PRIMARY_SINK = 1;
+ /** The device is a secondary sink. */
+ public static final int DEVICE_TYPE_SECONDARY_SINK = 2;
+ /** The device is dual-role capable i.e. either a WFD source or a primary sink. */
+ public static final int DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK = 3;
+
+ /**
+ * {@link #mDeviceInfo} & {@link #DEVICE_TYPE} is one of {@link #DEVICE_TYPE_WFD_SOURCE},
+ * {@link #DEVICE_TYPE_PRIMARY_SINK}, {@link #DEVICE_TYPE_SECONDARY_SINK} or
+ * {@link #DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK}.
*/
- private static final int DEVICE_TYPE = 0x3;
- private static final int COUPLED_SINK_SUPPORT_AT_SOURCE = 0x4;
- private static final int COUPLED_SINK_SUPPORT_AT_SINK = 0x8;
- private static final int SESSION_AVAILABLE = 0x30;
- private static final int SESSION_AVAILABLE_BIT1 = 0x10;
- private static final int SESSION_AVAILABLE_BIT2 = 0x20;
+ private static final int DEVICE_TYPE = 1 << 1 | 1 << 0;
+ private static final int COUPLED_SINK_SUPPORT_AT_SOURCE = 1 << 2;
+ private static final int COUPLED_SINK_SUPPORT_AT_SINK = 1 << 3;
+ private static final int SESSION_AVAILABLE_BIT1 = 1 << 4;
+ private static final int SESSION_AVAILABLE_BIT2 = 1 << 5;
+ private static final int SESSION_AVAILABLE =
+ SESSION_AVAILABLE_BIT2 | SESSION_AVAILABLE_BIT1;
private int mCtrlPort;
private int mMaxThroughput;
- @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
- public WifiP2pWfdInfo() {
- }
+ /** Default constructor. */
+ public WifiP2pWfdInfo() {}
+ /** @hide */
@UnsupportedAppUsage
public WifiP2pWfdInfo(int devInfo, int ctrlPort, int maxTput) {
mWfdEnabled = true;
@@ -67,24 +86,40 @@
mMaxThroughput = maxTput;
}
- @UnsupportedAppUsage
+ /** Returns true is Wifi Display is enabled, false otherwise. */
public boolean isWfdEnabled() {
return mWfdEnabled;
}
- @UnsupportedAppUsage
+ /**
+ * Sets whether Wifi Display should be enabled.
+ *
+ * @param enabled true to enable Wifi Display, false to disable
+ */
public void setWfdEnabled(boolean enabled) {
mWfdEnabled = enabled;
}
- @UnsupportedAppUsage
+ /**
+ * Get the type of the device.
+ * One of {@link #DEVICE_TYPE_WFD_SOURCE}, {@link #DEVICE_TYPE_PRIMARY_SINK},
+ * {@link #DEVICE_TYPE_SECONDARY_SINK}, {@link #DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK}
+ */
+ @DeviceType
public int getDeviceType() {
- return (mDeviceInfo & DEVICE_TYPE);
+ return mDeviceInfo & DEVICE_TYPE;
}
- @UnsupportedAppUsage
- public boolean setDeviceType(int deviceType) {
- if (deviceType >= WFD_SOURCE && deviceType <= SOURCE_OR_PRIMARY_SINK) {
+ /**
+ * Sets the type of the device.
+ *
+ * @param deviceType One of {@link #DEVICE_TYPE_WFD_SOURCE}, {@link #DEVICE_TYPE_PRIMARY_SINK},
+ * {@link #DEVICE_TYPE_SECONDARY_SINK}, {@link #DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK}
+ * @return true if the device type was successfully set, false otherwise
+ */
+ public boolean setDeviceType(@DeviceType int deviceType) {
+ if (DEVICE_TYPE_WFD_SOURCE <= deviceType
+ && deviceType <= DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK) {
mDeviceInfo &= ~DEVICE_TYPE;
mDeviceInfo |= deviceType;
return true;
@@ -92,35 +127,16 @@
return false;
}
- public boolean isCoupledSinkSupportedAtSource() {
- return (mDeviceInfo & COUPLED_SINK_SUPPORT_AT_SINK) != 0;
- }
-
- public void setCoupledSinkSupportAtSource(boolean enabled) {
- if (enabled ) {
- mDeviceInfo |= COUPLED_SINK_SUPPORT_AT_SINK;
- } else {
- mDeviceInfo &= ~COUPLED_SINK_SUPPORT_AT_SINK;
- }
- }
-
- public boolean isCoupledSinkSupportedAtSink() {
- return (mDeviceInfo & COUPLED_SINK_SUPPORT_AT_SINK) != 0;
- }
-
- public void setCoupledSinkSupportAtSink(boolean enabled) {
- if (enabled ) {
- mDeviceInfo |= COUPLED_SINK_SUPPORT_AT_SINK;
- } else {
- mDeviceInfo &= ~COUPLED_SINK_SUPPORT_AT_SINK;
- }
- }
-
+ /** Returns true if a session is available, false otherwise. */
public boolean isSessionAvailable() {
return (mDeviceInfo & SESSION_AVAILABLE) != 0;
}
- @UnsupportedAppUsage
+ /**
+ * Sets whether a session is available.
+ *
+ * @param enabled true to indicate that a session is available, false otherwise.
+ */
public void setSessionAvailable(boolean enabled) {
if (enabled) {
mDeviceInfo |= SESSION_AVAILABLE_BIT1;
@@ -130,29 +146,33 @@
}
}
+ /** Returns the TCP port at which the WFD Device listens for RTSP messages. */
public int getControlPort() {
return mCtrlPort;
}
- @UnsupportedAppUsage
+ /** Sets the TCP port at which the WFD Device listens for RTSP messages. */
public void setControlPort(int port) {
mCtrlPort = port;
}
- @UnsupportedAppUsage
+ /** Sets the maximum average throughput capability of the WFD Device, in megabits/second. */
public void setMaxThroughput(int maxThroughput) {
mMaxThroughput = maxThroughput;
}
+ /** Returns the maximum average throughput capability of the WFD Device, in megabits/second. */
public int getMaxThroughput() {
return mMaxThroughput;
}
+ /** @hide */
public String getDeviceInfoHex() {
return String.format(
Locale.US, "%04x%04x%04x", mDeviceInfo, mCtrlPort, mMaxThroughput);
}
+ @Override
public String toString() {
StringBuffer sbuf = new StringBuffer();
sbuf.append("WFD enabled: ").append(mWfdEnabled);
@@ -167,9 +187,8 @@
return 0;
}
- /** copy constructor */
- @UnsupportedAppUsage
- public WifiP2pWfdInfo(WifiP2pWfdInfo source) {
+ /** Copy constructor. */
+ public WifiP2pWfdInfo(@Nullable WifiP2pWfdInfo source) {
if (source != null) {
mWfdEnabled = source.mWfdEnabled;
mDeviceInfo = source.mDeviceInfo;
@@ -179,14 +198,15 @@
}
/** Implement the Parcelable interface */
- public void writeToParcel(Parcel dest, int flags) {
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeInt(mWfdEnabled ? 1 : 0);
dest.writeInt(mDeviceInfo);
dest.writeInt(mCtrlPort);
dest.writeInt(mMaxThroughput);
}
- public void readFromParcel(Parcel in) {
+ private void readFromParcel(Parcel in) {
mWfdEnabled = (in.readInt() == 1);
mDeviceInfo = in.readInt();
mCtrlPort = in.readInt();
@@ -194,8 +214,7 @@
}
/** Implement the Parcelable interface */
- @UnsupportedAppUsage
- public static final @android.annotation.NonNull Creator<WifiP2pWfdInfo> CREATOR =
+ public static final @NonNull Creator<WifiP2pWfdInfo> CREATOR =
new Creator<WifiP2pWfdInfo>() {
public WifiP2pWfdInfo createFromParcel(Parcel in) {
WifiP2pWfdInfo device = new WifiP2pWfdInfo();
diff --git a/wifi/tests/src/android/net/wifi/WifiManagerTest.java b/wifi/tests/src/android/net/wifi/WifiManagerTest.java
index 6305277..06ebc1b 100644
--- a/wifi/tests/src/android/net/wifi/WifiManagerTest.java
+++ b/wifi/tests/src/android/net/wifi/WifiManagerTest.java
@@ -709,6 +709,18 @@
}
/**
+ * Verify an IllegalArgumentException is thrown if executor is null.
+ */
+ @Test
+ public void registerSoftApCallbackThrowsIllegalArgumentExceptionOnNullArgumentForExecutor() {
+ try {
+ mWifiManager.registerSoftApCallback(null, mSoftApCallback);
+ fail("expected IllegalArgumentException");
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ /**
* Verify an IllegalArgumentException is thrown if callback is not provided.
*/
@Test
@@ -724,9 +736,10 @@
* Verify main looper is used when handler is not provided.
*/
@Test
- public void registerSoftApCallbackUsesMainLooperOnNullArgumentForHandler() {
- when(mContext.getMainLooper()).thenReturn(mLooper.getLooper());
- mWifiManager.registerSoftApCallback(null, mSoftApCallback);
+ public void registerSoftApCallbackUsesMainExecutorOnNoExecutorProvided() {
+ when(mContext.getMainExecutor()).thenReturn(
+ new HandlerExecutor(new Handler(mLooper.getLooper())));
+ mWifiManager.registerSoftApCallback(mSoftApCallback);
verify(mContext).getMainExecutor();
}
@@ -1147,10 +1160,11 @@
@Test
public void registerTrafficStateCallbackUsesMainLooperOnNullArgumentForHandler()
throws Exception {
- when(mContext.getMainLooper()).thenReturn(mLooper.getLooper());
+ when(mContext.getMainExecutor()).thenReturn(
+ new HandlerExecutor(new Handler(mLooper.getLooper())));
ArgumentCaptor<ITrafficStateCallback.Stub> callbackCaptor =
ArgumentCaptor.forClass(ITrafficStateCallback.Stub.class);
- mWifiManager.registerTrafficStateCallback(mTrafficStateCallback, null);
+ mWifiManager.registerTrafficStateCallback(mTrafficStateCallback);
verify(mWifiService).registerTrafficStateCallback(
any(IBinder.class), callbackCaptor.capture(), anyInt());
@@ -1166,7 +1180,8 @@
@Test
public void unregisterTrafficStateCallbackCallGoesToWifiServiceImpl() throws Exception {
ArgumentCaptor<Integer> callbackIdentifier = ArgumentCaptor.forClass(Integer.class);
- mWifiManager.registerTrafficStateCallback(mTrafficStateCallback, mHandler);
+ mWifiManager.registerTrafficStateCallback(new HandlerExecutor(mHandler),
+ mTrafficStateCallback);
verify(mWifiService).registerTrafficStateCallback(any(IBinder.class),
any(ITrafficStateCallback.Stub.class), callbackIdentifier.capture());
@@ -1182,7 +1197,8 @@
public void trafficStateCallbackProxyCallsOnMultipleUpdates() throws Exception {
ArgumentCaptor<ITrafficStateCallback.Stub> callbackCaptor =
ArgumentCaptor.forClass(ITrafficStateCallback.Stub.class);
- mWifiManager.registerTrafficStateCallback(mTrafficStateCallback, mHandler);
+ mWifiManager.registerTrafficStateCallback(new HandlerExecutor(mHandler),
+ mTrafficStateCallback);
verify(mWifiService).registerTrafficStateCallback(
any(IBinder.class), callbackCaptor.capture(), anyInt());
@@ -1201,7 +1217,7 @@
TrafficStateCallback.DATA_ACTIVITY_OUT);
}
- /*
+ /**
* Verify client-provided callback is being called on the correct thread
*/
@Test
@@ -1210,7 +1226,8 @@
ArgumentCaptor.forClass(ITrafficStateCallback.Stub.class);
TestLooper altLooper = new TestLooper();
Handler altHandler = new Handler(altLooper.getLooper());
- mWifiManager.registerTrafficStateCallback(mTrafficStateCallback, altHandler);
+ mWifiManager.registerTrafficStateCallback(new HandlerExecutor(altHandler),
+ mTrafficStateCallback);
verify(mContext, never()).getMainLooper();
verify(mContext, never()).getMainExecutor();
verify(mWifiService).registerTrafficStateCallback(
@@ -1228,10 +1245,11 @@
@Test
public void registerNetworkRequestMatchCallbackCallGoesToWifiServiceImpl()
throws Exception {
- when(mContext.getMainLooper()).thenReturn(mLooper.getLooper());
+ when(mContext.getMainExecutor()).thenReturn(
+ new HandlerExecutor(new Handler(mLooper.getLooper())));
ArgumentCaptor<INetworkRequestMatchCallback.Stub> callbackCaptor =
ArgumentCaptor.forClass(INetworkRequestMatchCallback.Stub.class);
- mWifiManager.registerNetworkRequestMatchCallback(mNetworkRequestMatchCallback, null);
+ mWifiManager.registerNetworkRequestMatchCallback(mNetworkRequestMatchCallback);
verify(mWifiService).registerNetworkRequestMatchCallback(
any(IBinder.class), callbackCaptor.capture(), anyInt());
@@ -1265,7 +1283,8 @@
@Test
public void unregisterNetworkRequestMatchCallbackCallGoesToWifiServiceImpl() throws Exception {
ArgumentCaptor<Integer> callbackIdentifier = ArgumentCaptor.forClass(Integer.class);
- mWifiManager.registerNetworkRequestMatchCallback(mNetworkRequestMatchCallback, mHandler);
+ mWifiManager.registerNetworkRequestMatchCallback(new HandlerExecutor(mHandler),
+ mNetworkRequestMatchCallback);
verify(mWifiService).registerNetworkRequestMatchCallback(
any(IBinder.class), any(INetworkRequestMatchCallback.class),
callbackIdentifier.capture());
@@ -1282,10 +1301,11 @@
@Test
public void networkRequestUserSelectionCallbackCallGoesToWifiServiceImpl()
throws Exception {
- when(mContext.getMainLooper()).thenReturn(mLooper.getLooper());
+ when(mContext.getMainExecutor()).thenReturn(
+ new HandlerExecutor(new Handler(mLooper.getLooper())));
ArgumentCaptor<INetworkRequestMatchCallback.Stub> callbackCaptor =
ArgumentCaptor.forClass(INetworkRequestMatchCallback.Stub.class);
- mWifiManager.registerNetworkRequestMatchCallback(mNetworkRequestMatchCallback, null);
+ mWifiManager.registerNetworkRequestMatchCallback(mNetworkRequestMatchCallback);
verify(mWifiService).registerNetworkRequestMatchCallback(
any(IBinder.class), callbackCaptor.capture(), anyInt());
diff --git a/wifi/tests/src/android/net/wifi/p2p/WifiP2pWfdInfoTest.java b/wifi/tests/src/android/net/wifi/p2p/WifiP2pWfdInfoTest.java
index d2f1168..cea73ef 100644
--- a/wifi/tests/src/android/net/wifi/p2p/WifiP2pWfdInfoTest.java
+++ b/wifi/tests/src/android/net/wifi/p2p/WifiP2pWfdInfoTest.java
@@ -43,7 +43,7 @@
@Before
public void setUp() {
// initialize device info flags.
- mSourceInfo.setDeviceType(WifiP2pWfdInfo.WFD_SOURCE);
+ mSourceInfo.setDeviceType(WifiP2pWfdInfo.DEVICE_TYPE_WFD_SOURCE);
mSourceInfo.setSessionAvailable(true);
}
@@ -57,14 +57,8 @@
info.setWfdEnabled(true);
assertTrue(info.isWfdEnabled());
- info.setDeviceType(WifiP2pWfdInfo.WFD_SOURCE);
- assertEquals(WifiP2pWfdInfo.WFD_SOURCE, info.getDeviceType());
-
- info.setCoupledSinkSupportAtSource(true);
- assertTrue(info.isCoupledSinkSupportedAtSource());
-
- info.setCoupledSinkSupportAtSink(true);
- assertTrue(info.isCoupledSinkSupportedAtSink());
+ info.setDeviceType(WifiP2pWfdInfo.DEVICE_TYPE_WFD_SOURCE);
+ assertEquals(WifiP2pWfdInfo.DEVICE_TYPE_WFD_SOURCE, info.getDeviceType());
info.setSessionAvailable(true);
assertTrue(info.isSessionAvailable());
@@ -75,7 +69,7 @@
info.setMaxThroughput(TEST_MAX_TPUT);
assertEquals(TEST_MAX_TPUT, info.getMaxThroughput());
- assertEquals("0018270f0400", info.getDeviceInfoHex());
+ assertEquals("0010270f0400", info.getDeviceInfoHex());
}
/**