Merge "Turn off caching temporarily until we can address some of the issues."
diff --git a/Android.mk b/Android.mk
index 7c9397f..8e8b95a 100644
--- a/Android.mk
+++ b/Android.mk
@@ -82,7 +82,6 @@
core/java/android/app/IBackupAgent.aidl \
core/java/android/app/IEphemeralResolver.aidl \
core/java/android/app/IInstrumentationWatcher.aidl \
- core/java/android/app/IOnNotificationChannelCreatedListener.aidl \
core/java/android/app/INotificationManager.aidl \
core/java/android/app/IProcessObserver.aidl \
core/java/android/app/ISearchManager.aidl \
@@ -108,6 +107,7 @@
core/java/android/app/backup/IFullBackupRestoreObserver.aidl \
core/java/android/app/backup/IRestoreObserver.aidl \
core/java/android/app/backup/IRestoreSession.aidl \
+ core/java/android/app/usage/IStorageStatsManager.aidl \
core/java/android/app/usage/IUsageStatsManager.aidl \
core/java/android/bluetooth/IBluetooth.aidl \
core/java/android/bluetooth/IBluetoothA2dp.aidl \
@@ -262,8 +262,9 @@
core/java/android/os/storage/IObbActionListener.aidl \
core/java/android/security/IKeystoreService.aidl \
core/java/android/security/keymaster/IKeyAttestationApplicationIdProvider.aidl \
- core/java/android/service/autofill/IAutoFillCallback.aidl \
+ core/java/android/service/autofill/IAutoFillAppCallback.aidl \
core/java/android/service/autofill/IAutoFillManagerService.aidl \
+ core/java/android/service/autofill/IAutoFillServerCallback.aidl \
core/java/android/service/autofill/IAutoFillService.aidl \
core/java/android/service/carrier/ICarrierService.aidl \
core/java/android/service/carrier/ICarrierMessagingCallback.aidl \
@@ -689,6 +690,8 @@
frameworks/base/core/java/android/service/notification/StatusBarNotification.aidl \
frameworks/base/core/java/android/service/chooser/ChooserTarget.aidl \
frameworks/base/core/java/android/speech/tts/Voice.aidl \
+ frameworks/base/core/java/android/app/usage/ExternalStorageStats.aidl \
+ frameworks/base/core/java/android/app/usage/StorageStats.aidl \
frameworks/base/core/java/android/app/usage/UsageEvents.aidl \
frameworks/base/core/java/android/app/Notification.aidl \
frameworks/base/core/java/android/app/NotificationManager.aidl \
diff --git a/api/current.txt b/api/current.txt
index b58947d..54eb234 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -284,6 +284,7 @@
field public static final int anyDensity = 16843372; // 0x101026c
field public static final int apduServiceBanner = 16843757; // 0x10103ed
field public static final int apiKey = 16843281; // 0x1010211
+ field public static final int appCategory = 16844102; // 0x1010546
field public static final int author = 16843444; // 0x10102b4
field public static final int authorities = 16842776; // 0x1010018
field public static final int autoAdvanceViewId = 16843535; // 0x101030f
@@ -584,6 +585,7 @@
field public static final int flipInterval = 16843129; // 0x1010179
field public static final int focusable = 16842970; // 0x10100da
field public static final int focusableInTouchMode = 16842971; // 0x10100db
+ field public static final int focusedByDefault = 16844101; // 0x1010545
field public static final deprecated int focusedMonthDateColor = 16843587; // 0x1010343
field public static final int font = 16844082; // 0x1010532
field public static final int fontFamily = 16843692; // 0x10103ac
@@ -2783,6 +2785,7 @@
field public static final int FEEDBACK_HAPTIC = 2; // 0x2
field public static final int FEEDBACK_SPOKEN = 1; // 0x1
field public static final int FEEDBACK_VISUAL = 8; // 0x8
+ field public static final int FLAG_ENABLE_ACCESSIBILITY_VOLUME = 128; // 0x80
field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
@@ -5393,7 +5396,6 @@
method public android.net.Uri getSound();
method public long[] getVibrationPattern();
method public boolean isAllowed();
- method public void setAllowed(boolean);
method public void setBypassDnd(boolean);
method public void setImportance(int);
method public void setLights(boolean);
@@ -5414,7 +5416,8 @@
method public void cancel(int);
method public void cancel(java.lang.String, int);
method public void cancelAll();
- method public void createNotificationChannel(android.app.NotificationChannel, android.app.NotificationManager.OnNotificationChannelCreatedListener, android.os.Handler);
+ method public void createNotificationChannel(android.app.NotificationChannel);
+ method public void createNotificationChannels(java.util.List<android.app.NotificationChannel>);
method public void deleteNotificationChannel(java.lang.String);
method public android.service.notification.StatusBarNotification[] getActiveNotifications();
method public android.app.AutomaticZenRule getAutomaticZenRule(java.lang.String);
@@ -5448,10 +5451,6 @@
field public static final int INTERRUPTION_FILTER_UNKNOWN = 0; // 0x0
}
- public static abstract interface NotificationManager.OnNotificationChannelCreatedListener {
- method public abstract void onNotificationChannelCreated(android.app.NotificationChannel);
- }
-
public static class NotificationManager.Policy implements android.os.Parcelable {
ctor public NotificationManager.Policy(int, int, int);
ctor public NotificationManager.Policy(int, int, int, int);
@@ -6135,6 +6134,7 @@
method public boolean isSecurityLoggingEnabled(android.content.ComponentName);
method public boolean isUninstallBlocked(android.content.ComponentName, java.lang.String);
method public void lockNow();
+ method public void lockNow(int);
method public void reboot(android.content.ComponentName);
method public void removeActiveAdmin(android.content.ComponentName);
method public boolean removeCrossProfileWidgetProvider(android.content.ComponentName, java.lang.String);
@@ -6251,6 +6251,7 @@
field public static final java.lang.String EXTRA_PROVISIONING_WIFI_PROXY_PORT = "android.app.extra.PROVISIONING_WIFI_PROXY_PORT";
field public static final java.lang.String EXTRA_PROVISIONING_WIFI_SECURITY_TYPE = "android.app.extra.PROVISIONING_WIFI_SECURITY_TYPE";
field public static final java.lang.String EXTRA_PROVISIONING_WIFI_SSID = "android.app.extra.PROVISIONING_WIFI_SSID";
+ field public static final int FLAG_EVICT_CE_KEY = 1; // 0x1
field public static final int FLAG_MANAGED_CAN_ACCESS_PARENT = 2; // 0x2
field public static final int FLAG_PARENT_CAN_ACCESS_MANAGED = 1; // 0x1
field public static final int KEYGUARD_DISABLE_FEATURES_ALL = 2147483647; // 0x7fffffff
@@ -6370,7 +6371,8 @@
public static class AssistStructure.ViewNode {
method public float getAlpha();
- method public int getAutoFillId();
+ method public android.view.autofill.AutoFillId getAutoFillId();
+ method public android.view.autofill.AutoFillType getAutoFillType();
method public android.app.assist.AssistStructure.ViewNode getChildAt(int);
method public int getChildCount();
method public java.lang.String getClassName();
@@ -6628,6 +6630,16 @@
field public static final android.os.Parcelable.Creator<android.app.usage.ConfigurationStats> CREATOR;
}
+ public final class ExternalStorageStats implements android.os.Parcelable {
+ method public int describeContents();
+ method public long getAudioBytes();
+ method public long getImageBytes();
+ method public long getTotalBytes();
+ method public long getVideoBytes();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.app.usage.ExternalStorageStats> CREATOR;
+ }
+
public final class NetworkStats implements java.lang.AutoCloseable {
method public void close();
method public boolean getNextBucket(android.app.usage.NetworkStats.Bucket);
@@ -6679,6 +6691,23 @@
method public abstract void onThresholdReached(int, java.lang.String);
}
+ public final class StorageStats implements android.os.Parcelable {
+ method public int describeContents();
+ method public long getCacheBytes();
+ method public long getCodeBytes();
+ method public long getDataBytes();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.app.usage.StorageStats> CREATOR;
+ }
+
+ public class StorageStatsManager {
+ method public long getFreeBytes(java.lang.String);
+ method public long getTotalBytes(java.lang.String);
+ method public android.app.usage.ExternalStorageStats queryExternalStatsForUser(java.lang.String, android.os.UserHandle);
+ method public android.app.usage.StorageStats queryStatsForUid(java.lang.String, int);
+ method public android.app.usage.StorageStats queryStatsForUser(java.lang.String, android.os.UserHandle);
+ }
+
public final class UsageEvents implements android.os.Parcelable {
method public int describeContents();
method public boolean getNextEvent(android.app.usage.UsageEvents.Event);
@@ -6759,6 +6788,7 @@
method protected android.view.View getErrorView();
method protected void prepareView(android.view.View);
method public void setAppWidget(int, android.appwidget.AppWidgetProviderInfo);
+ method public void setAsyncExecutor(java.util.concurrent.Executor);
method public void updateAppWidget(android.widget.RemoteViews);
method public void updateAppWidgetOptions(android.os.Bundle);
method public void updateAppWidgetSize(android.os.Bundle, int, int, int, int);
@@ -8172,9 +8202,14 @@
field public static final java.lang.String EXTRA_SIZE = "android.content.extra.SIZE";
field public static final int NOTIFY_SKIP_NOTIFY_FOR_DESCENDANTS = 2; // 0x2
field public static final int NOTIFY_SYNC_TO_NETWORK = 1; // 0x1
- field public static final java.lang.String QUERY_ARG_SELECTION = "android:query-selection";
- field public static final java.lang.String QUERY_ARG_SELECTION_ARGS = "android:query-selection-args";
- field public static final java.lang.String QUERY_ARG_SORT_ORDER = "android:query-sort-order";
+ field public static final java.lang.String QUERY_ARG_SORT_COLLATION = "android:query-sort-collation";
+ field public static final java.lang.String QUERY_ARG_SORT_COLUMNS = "android:query-sort-columns";
+ field public static final java.lang.String QUERY_ARG_SORT_DIRECTION = "android:query-sort-direction";
+ field public static final java.lang.String QUERY_ARG_SQL_SELECTION = "android:query-sql-selection";
+ field public static final java.lang.String QUERY_ARG_SQL_SELECTION_ARGS = "android:query-sql-selection-args";
+ field public static final java.lang.String QUERY_ARG_SQL_SORT_ORDER = "android:query-sql-sort-order";
+ field public static final int QUERY_SORT_DIRECTION_ASCENDING = 0; // 0x0
+ field public static final int QUERY_SORT_DIRECTION_DESCENDING = 1; // 0x1
field public static final java.lang.String SCHEME_ANDROID_RESOURCE = "android.resource";
field public static final java.lang.String SCHEME_CONTENT = "content";
field public static final java.lang.String SCHEME_FILE = "file";
@@ -8415,6 +8450,7 @@
field public static final java.lang.String SENSOR_SERVICE = "sensor";
field public static final java.lang.String SHORTCUT_SERVICE = "shortcut";
field public static final java.lang.String STORAGE_SERVICE = "storage";
+ field public static final java.lang.String STORAGE_STATS_SERVICE = "storagestats";
field public static final java.lang.String SYSTEM_HEALTH_SERVICE = "systemhealth";
field public static final java.lang.String TELECOM_SERVICE = "telecom";
field public static final java.lang.String TELEPHONY_SERVICE = "phone";
@@ -8428,6 +8464,7 @@
field public static final java.lang.String USER_SERVICE = "user";
field public static final java.lang.String VIBRATOR_SERVICE = "vibrator";
field public static final java.lang.String WALLPAPER_SERVICE = "wallpaper";
+ field public static final java.lang.String WIFI_AWARE_SERVICE = "wifiaware";
field public static final java.lang.String WIFI_P2P_SERVICE = "wifip2p";
field public static final java.lang.String WIFI_SERVICE = "wifi";
field public static final java.lang.String WINDOW_SERVICE = "window";
@@ -9561,7 +9598,17 @@
ctor public ApplicationInfo(android.content.pm.ApplicationInfo);
method public int describeContents();
method public void dump(android.util.Printer, java.lang.String);
+ method public static java.lang.CharSequence getCategoryTitle(android.content.Context, int);
method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager);
+ field public static final int CATEGORY_AUDIO = 1; // 0x1
+ field public static final int CATEGORY_GAME = 0; // 0x0
+ field public static final int CATEGORY_IMAGE = 3; // 0x3
+ field public static final int CATEGORY_MAPS = 6; // 0x6
+ field public static final int CATEGORY_NEWS = 5; // 0x5
+ field public static final int CATEGORY_PRODUCTIVITY = 7; // 0x7
+ field public static final int CATEGORY_SOCIAL = 4; // 0x4
+ field public static final int CATEGORY_UNDEFINED = -1; // 0xffffffff
+ field public static final int CATEGORY_VIDEO = 2; // 0x2
field public static final android.os.Parcelable.Creator<android.content.pm.ApplicationInfo> CREATOR;
field public static final int FLAG_ALLOW_BACKUP = 32768; // 0x8000
field public static final int FLAG_ALLOW_CLEAR_USER_DATA = 64; // 0x40
@@ -9575,7 +9622,7 @@
field public static final int FLAG_HAS_CODE = 4; // 0x4
field public static final int FLAG_INSTALLED = 8388608; // 0x800000
field public static final int FLAG_IS_DATA_ONLY = 16777216; // 0x1000000
- field public static final int FLAG_IS_GAME = 33554432; // 0x2000000
+ field public static final deprecated int FLAG_IS_GAME = 33554432; // 0x2000000
field public static final int FLAG_KILL_AFTER_RESTORE = 65536; // 0x10000
field public static final int FLAG_LARGE_HEAP = 1048576; // 0x100000
field public static final int FLAG_MULTIARCH = -2147483648; // 0x80000000
@@ -9596,6 +9643,7 @@
field public static final int FLAG_USES_CLEARTEXT_TRAFFIC = 134217728; // 0x8000000
field public static final int FLAG_VM_SAFE_MODE = 16384; // 0x4000
field public java.lang.String backupAgentName;
+ field public int category;
field public java.lang.String className;
field public int compatibleWidthLimitDp;
field public java.lang.String dataDir;
@@ -9726,6 +9774,7 @@
public class LauncherApps {
method public java.util.List<android.content.pm.LauncherActivityInfo> getActivityList(java.lang.String, android.os.UserHandle);
+ method public android.content.pm.ApplicationInfo getApplicationInfo(java.lang.String, int, android.os.UserHandle);
method public android.content.pm.LauncherApps.PinItemRequest getPinItemRequest(android.content.Intent);
method public android.graphics.drawable.Drawable getShortcutBadgedIconDrawable(android.content.pm.ShortcutInfo, int);
method public android.graphics.drawable.Drawable getShortcutIconDrawable(android.content.pm.ShortcutInfo, int);
@@ -9772,9 +9821,6 @@
field public static final int REQUEST_TYPE_SHORTCUT = 1; // 0x1
}
- public static abstract class LauncherApps.PinItemRequest.RequestType implements java.lang.annotation.Annotation {
- }
-
public static class LauncherApps.ShortcutQuery {
ctor public LauncherApps.ShortcutQuery();
method public android.content.pm.LauncherApps.ShortcutQuery setActivity(android.content.ComponentName);
@@ -10017,6 +10063,7 @@
method public abstract android.content.pm.ResolveInfo resolveActivity(android.content.Intent, int);
method public abstract android.content.pm.ProviderInfo resolveContentProvider(java.lang.String, int);
method public abstract android.content.pm.ResolveInfo resolveService(android.content.Intent, int);
+ method public abstract void setApplicationCategoryHint(java.lang.String, int);
method public abstract void setApplicationEnabledSetting(java.lang.String, int, int);
method public abstract void setComponentEnabledSetting(android.content.ComponentName, int, int);
method public abstract void setInstallerPackageName(java.lang.String, java.lang.String);
@@ -10110,6 +10157,7 @@
field public static final java.lang.String FEATURE_WATCH = "android.hardware.type.watch";
field public static final java.lang.String FEATURE_WEBVIEW = "android.software.webview";
field public static final java.lang.String FEATURE_WIFI = "android.hardware.wifi";
+ field public static final java.lang.String FEATURE_WIFI_AWARE = "android.hardware.wifi.aware";
field public static final java.lang.String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct";
field public static final int GET_ACTIVITIES = 1; // 0x1
field public static final int GET_CONFIGURATIONS = 16384; // 0x4000
@@ -11949,8 +11997,6 @@
method public boolean clipRect(float, float, float, float, android.graphics.Region.Op);
method public boolean clipRect(float, float, float, float);
method public boolean clipRect(int, int, int, int);
- method public deprecated boolean clipRegion(android.graphics.Region, android.graphics.Region.Op);
- method public deprecated boolean clipRegion(android.graphics.Region);
method public void concat(android.graphics.Matrix);
method public void drawARGB(int, int, int, int);
method public void drawArc(android.graphics.RectF, float, float, boolean, android.graphics.Paint);
@@ -12464,6 +12510,7 @@
method public int getFontMetricsInt(android.graphics.Paint.FontMetricsInt);
method public android.graphics.Paint.FontMetricsInt getFontMetricsInt();
method public float getFontSpacing();
+ method public java.lang.String getFontVariationSettings();
method public int getHinting();
method public float getLetterSpacing();
method public android.graphics.MaskFilter getMaskFilter();
@@ -12521,6 +12568,7 @@
method public void setFilterBitmap(boolean);
method public void setFlags(int);
method public void setFontFeatureSettings(java.lang.String);
+ method public void setFontVariationSettings(java.lang.String);
method public void setHinting(int);
method public void setLetterSpacing(float);
method public void setLinearText(boolean);
@@ -23975,11 +24023,8 @@
method public boolean requestBandwidthUpdate(android.net.Network);
method public void requestNetwork(android.net.NetworkRequest, android.net.ConnectivityManager.NetworkCallback);
method public void requestNetwork(android.net.NetworkRequest, android.app.PendingIntent);
- method public deprecated boolean requestRouteToHost(int, int);
method public deprecated void setNetworkPreference(int);
method public static deprecated boolean setProcessDefaultNetwork(android.net.Network);
- method public deprecated int startUsingNetworkFeature(int, java.lang.String);
- method public deprecated int stopUsingNetworkFeature(int, java.lang.String);
method public void unregisterNetworkCallback(android.net.ConnectivityManager.NetworkCallback);
method public void unregisterNetworkCallback(android.app.PendingIntent);
field public static final deprecated java.lang.String ACTION_BACKGROUND_DATA_SETTING_CHANGED = "android.net.conn.BACKGROUND_DATA_SETTING_CHANGED";
@@ -24194,6 +24239,7 @@
field public static final int TRANSPORT_ETHERNET = 3; // 0x3
field public static final int TRANSPORT_VPN = 4; // 0x4
field public static final int TRANSPORT_WIFI = 1; // 0x1
+ field public static final int TRANSPORT_WIFI_AWARE = 5; // 0x5
}
public class NetworkInfo implements android.os.Parcelable {
@@ -25187,6 +25233,122 @@
}
+package android.net.wifi.aware {
+
+ public class AttachCallback {
+ ctor public AttachCallback();
+ method public void onAttachFailed();
+ method public void onAttached(android.net.wifi.aware.WifiAwareSession);
+ }
+
+ public final class Characteristics implements android.os.Parcelable {
+ method public int describeContents();
+ method public int getMaxMatchFilterLength();
+ method public int getMaxServiceNameLength();
+ method public int getMaxServiceSpecificInfoLength();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.net.wifi.aware.Characteristics> CREATOR;
+ }
+
+ public class DiscoverySession {
+ method public java.lang.String createNetworkSpecifier(android.net.wifi.aware.PeerHandle, byte[]);
+ method public void destroy();
+ method public static int getMaxSendRetryCount();
+ method public void sendMessage(android.net.wifi.aware.PeerHandle, int, byte[], int);
+ method public void sendMessage(android.net.wifi.aware.PeerHandle, int, byte[]);
+ }
+
+ public class DiscoverySessionCallback {
+ ctor public DiscoverySessionCallback();
+ method public void onMessageReceived(android.net.wifi.aware.PeerHandle, byte[]);
+ method public void onMessageSendFailed(int);
+ method public void onMessageSendSucceeded(int);
+ method public void onPublishStarted(android.net.wifi.aware.PublishDiscoverySession);
+ method public void onServiceDiscovered(android.net.wifi.aware.PeerHandle, byte[], java.util.List<byte[]>);
+ method public void onSessionConfigFailed();
+ method public void onSessionConfigUpdated();
+ method public void onSessionTerminated();
+ method public void onSubscribeStarted(android.net.wifi.aware.SubscribeDiscoverySession);
+ }
+
+ public class IdentityChangedListener {
+ ctor public IdentityChangedListener();
+ method public void onIdentityChanged(byte[]);
+ }
+
+ public class PeerHandle {
+ }
+
+ public final class PublishConfig implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.net.wifi.aware.PublishConfig> CREATOR;
+ field public static final int PUBLISH_TYPE_SOLICITED = 1; // 0x1
+ field public static final int PUBLISH_TYPE_UNSOLICITED = 0; // 0x0
+ }
+
+ public static final class PublishConfig.Builder {
+ ctor public PublishConfig.Builder();
+ method public android.net.wifi.aware.PublishConfig build();
+ method public android.net.wifi.aware.PublishConfig.Builder setMatchFilter(java.util.List<byte[]>);
+ method public android.net.wifi.aware.PublishConfig.Builder setPublishCount(int);
+ method public android.net.wifi.aware.PublishConfig.Builder setPublishType(int);
+ method public android.net.wifi.aware.PublishConfig.Builder setServiceName(java.lang.String);
+ method public android.net.wifi.aware.PublishConfig.Builder setServiceSpecificInfo(byte[]);
+ method public android.net.wifi.aware.PublishConfig.Builder setTerminateNotificationEnabled(boolean);
+ method public android.net.wifi.aware.PublishConfig.Builder setTtlSec(int);
+ }
+
+ public class PublishDiscoverySession extends android.net.wifi.aware.DiscoverySession {
+ method public void updatePublish(android.net.wifi.aware.PublishConfig);
+ }
+
+ public final class SubscribeConfig implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.net.wifi.aware.SubscribeConfig> CREATOR;
+ field public static final int MATCH_STYLE_ALL = 1; // 0x1
+ field public static final int MATCH_STYLE_FIRST_ONLY = 0; // 0x0
+ field public static final int SUBSCRIBE_TYPE_ACTIVE = 1; // 0x1
+ field public static final int SUBSCRIBE_TYPE_PASSIVE = 0; // 0x0
+ }
+
+ public static final class SubscribeConfig.Builder {
+ ctor public SubscribeConfig.Builder();
+ method public android.net.wifi.aware.SubscribeConfig build();
+ method public android.net.wifi.aware.SubscribeConfig.Builder setMatchFilter(java.util.List<byte[]>);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setMatchStyle(int);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setServiceName(java.lang.String);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setServiceSpecificInfo(byte[]);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setSubscribeCount(int);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setSubscribeType(int);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setTerminateNotificationEnabled(boolean);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setTtlSec(int);
+ }
+
+ public class SubscribeDiscoverySession extends android.net.wifi.aware.DiscoverySession {
+ method public void updateSubscribe(android.net.wifi.aware.SubscribeConfig);
+ }
+
+ public class WifiAwareManager {
+ method public void attach(android.net.wifi.aware.AttachCallback, android.os.Handler);
+ method public void attach(android.net.wifi.aware.AttachCallback, android.net.wifi.aware.IdentityChangedListener, android.os.Handler);
+ method public android.net.wifi.aware.Characteristics getCharacteristics();
+ method public boolean isAvailable();
+ field public static final java.lang.String ACTION_WIFI_AWARE_STATE_CHANGED = "android.net.wifi.aware.action.WIFI_AWARE_STATE_CHANGED";
+ field public static final int WIFI_AWARE_DATA_PATH_ROLE_INITIATOR = 0; // 0x0
+ field public static final int WIFI_AWARE_DATA_PATH_ROLE_RESPONDER = 1; // 0x1
+ }
+
+ public class WifiAwareSession {
+ method public java.lang.String createNetworkSpecifier(int, byte[], byte[]);
+ method public void destroy();
+ method public void publish(android.net.wifi.aware.PublishConfig, android.net.wifi.aware.DiscoverySessionCallback, android.os.Handler);
+ method public void subscribe(android.net.wifi.aware.SubscribeConfig, android.net.wifi.aware.DiscoverySessionCallback, android.os.Handler);
+ }
+
+}
+
package android.net.wifi.p2p {
public class WifiP2pConfig implements android.os.Parcelable {
@@ -28556,7 +28718,7 @@
method public void surfaceChanged(android.view.SurfaceHolder, int, int, int);
method public void surfaceCreated(android.view.SurfaceHolder);
method public void surfaceDestroyed(android.view.SurfaceHolder);
- method public void surfaceRedrawNeeded(android.view.SurfaceHolder);
+ method public deprecated void surfaceRedrawNeeded(android.view.SurfaceHolder);
field public static final int DEBUG_CHECK_GL_ERROR = 1; // 0x1
field public static final int DEBUG_LOG_GL_CALLS = 2; // 0x2
field public static final int RENDERMODE_CONTINUOUSLY = 1; // 0x1
@@ -30909,6 +31071,7 @@
field public static final java.lang.String ACTION_SET_ALARM = "android.intent.action.SET_ALARM";
field public static final java.lang.String ACTION_SET_TIMER = "android.intent.action.SET_TIMER";
field public static final java.lang.String ACTION_SHOW_ALARMS = "android.intent.action.SHOW_ALARMS";
+ field public static final java.lang.String ACTION_SHOW_TIMERS = "android.intent.action.SHOW_TIMERS";
field public static final java.lang.String ACTION_SNOOZE_ALARM = "android.intent.action.SNOOZE_ALARM";
field public static final java.lang.String ALARM_SEARCH_MODE_ALL = "android.all";
field public static final java.lang.String ALARM_SEARCH_MODE_LABEL = "android.label";
@@ -32531,7 +32694,10 @@
method public final android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException;
method public android.content.res.AssetFileDescriptor openTypedDocument(java.lang.String, java.lang.String, android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException;
method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
+ method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.os.CancellationSignal);
+ method public final android.database.Cursor query(android.net.Uri, java.lang.String[], android.os.Bundle, android.os.CancellationSignal);
method public abstract android.database.Cursor queryChildDocuments(java.lang.String, java.lang.String[], java.lang.String) throws java.io.FileNotFoundException;
+ method public android.database.Cursor queryChildDocuments(java.lang.String, java.lang.String[], android.os.Bundle) throws java.io.FileNotFoundException;
method public abstract android.database.Cursor queryDocument(java.lang.String, java.lang.String[]) throws java.io.FileNotFoundException;
method public android.database.Cursor queryRecentDocuments(java.lang.String, java.lang.String[]) throws java.io.FileNotFoundException;
method public abstract android.database.Cursor queryRoots(java.lang.String[]) throws java.io.FileNotFoundException;
@@ -35017,26 +35183,19 @@
method public void onDisconnected();
method public abstract void onFillRequest(android.app.assist.AssistStructure, android.os.Bundle, android.os.CancellationSignal, android.service.autofill.FillCallback);
method public abstract void onSaveRequest(android.app.assist.AssistStructure, android.os.Bundle, android.os.CancellationSignal, android.service.autofill.SaveCallback);
+ field public static final java.lang.String EXTRA_DATASET_EXTRAS = "android.service.autofill.extra.DATASET_EXTRAS";
+ field public static final java.lang.String EXTRA_RESPONSE_EXTRAS = "android.service.autofill.extra.RESPONSE_EXTRAS";
field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutoFillService";
}
public final class FillCallback {
method public void onFailure(java.lang.CharSequence);
- method public void onSuccess(android.service.autofill.FillCallback.FillData);
- }
-
- public static final class FillCallback.FillData {
- }
-
- public static class FillCallback.FillData.Builder {
- ctor public FillCallback.FillData.Builder();
- method public android.service.autofill.FillCallback.FillData build();
- method public android.service.autofill.FillCallback.FillData.Builder setTextField(int, java.lang.String);
+ method public void onSuccess(android.view.autofill.FillResponse);
}
public final class SaveCallback {
method public void onFailure(java.lang.CharSequence);
- method public void onSuccess(int[]);
+ method public void onSuccess(android.view.autofill.AutoFillId[]);
}
}
@@ -35315,6 +35474,7 @@
method public java.util.List<android.app.NotificationChannel> getNotificationChannels(java.lang.String);
method public final android.os.IBinder onBind(android.content.Intent);
method public abstract android.service.notification.Adjustment onNotificationEnqueued(android.service.notification.StatusBarNotification, int, boolean);
+ method public abstract void onNotificationSnoozedUntilContext(android.service.notification.StatusBarNotification, java.lang.String);
method public void updateNotificationChannel(java.lang.String, android.app.NotificationChannel);
field public static final java.lang.String SERVICE_INTERFACE = "android.service.notification.NotificationAssistantService";
}
@@ -35346,6 +35506,7 @@
method public static void requestRebind(android.content.ComponentName);
method public final void requestUnbind();
method public final void setNotificationsShown(java.lang.String[]);
+ method public final void snoozeNotification(java.lang.String, java.lang.String);
method public final void snoozeNotification(java.lang.String, long);
method public final void snoozeNotification(java.lang.String);
method public final void unsnoozeNotification(java.lang.String);
@@ -36701,6 +36862,7 @@
method public void unhold();
method public void unregisterCallback(android.telecom.Call.Callback);
field public static final java.lang.String AVAILABLE_PHONE_ACCOUNTS = "selectPhoneAccountAccounts";
+ field public static final java.lang.String EXTRA_LAST_EMERGENCY_CALLBACK_TIME_MILLIS = "android.telecom.extra.LAST_EMERGENCY_CALLBACK_TIME_MILLIS";
field public static final int STATE_ACTIVE = 4; // 0x4
field public static final int STATE_CONNECTING = 9; // 0x9
field public static final int STATE_DIALING = 1; // 0x1
@@ -38882,6 +39044,7 @@
method public android.content.pm.ResolveInfo resolveActivity(android.content.Intent, int);
method public android.content.pm.ProviderInfo resolveContentProvider(java.lang.String, int);
method public android.content.pm.ResolveInfo resolveService(android.content.Intent, int);
+ method public void setApplicationCategoryHint(java.lang.String, int);
method public void setApplicationEnabledSetting(java.lang.String, int, int);
method public void setComponentEnabledSetting(android.content.ComponentName, int, int);
method public void setInstallerPackageName(java.lang.String, java.lang.String);
@@ -39434,6 +39597,7 @@
method public android.text.StaticLayout.Builder setHyphenationFrequency(int);
method public android.text.StaticLayout.Builder setIncludePad(boolean);
method public android.text.StaticLayout.Builder setIndents(int[], int[]);
+ method public android.text.StaticLayout.Builder setJustify(boolean);
method public android.text.StaticLayout.Builder setLineSpacing(float, float);
method public android.text.StaticLayout.Builder setMaxLines(int);
method public android.text.StaticLayout.Builder setText(java.lang.CharSequence);
@@ -41819,7 +41983,7 @@
method public android.view.View findNearestTouchable(android.view.ViewGroup, int, int, int, int[]);
method public final android.view.View findNextFocus(android.view.ViewGroup, android.view.View, int);
method public android.view.View findNextFocusFromRect(android.view.ViewGroup, android.graphics.Rect, int);
- method public android.view.View findNextKeyboardNavigationCluster(int, android.view.View, android.view.View, int);
+ method public android.view.View findNextKeyboardNavigationGroup(int, android.view.View, android.view.View, int);
method public static android.view.FocusFinder getInstance();
}
@@ -43042,6 +43206,7 @@
public static abstract interface SurfaceHolder.Callback2 implements android.view.SurfaceHolder.Callback {
method public abstract void surfaceRedrawNeeded(android.view.SurfaceHolder);
+ method public default void surfaceRedrawNeededAsync(android.view.SurfaceHolder, java.lang.Runnable);
}
public class SurfaceView extends android.view.View {
@@ -43116,12 +43281,13 @@
method public void addChildrenForAccessibility(java.util.ArrayList<android.view.View>);
method public void addFocusables(java.util.ArrayList<android.view.View>, int);
method public void addFocusables(java.util.ArrayList<android.view.View>, int, int);
- method public void addKeyboardNavigationClusters(int, java.util.Collection<android.view.View>, int);
+ method public void addKeyboardNavigationGroups(int, java.util.Collection<android.view.View>, int);
method public void addOnAttachStateChangeListener(android.view.View.OnAttachStateChangeListener);
method public void addOnLayoutChangeListener(android.view.View.OnLayoutChangeListener);
method public void addTouchables(java.util.ArrayList<android.view.View>);
method public android.view.ViewPropertyAnimator animate();
method public void announceForAccessibility(java.lang.CharSequence);
+ method public void autoFill(android.view.autofill.AutoFillValue);
method protected boolean awakenScrollBars();
method protected boolean awakenScrollBars(int);
method protected boolean awakenScrollBars(int, boolean);
@@ -43173,8 +43339,8 @@
method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
method public boolean dispatchNestedScroll(int, int, int, int, int[]);
method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
- method public deprecated void dispatchProvideStructure(android.view.ViewStructure);
- method public void dispatchProvideStructure(android.view.ViewStructure, int);
+ method public void dispatchProvideAutoFillStructure(android.view.ViewStructure, int);
+ method public void dispatchProvideStructure(android.view.ViewStructure);
method protected void dispatchRestoreInstanceState(android.util.SparseArray<android.os.Parcelable>);
method protected void dispatchSaveInstanceState(android.util.SparseArray<android.os.Parcelable>);
method protected void dispatchSetActivated(boolean);
@@ -43209,6 +43375,8 @@
method public float getAlpha();
method public android.view.animation.Animation getAnimation();
method public android.os.IBinder getApplicationWindowToken();
+ method public android.view.autofill.AutoFillType getAutoFillType();
+ method public android.view.autofill.VirtualViewDelegate getAutoFillVirtualViewDelegate(android.view.autofill.VirtualViewDelegate.Callback);
method public android.graphics.drawable.Drawable getBackground();
method public android.content.res.ColorStateList getBackgroundTintList();
method public android.graphics.PorterDuff.Mode getBackgroundTintMode();
@@ -43371,6 +43539,7 @@
method public final boolean isFocusable();
method public final boolean isFocusableInTouchMode();
method public boolean isFocused();
+ method public final boolean isFocusedByDefault();
method public boolean isHapticFeedbackEnabled();
method public boolean isHardwareAccelerated();
method public boolean isHorizontalFadingEdgeEnabled();
@@ -43404,7 +43573,7 @@
method public boolean isVerticalFadingEdgeEnabled();
method public boolean isVerticalScrollBarEnabled();
method public void jumpDrawablesToCurrentState();
- method public android.view.View keyboardNavigationClusterSearch(int, android.view.View, int);
+ method public android.view.View keyboardNavigationGroupSearch(int, android.view.View, int);
method public void layout(int, int, int, int);
method public final void measure(int, int);
method protected static int[] mergeDrawableStates(int[], int[]);
@@ -43445,10 +43614,10 @@
method protected void onMeasure(int, int);
method protected void onOverScrolled(int, int, boolean, boolean);
method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
- method public deprecated void onProvideStructure(android.view.ViewStructure);
- method public void onProvideStructure(android.view.ViewStructure, int);
- method public deprecated void onProvideVirtualStructure(android.view.ViewStructure);
- method public void onProvideVirtualStructure(android.view.ViewStructure, int);
+ method public void onProvideAutoFillStructure(android.view.ViewStructure, int);
+ method public void onProvideAutoFillVirtualStructure(android.view.ViewStructure, int);
+ method public void onProvideStructure(android.view.ViewStructure);
+ method public void onProvideVirtualStructure(android.view.ViewStructure);
method public android.view.PointerIcon onResolvePointerIcon(android.view.MotionEvent, int);
method protected void onRestoreInstanceState(android.os.Parcelable);
method public void onRtlPropertiesChanged(int);
@@ -43501,8 +43670,8 @@
method public final void requestUnbufferedDispatch(android.view.MotionEvent);
method public static int resolveSize(int, int);
method public static int resolveSizeAndState(int, int, int);
+ method public boolean restoreDefaultFocus(int);
method public void restoreHierarchyState(android.util.SparseArray<android.os.Parcelable>);
- method public boolean restoreLastFocus();
method public void saveHierarchyState(android.util.SparseArray<android.os.Parcelable>);
method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
method public void scrollBy(int, int);
@@ -43540,6 +43709,7 @@
method public void setFitsSystemWindows(boolean);
method public void setFocusable(boolean);
method public void setFocusableInTouchMode(boolean);
+ method public void setFocusedByDefault(boolean);
method public void setForeground(android.graphics.drawable.Drawable);
method public void setForegroundGravity(int);
method public void setForegroundTintList(android.content.res.ColorStateList);
@@ -43655,8 +43825,8 @@
field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
field public static final android.util.Property<android.view.View, java.lang.Float> ALPHA;
- field public static final int ASSIST_FLAG_NON_SANITIZED_TEXT = 2; // 0x2
- field public static final int ASSIST_FLAG_SANITIZED_TEXT = 1; // 0x1
+ field public static final int AUTO_FILL_FLAG_TYPE_FILL = 1; // 0x1
+ field public static final int AUTO_FILL_FLAG_TYPE_SAVE = 2; // 0x2
field public static final int DRAG_FLAG_GLOBAL = 256; // 0x100
field public static final int DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION = 64; // 0x40
field public static final int DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION = 128; // 0x80
@@ -43686,8 +43856,6 @@
field public static final int FOCUS_BACKWARD = 1; // 0x1
field public static final int FOCUS_DOWN = 130; // 0x82
field public static final int FOCUS_FORWARD = 2; // 0x2
- field public static final int FOCUS_GROUP_CLUSTER = 1; // 0x1
- field public static final int FOCUS_GROUP_SECTION = 2; // 0x2
field public static final int FOCUS_LEFT = 17; // 0x11
field public static final int FOCUS_RIGHT = 66; // 0x42
field public static final int FOCUS_UP = 33; // 0x21
@@ -43699,6 +43867,8 @@
field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
field public static final int INVISIBLE = 4; // 0x4
field public static final int KEEP_SCREEN_ON = 67108864; // 0x4000000
+ field public static final int KEYBOARD_NAVIGATION_GROUP_CLUSTER = 1; // 0x1
+ field public static final int KEYBOARD_NAVIGATION_GROUP_SECTION = 2; // 0x2
field public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
field public static final int LAYER_TYPE_NONE = 0; // 0x0
field public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
@@ -44217,7 +44387,7 @@
method public abstract boolean isLayoutRequested();
method public abstract boolean isTextAlignmentResolved();
method public abstract boolean isTextDirectionResolved();
- method public abstract android.view.View keyboardNavigationClusterSearch(int, android.view.View, int);
+ method public abstract android.view.View keyboardNavigationGroupSearch(int, android.view.View, int);
method public abstract void notifySubtreeAccessibilityStateChanged(android.view.View, android.view.View, int);
method public abstract boolean onNestedFling(android.view.View, float, float, boolean);
method public abstract boolean onNestedPreFling(android.view.View, float, float);
@@ -44286,6 +44456,7 @@
method public abstract int addChildCount(int);
method public abstract void asyncCommit();
method public abstract android.view.ViewStructure asyncNewChild(int);
+ method public abstract android.view.ViewStructure asyncNewChild(int, int);
method public abstract int getChildCount();
method public abstract android.os.Bundle getExtras();
method public abstract java.lang.CharSequence getHint();
@@ -44294,9 +44465,11 @@
method public abstract int getTextSelectionStart();
method public abstract boolean hasExtras();
method public abstract android.view.ViewStructure newChild(int);
+ method public abstract android.view.ViewStructure newChild(int, int);
method public abstract void setAccessibilityFocused(boolean);
method public abstract void setActivated(boolean);
method public abstract void setAlpha(float);
+ method public abstract void setAutoFillType(android.view.autofill.AutoFillType);
method public abstract void setCheckable(boolean);
method public abstract void setChecked(boolean);
method public abstract void setChildCount(int);
@@ -44862,6 +45035,7 @@
}
public final class AccessibilityManager {
+ method public boolean addAccessibilityServicesStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener);
method public boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
method public boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
method public deprecated java.util.List<android.content.pm.ServiceInfo> getAccessibilityServiceList();
@@ -44870,11 +45044,16 @@
method public void interrupt();
method public boolean isEnabled();
method public boolean isTouchExplorationEnabled();
+ method public boolean removeAccessibilityServicesStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener);
method public boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
method public boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
method public void sendAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
}
+ public static abstract interface AccessibilityManager.AccessibilityServicesStateChangeListener {
+ method public abstract void onAccessibilityServicesStateChanged();
+ }
+
public static abstract interface AccessibilityManager.AccessibilityStateChangeListener {
method public abstract void onAccessibilityStateChanged(boolean);
}
@@ -45517,6 +45696,80 @@
}
+package android.view.autofill {
+
+ public final class AutoFillId implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.view.autofill.AutoFillId> CREATOR;
+ }
+
+ public final class AutoFillType implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.view.autofill.AutoFillType forList();
+ method public static android.view.autofill.AutoFillType forText(int);
+ method public static android.view.autofill.AutoFillType forToggle();
+ method public int getSubType();
+ method public boolean isList();
+ method public boolean isText();
+ method public boolean isToggle();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.view.autofill.AutoFillType> CREATOR;
+ }
+
+ public final class AutoFillValue implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.view.autofill.AutoFillValue forList(int);
+ method public static android.view.autofill.AutoFillValue forText(java.lang.CharSequence);
+ method public static android.view.autofill.AutoFillValue forToggle(boolean);
+ method public int getListValue();
+ method public java.lang.CharSequence getTextValue();
+ method public boolean getToggleValue();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.view.autofill.AutoFillValue> CREATOR;
+ }
+
+ public final class Dataset implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.view.autofill.Dataset> CREATOR;
+ }
+
+ public static final class Dataset.Builder {
+ ctor public Dataset.Builder(java.lang.CharSequence);
+ method public android.view.autofill.Dataset build();
+ method public android.view.autofill.Dataset.Builder setExtras(android.os.Bundle);
+ method public android.view.autofill.Dataset.Builder setValue(android.view.autofill.AutoFillId, android.view.autofill.AutoFillValue);
+ }
+
+ public final class FillResponse implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.view.autofill.FillResponse> CREATOR;
+ }
+
+ public static final class FillResponse.Builder {
+ ctor public FillResponse.Builder();
+ method public android.view.autofill.FillResponse.Builder addDataset(android.view.autofill.Dataset);
+ method public android.view.autofill.FillResponse.Builder addSavableFields(android.view.autofill.AutoFillId...);
+ method public android.view.autofill.FillResponse build();
+ method public android.view.autofill.FillResponse.Builder setExtras(android.os.Bundle);
+ }
+
+ public abstract class VirtualViewDelegate {
+ ctor public VirtualViewDelegate();
+ method public abstract void autoFill(int, android.view.autofill.AutoFillValue);
+ }
+
+ public static abstract class VirtualViewDelegate.Callback {
+ ctor public VirtualViewDelegate.Callback();
+ method public void onFocusChanged(int, boolean);
+ method public void onNodeRemoved(int...);
+ method public void onValueChanged(int);
+ }
+
+}
+
package android.view.inputmethod {
public class BaseInputConnection implements android.view.inputmethod.InputConnection {
@@ -48949,6 +49202,7 @@
method public int getExtendedPaddingTop();
method public android.text.InputFilter[] getFilters();
method public java.lang.String getFontFeatureSettings();
+ method public java.lang.String getFontVariationSettings();
method public boolean getFreezesText();
method public int getGravity();
method public int getHighlightColor();
@@ -48962,6 +49216,7 @@
method public boolean getIncludeFontPadding();
method public android.os.Bundle getInputExtras(boolean);
method public int getInputType();
+ method public boolean getJustify();
method public final android.text.method.KeyListener getKeyListener();
method public final android.text.Layout getLayout();
method public float getLetterSpacing();
@@ -49053,6 +49308,7 @@
method public void setExtractedText(android.view.inputmethod.ExtractedText);
method public void setFilters(android.text.InputFilter[]);
method public void setFontFeatureSettings(java.lang.String);
+ method public void setFontVariationSettings(java.lang.String);
method protected boolean setFrame(int, int, int, int);
method public void setFreezesText(boolean);
method public void setGravity(int);
@@ -49070,6 +49326,7 @@
method public void setIncludeFontPadding(boolean);
method public void setInputExtras(int) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
method public void setInputType(int);
+ method public void setJustify(boolean);
method public void setKeyListener(android.text.method.KeyListener);
method public void setLetterSpacing(float);
method public void setLineSpacing(float, float);
@@ -63395,10 +63652,12 @@
method public java.lang.StringBuffer appendTail(java.lang.StringBuffer);
method public int end();
method public int end(int);
+ method public int end(java.lang.String);
method public boolean find();
method public boolean find(int);
method public java.lang.String group();
method public java.lang.String group(int);
+ method public java.lang.String group(java.lang.String);
method public int groupCount();
method public boolean hasAnchoringBounds();
method public boolean hasTransparentBounds();
@@ -63417,6 +63676,7 @@
method public java.util.regex.Matcher reset(java.lang.CharSequence);
method public int start();
method public int start(int) throws java.lang.IllegalStateException;
+ method public int start(java.lang.String);
method public java.util.regex.MatchResult toMatchResult();
method public java.util.regex.Matcher useAnchoringBounds(boolean);
method public java.util.regex.Matcher usePattern(java.util.regex.Pattern);
diff --git a/api/removed.txt b/api/removed.txt
index 35b4859..ab22b6e 100644
--- a/api/removed.txt
+++ b/api/removed.txt
@@ -78,6 +78,11 @@
enum_constant public static final android.graphics.AvoidXfermode.Mode TARGET;
}
+ public class Canvas {
+ method public deprecated boolean clipRegion(android.graphics.Region, android.graphics.Region.Op);
+ method public deprecated boolean clipRegion(android.graphics.Region);
+ }
+
public deprecated class LayerRasterizer extends android.graphics.Rasterizer {
ctor public LayerRasterizer();
method public void addLayer(android.graphics.Paint, float, float);
@@ -121,6 +126,12 @@
package android.net {
+ public class ConnectivityManager {
+ method public deprecated boolean requestRouteToHost(int, int);
+ method public deprecated int startUsingNetworkFeature(int, java.lang.String);
+ method public deprecated int stopUsingNetworkFeature(int, java.lang.String);
+ }
+
public abstract class PskKeyManager {
ctor public PskKeyManager();
field public static final int MAX_IDENTITY_HINT_LENGTH_BYTES = 128; // 0x80
diff --git a/api/system-current.txt b/api/system-current.txt
index 7a0f24c..6dce43f 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -393,6 +393,7 @@
field public static final int anyDensity = 16843372; // 0x101026c
field public static final int apduServiceBanner = 16843757; // 0x10103ed
field public static final int apiKey = 16843281; // 0x1010211
+ field public static final int appCategory = 16844102; // 0x1010546
field public static final int author = 16843444; // 0x10102b4
field public static final int authorities = 16842776; // 0x1010018
field public static final int autoAdvanceViewId = 16843535; // 0x101030f
@@ -693,6 +694,7 @@
field public static final int flipInterval = 16843129; // 0x1010179
field public static final int focusable = 16842970; // 0x10100da
field public static final int focusableInTouchMode = 16842971; // 0x10100db
+ field public static final int focusedByDefault = 16844101; // 0x1010545
field public static final deprecated int focusedMonthDateColor = 16843587; // 0x1010343
field public static final int font = 16844082; // 0x1010532
field public static final int fontFamily = 16843692; // 0x10103ac
@@ -2899,6 +2901,7 @@
field public static final int FEEDBACK_HAPTIC = 2; // 0x2
field public static final int FEEDBACK_SPOKEN = 1; // 0x1
field public static final int FEEDBACK_VISUAL = 8; // 0x8
+ field public static final int FLAG_ENABLE_ACCESSIBILITY_VOLUME = 128; // 0x80
field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
@@ -3859,6 +3862,7 @@
method public boolean clearApplicationUserData();
method public void clearWatchHeapLimit();
method public void dumpPackageState(java.io.FileDescriptor, java.lang.String);
+ method public void forceStopPackage(java.lang.String);
method public android.util.Size getAppTaskThumbnailSize();
method public java.util.List<android.app.ActivityManager.AppTask> getAppTasks();
method public static int getCurrentUser();
@@ -5555,7 +5559,6 @@
method public boolean isAllowed();
method public void lockFields(int);
method public void populateFromXml(org.xmlpull.v1.XmlPullParser);
- method public void setAllowed(boolean);
method public void setBypassDnd(boolean);
method public void setImportance(int);
method public void setLights(boolean);
@@ -5587,7 +5590,8 @@
method public void cancel(int);
method public void cancel(java.lang.String, int);
method public void cancelAll();
- method public void createNotificationChannel(android.app.NotificationChannel, android.app.NotificationManager.OnNotificationChannelCreatedListener, android.os.Handler);
+ method public void createNotificationChannel(android.app.NotificationChannel);
+ method public void createNotificationChannels(java.util.List<android.app.NotificationChannel>);
method public void deleteNotificationChannel(java.lang.String);
method public android.service.notification.StatusBarNotification[] getActiveNotifications();
method public android.app.AutomaticZenRule getAutomaticZenRule(java.lang.String);
@@ -5621,10 +5625,6 @@
field public static final int INTERRUPTION_FILTER_UNKNOWN = 0; // 0x0
}
- public static abstract interface NotificationManager.OnNotificationChannelCreatedListener {
- method public abstract void onNotificationChannelCreated(android.app.NotificationChannel);
- }
-
public static class NotificationManager.Policy implements android.os.Parcelable {
ctor public NotificationManager.Policy(int, int, int);
ctor public NotificationManager.Policy(int, int, int, int);
@@ -6262,6 +6262,7 @@
method public deprecated java.lang.String getDeviceInitializerApp();
method public deprecated android.content.ComponentName getDeviceInitializerComponent();
method public java.lang.String getDeviceOwner();
+ method public android.content.ComponentName getDeviceOwnerComponentOnAnyUser();
method public java.lang.CharSequence getDeviceOwnerLockScreenInfo();
method public java.lang.String getDeviceOwnerNameOnAnyUser();
method public java.lang.CharSequence getDeviceOwnerOrganizationName();
@@ -6326,6 +6327,7 @@
method public boolean isSecurityLoggingEnabled(android.content.ComponentName);
method public boolean isUninstallBlocked(android.content.ComponentName, java.lang.String);
method public void lockNow();
+ method public void lockNow(int);
method public void notifyPendingSystemUpdate(long);
method public void reboot(android.content.ComponentName);
method public void removeActiveAdmin(android.content.ComponentName);
@@ -6426,6 +6428,8 @@
field public static final java.lang.String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM";
field public static final java.lang.String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER";
field public static final java.lang.String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION";
+ field public static final java.lang.String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_ICON_URI = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_ICON_URI";
+ field public static final java.lang.String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_LABEL = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_LABEL";
field public static final deprecated java.lang.String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME";
field public static final java.lang.String EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM = "android.app.extra.PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM";
field public static final java.lang.String EXTRA_PROVISIONING_DISCLAIMERS = "android.app.extra.PROVISIONING_DISCLAIMERS";
@@ -6438,8 +6442,10 @@
field public static final java.lang.String EXTRA_PROVISIONING_LOCAL_TIME = "android.app.extra.PROVISIONING_LOCAL_TIME";
field public static final java.lang.String EXTRA_PROVISIONING_LOGO_URI = "android.app.extra.PROVISIONING_LOGO_URI";
field public static final java.lang.String EXTRA_PROVISIONING_MAIN_COLOR = "android.app.extra.PROVISIONING_MAIN_COLOR";
+ field public static final java.lang.String EXTRA_PROVISIONING_ORGANIZATION_NAME = "android.app.extra.PROVISIONING_ORGANIZATION_NAME";
field public static final java.lang.String EXTRA_PROVISIONING_SKIP_ENCRYPTION = "android.app.extra.PROVISIONING_SKIP_ENCRYPTION";
field public static final java.lang.String EXTRA_PROVISIONING_SKIP_USER_CONSENT = "android.app.extra.PROVISIONING_SKIP_USER_CONSENT";
+ field public static final java.lang.String EXTRA_PROVISIONING_SUPPORT_URL = "android.app.extra.PROVISIONING_SUPPORT_URL";
field public static final java.lang.String EXTRA_PROVISIONING_TIME_ZONE = "android.app.extra.PROVISIONING_TIME_ZONE";
field public static final java.lang.String EXTRA_PROVISIONING_WIFI_HIDDEN = "android.app.extra.PROVISIONING_WIFI_HIDDEN";
field public static final java.lang.String EXTRA_PROVISIONING_WIFI_PAC_URL = "android.app.extra.PROVISIONING_WIFI_PAC_URL";
@@ -6449,6 +6455,7 @@
field public static final java.lang.String EXTRA_PROVISIONING_WIFI_PROXY_PORT = "android.app.extra.PROVISIONING_WIFI_PROXY_PORT";
field public static final java.lang.String EXTRA_PROVISIONING_WIFI_SECURITY_TYPE = "android.app.extra.PROVISIONING_WIFI_SECURITY_TYPE";
field public static final java.lang.String EXTRA_PROVISIONING_WIFI_SSID = "android.app.extra.PROVISIONING_WIFI_SSID";
+ field public static final int FLAG_EVICT_CE_KEY = 1; // 0x1
field public static final int FLAG_MANAGED_CAN_ACCESS_PARENT = 2; // 0x2
field public static final int FLAG_PARENT_CAN_ACCESS_MANAGED = 1; // 0x1
field public static final int KEYGUARD_DISABLE_FEATURES_ALL = 2147483647; // 0x7fffffff
@@ -6573,7 +6580,8 @@
public static class AssistStructure.ViewNode {
method public float getAlpha();
- method public int getAutoFillId();
+ method public android.view.autofill.AutoFillId getAutoFillId();
+ method public android.view.autofill.AutoFillType getAutoFillType();
method public android.app.assist.AssistStructure.ViewNode getChildAt(int);
method public int getChildCount();
method public java.lang.String getClassName();
@@ -6941,6 +6949,16 @@
field public static final android.os.Parcelable.Creator<android.app.usage.ConfigurationStats> CREATOR;
}
+ public final class ExternalStorageStats implements android.os.Parcelable {
+ method public int describeContents();
+ method public long getAudioBytes();
+ method public long getImageBytes();
+ method public long getTotalBytes();
+ method public long getVideoBytes();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.app.usage.ExternalStorageStats> CREATOR;
+ }
+
public final class NetworkStats implements java.lang.AutoCloseable {
method public void close();
method public boolean getNextBucket(android.app.usage.NetworkStats.Bucket);
@@ -6992,6 +7010,23 @@
method public abstract void onThresholdReached(int, java.lang.String);
}
+ public final class StorageStats implements android.os.Parcelable {
+ method public int describeContents();
+ method public long getCacheBytes();
+ method public long getCodeBytes();
+ method public long getDataBytes();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.app.usage.StorageStats> CREATOR;
+ }
+
+ public class StorageStatsManager {
+ method public long getFreeBytes(java.lang.String);
+ method public long getTotalBytes(java.lang.String);
+ method public android.app.usage.ExternalStorageStats queryExternalStatsForUser(java.lang.String, android.os.UserHandle);
+ method public android.app.usage.StorageStats queryStatsForUid(java.lang.String, int);
+ method public android.app.usage.StorageStats queryStatsForUser(java.lang.String, android.os.UserHandle);
+ }
+
public final class UsageEvents implements android.os.Parcelable {
method public int describeContents();
method public boolean getNextEvent(android.app.usage.UsageEvents.Event);
@@ -7073,6 +7108,7 @@
method protected android.view.View getErrorView();
method protected void prepareView(android.view.View);
method public void setAppWidget(int, android.appwidget.AppWidgetProviderInfo);
+ method public void setAsyncExecutor(java.util.concurrent.Executor);
method public void updateAppWidget(android.widget.RemoteViews);
method public void updateAppWidgetOptions(android.os.Bundle);
method public void updateAppWidgetSize(android.os.Bundle, int, int, int, int);
@@ -8516,9 +8552,14 @@
field public static final java.lang.String EXTRA_SIZE = "android.content.extra.SIZE";
field public static final int NOTIFY_SKIP_NOTIFY_FOR_DESCENDANTS = 2; // 0x2
field public static final int NOTIFY_SYNC_TO_NETWORK = 1; // 0x1
- field public static final java.lang.String QUERY_ARG_SELECTION = "android:query-selection";
- field public static final java.lang.String QUERY_ARG_SELECTION_ARGS = "android:query-selection-args";
- field public static final java.lang.String QUERY_ARG_SORT_ORDER = "android:query-sort-order";
+ field public static final java.lang.String QUERY_ARG_SORT_COLLATION = "android:query-sort-collation";
+ field public static final java.lang.String QUERY_ARG_SORT_COLUMNS = "android:query-sort-columns";
+ field public static final java.lang.String QUERY_ARG_SORT_DIRECTION = "android:query-sort-direction";
+ field public static final java.lang.String QUERY_ARG_SQL_SELECTION = "android:query-sql-selection";
+ field public static final java.lang.String QUERY_ARG_SQL_SELECTION_ARGS = "android:query-sql-selection-args";
+ field public static final java.lang.String QUERY_ARG_SQL_SORT_ORDER = "android:query-sql-sort-order";
+ field public static final int QUERY_SORT_DIRECTION_ASCENDING = 0; // 0x0
+ field public static final int QUERY_SORT_DIRECTION_DESCENDING = 1; // 0x1
field public static final java.lang.String SCHEME_ANDROID_RESOURCE = "android.resource";
field public static final java.lang.String SCHEME_CONTENT = "content";
field public static final java.lang.String SCHEME_FILE = "file";
@@ -8770,6 +8811,7 @@
field public static final java.lang.String SENSOR_SERVICE = "sensor";
field public static final java.lang.String SHORTCUT_SERVICE = "shortcut";
field public static final java.lang.String STORAGE_SERVICE = "storage";
+ field public static final java.lang.String STORAGE_STATS_SERVICE = "storagestats";
field public static final java.lang.String SYSTEM_HEALTH_SERVICE = "systemhealth";
field public static final java.lang.String TELECOM_SERVICE = "telecom";
field public static final java.lang.String TELEPHONY_SERVICE = "phone";
@@ -8783,6 +8825,7 @@
field public static final java.lang.String USER_SERVICE = "user";
field public static final java.lang.String VIBRATOR_SERVICE = "vibrator";
field public static final java.lang.String WALLPAPER_SERVICE = "wallpaper";
+ field public static final java.lang.String WIFI_AWARE_SERVICE = "wifiaware";
field public static final java.lang.String WIFI_P2P_SERVICE = "wifip2p";
field public static final java.lang.String WIFI_RTT_SERVICE = "rttmanager";
field public static final java.lang.String WIFI_SCANNING_SERVICE = "wifiscanner";
@@ -9938,7 +9981,17 @@
ctor public ApplicationInfo(android.content.pm.ApplicationInfo);
method public int describeContents();
method public void dump(android.util.Printer, java.lang.String);
+ method public static java.lang.CharSequence getCategoryTitle(android.content.Context, int);
method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager);
+ field public static final int CATEGORY_AUDIO = 1; // 0x1
+ field public static final int CATEGORY_GAME = 0; // 0x0
+ field public static final int CATEGORY_IMAGE = 3; // 0x3
+ field public static final int CATEGORY_MAPS = 6; // 0x6
+ field public static final int CATEGORY_NEWS = 5; // 0x5
+ field public static final int CATEGORY_PRODUCTIVITY = 7; // 0x7
+ field public static final int CATEGORY_SOCIAL = 4; // 0x4
+ field public static final int CATEGORY_UNDEFINED = -1; // 0xffffffff
+ field public static final int CATEGORY_VIDEO = 2; // 0x2
field public static final android.os.Parcelable.Creator<android.content.pm.ApplicationInfo> CREATOR;
field public static final int FLAG_ALLOW_BACKUP = 32768; // 0x8000
field public static final int FLAG_ALLOW_CLEAR_USER_DATA = 64; // 0x40
@@ -9952,7 +10005,7 @@
field public static final int FLAG_HAS_CODE = 4; // 0x4
field public static final int FLAG_INSTALLED = 8388608; // 0x800000
field public static final int FLAG_IS_DATA_ONLY = 16777216; // 0x1000000
- field public static final int FLAG_IS_GAME = 33554432; // 0x2000000
+ field public static final deprecated int FLAG_IS_GAME = 33554432; // 0x2000000
field public static final int FLAG_KILL_AFTER_RESTORE = 65536; // 0x10000
field public static final int FLAG_LARGE_HEAP = 1048576; // 0x100000
field public static final int FLAG_MULTIARCH = -2147483648; // 0x80000000
@@ -9973,6 +10026,7 @@
field public static final int FLAG_USES_CLEARTEXT_TRAFFIC = 134217728; // 0x8000000
field public static final int FLAG_VM_SAFE_MODE = 16384; // 0x4000
field public java.lang.String backupAgentName;
+ field public int category;
field public java.lang.String className;
field public int compatibleWidthLimitDp;
field public java.lang.String credentialProtectedDataDir;
@@ -10137,6 +10191,7 @@
public class LauncherApps {
method public java.util.List<android.content.pm.LauncherActivityInfo> getActivityList(java.lang.String, android.os.UserHandle);
+ method public android.content.pm.ApplicationInfo getApplicationInfo(java.lang.String, int, android.os.UserHandle);
method public android.content.pm.LauncherApps.PinItemRequest getPinItemRequest(android.content.Intent);
method public android.graphics.drawable.Drawable getShortcutBadgedIconDrawable(android.content.pm.ShortcutInfo, int);
method public android.graphics.drawable.Drawable getShortcutIconDrawable(android.content.pm.ShortcutInfo, int);
@@ -10183,9 +10238,6 @@
field public static final int REQUEST_TYPE_SHORTCUT = 1; // 0x1
}
- public static abstract class LauncherApps.PinItemRequest.RequestType implements java.lang.annotation.Annotation {
- }
-
public static class LauncherApps.ShortcutQuery {
ctor public LauncherApps.ShortcutQuery();
method public android.content.pm.LauncherApps.ShortcutQuery setActivity(android.content.ComponentName);
@@ -10440,6 +10492,7 @@
method public abstract android.content.pm.ProviderInfo resolveContentProvider(java.lang.String, int);
method public abstract android.content.pm.ResolveInfo resolveService(android.content.Intent, int);
method public abstract void revokeRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle);
+ method public abstract void setApplicationCategoryHint(java.lang.String, int);
method public abstract void setApplicationEnabledSetting(java.lang.String, int, int);
method public abstract void setComponentEnabledSetting(android.content.ComponentName, int, int);
method public abstract void setInstallerPackageName(java.lang.String, java.lang.String);
@@ -10538,6 +10591,7 @@
field public static final java.lang.String FEATURE_WATCH = "android.hardware.type.watch";
field public static final java.lang.String FEATURE_WEBVIEW = "android.software.webview";
field public static final java.lang.String FEATURE_WIFI = "android.hardware.wifi";
+ field public static final java.lang.String FEATURE_WIFI_AWARE = "android.hardware.wifi.aware";
field public static final java.lang.String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct";
field public static final int FLAG_PERMISSION_GRANTED_BY_DEFAULT = 32; // 0x20
field public static final int FLAG_PERMISSION_POLICY_FIXED = 4; // 0x4
@@ -12447,8 +12501,6 @@
method public boolean clipRect(float, float, float, float, android.graphics.Region.Op);
method public boolean clipRect(float, float, float, float);
method public boolean clipRect(int, int, int, int);
- method public deprecated boolean clipRegion(android.graphics.Region, android.graphics.Region.Op);
- method public deprecated boolean clipRegion(android.graphics.Region);
method public void concat(android.graphics.Matrix);
method public void drawARGB(int, int, int, int);
method public void drawArc(android.graphics.RectF, float, float, boolean, android.graphics.Paint);
@@ -12962,6 +13014,7 @@
method public int getFontMetricsInt(android.graphics.Paint.FontMetricsInt);
method public android.graphics.Paint.FontMetricsInt getFontMetricsInt();
method public float getFontSpacing();
+ method public java.lang.String getFontVariationSettings();
method public int getHinting();
method public float getLetterSpacing();
method public android.graphics.MaskFilter getMaskFilter();
@@ -13019,6 +13072,7 @@
method public void setFilterBitmap(boolean);
method public void setFlags(int);
method public void setFontFeatureSettings(java.lang.String);
+ method public void setFontVariationSettings(java.lang.String);
method public void setHinting(int);
method public void setLetterSpacing(float);
method public void setLinearText(boolean);
@@ -25767,14 +25821,11 @@
method public boolean requestBandwidthUpdate(android.net.Network);
method public void requestNetwork(android.net.NetworkRequest, android.net.ConnectivityManager.NetworkCallback);
method public void requestNetwork(android.net.NetworkRequest, android.app.PendingIntent);
- method public deprecated boolean requestRouteToHost(int, int);
method public deprecated void setNetworkPreference(int);
method public static deprecated boolean setProcessDefaultNetwork(android.net.Network);
method public void startTethering(int, boolean, android.net.ConnectivityManager.OnStartTetheringCallback);
method public void startTethering(int, boolean, android.net.ConnectivityManager.OnStartTetheringCallback, android.os.Handler);
- method public deprecated int startUsingNetworkFeature(int, java.lang.String);
method public void stopTethering(int);
- method public deprecated int stopUsingNetworkFeature(int, java.lang.String);
method public void unregisterNetworkCallback(android.net.ConnectivityManager.NetworkCallback);
method public void unregisterNetworkCallback(android.app.PendingIntent);
field public static final deprecated java.lang.String ACTION_BACKGROUND_DATA_SETTING_CHANGED = "android.net.conn.BACKGROUND_DATA_SETTING_CHANGED";
@@ -26036,6 +26087,7 @@
field public static final int TRANSPORT_ETHERNET = 3; // 0x3
field public static final int TRANSPORT_VPN = 4; // 0x4
field public static final int TRANSPORT_WIFI = 1; // 0x1
+ field public static final int TRANSPORT_WIFI_AWARE = 5; // 0x5
}
public class NetworkInfo implements android.os.Parcelable {
@@ -27279,6 +27331,8 @@
public class WifiConfiguration implements android.os.Parcelable {
ctor public WifiConfiguration();
method public int describeContents();
+ method public boolean hasNoInternetAccess();
+ method public boolean isNoInternetAccessExpected();
method public boolean isPasspoint();
method public void writeToParcel(android.os.Parcel, int);
field public java.lang.String BSSID;
@@ -27451,6 +27505,7 @@
method public static int calculateSignalLevel(int, int);
method public void cancelWps(android.net.wifi.WifiManager.WpsCallback);
method public static int compareSignalLevel(int, int);
+ method public void connect(android.net.wifi.WifiConfiguration, android.net.wifi.WifiManager.ActionListener);
method public android.net.wifi.WifiManager.MulticastLock createMulticastLock(java.lang.String);
method public android.net.wifi.WifiManager.WifiLock createWifiLock(int, java.lang.String);
method public android.net.wifi.WifiManager.WifiLock createWifiLock(java.lang.String);
@@ -27550,6 +27605,11 @@
field public static final int WPS_WEP_PROHIBITED = 4; // 0x4
}
+ public static abstract interface WifiManager.ActionListener {
+ method public abstract void onFailure(int);
+ method public abstract void onSuccess();
+ }
+
public class WifiManager.MulticastLock {
method public void acquire();
method public boolean isHeld();
@@ -27730,6 +27790,122 @@
}
+package android.net.wifi.aware {
+
+ public class AttachCallback {
+ ctor public AttachCallback();
+ method public void onAttachFailed();
+ method public void onAttached(android.net.wifi.aware.WifiAwareSession);
+ }
+
+ public final class Characteristics implements android.os.Parcelable {
+ method public int describeContents();
+ method public int getMaxMatchFilterLength();
+ method public int getMaxServiceNameLength();
+ method public int getMaxServiceSpecificInfoLength();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.net.wifi.aware.Characteristics> CREATOR;
+ }
+
+ public class DiscoverySession {
+ method public java.lang.String createNetworkSpecifier(android.net.wifi.aware.PeerHandle, byte[]);
+ method public void destroy();
+ method public static int getMaxSendRetryCount();
+ method public void sendMessage(android.net.wifi.aware.PeerHandle, int, byte[], int);
+ method public void sendMessage(android.net.wifi.aware.PeerHandle, int, byte[]);
+ }
+
+ public class DiscoverySessionCallback {
+ ctor public DiscoverySessionCallback();
+ method public void onMessageReceived(android.net.wifi.aware.PeerHandle, byte[]);
+ method public void onMessageSendFailed(int);
+ method public void onMessageSendSucceeded(int);
+ method public void onPublishStarted(android.net.wifi.aware.PublishDiscoverySession);
+ method public void onServiceDiscovered(android.net.wifi.aware.PeerHandle, byte[], java.util.List<byte[]>);
+ method public void onSessionConfigFailed();
+ method public void onSessionConfigUpdated();
+ method public void onSessionTerminated();
+ method public void onSubscribeStarted(android.net.wifi.aware.SubscribeDiscoverySession);
+ }
+
+ public class IdentityChangedListener {
+ ctor public IdentityChangedListener();
+ method public void onIdentityChanged(byte[]);
+ }
+
+ public class PeerHandle {
+ }
+
+ public final class PublishConfig implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.net.wifi.aware.PublishConfig> CREATOR;
+ field public static final int PUBLISH_TYPE_SOLICITED = 1; // 0x1
+ field public static final int PUBLISH_TYPE_UNSOLICITED = 0; // 0x0
+ }
+
+ public static final class PublishConfig.Builder {
+ ctor public PublishConfig.Builder();
+ method public android.net.wifi.aware.PublishConfig build();
+ method public android.net.wifi.aware.PublishConfig.Builder setMatchFilter(java.util.List<byte[]>);
+ method public android.net.wifi.aware.PublishConfig.Builder setPublishCount(int);
+ method public android.net.wifi.aware.PublishConfig.Builder setPublishType(int);
+ method public android.net.wifi.aware.PublishConfig.Builder setServiceName(java.lang.String);
+ method public android.net.wifi.aware.PublishConfig.Builder setServiceSpecificInfo(byte[]);
+ method public android.net.wifi.aware.PublishConfig.Builder setTerminateNotificationEnabled(boolean);
+ method public android.net.wifi.aware.PublishConfig.Builder setTtlSec(int);
+ }
+
+ public class PublishDiscoverySession extends android.net.wifi.aware.DiscoverySession {
+ method public void updatePublish(android.net.wifi.aware.PublishConfig);
+ }
+
+ public final class SubscribeConfig implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.net.wifi.aware.SubscribeConfig> CREATOR;
+ field public static final int MATCH_STYLE_ALL = 1; // 0x1
+ field public static final int MATCH_STYLE_FIRST_ONLY = 0; // 0x0
+ field public static final int SUBSCRIBE_TYPE_ACTIVE = 1; // 0x1
+ field public static final int SUBSCRIBE_TYPE_PASSIVE = 0; // 0x0
+ }
+
+ public static final class SubscribeConfig.Builder {
+ ctor public SubscribeConfig.Builder();
+ method public android.net.wifi.aware.SubscribeConfig build();
+ method public android.net.wifi.aware.SubscribeConfig.Builder setMatchFilter(java.util.List<byte[]>);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setMatchStyle(int);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setServiceName(java.lang.String);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setServiceSpecificInfo(byte[]);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setSubscribeCount(int);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setSubscribeType(int);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setTerminateNotificationEnabled(boolean);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setTtlSec(int);
+ }
+
+ public class SubscribeDiscoverySession extends android.net.wifi.aware.DiscoverySession {
+ method public void updateSubscribe(android.net.wifi.aware.SubscribeConfig);
+ }
+
+ public class WifiAwareManager {
+ method public void attach(android.net.wifi.aware.AttachCallback, android.os.Handler);
+ method public void attach(android.net.wifi.aware.AttachCallback, android.net.wifi.aware.IdentityChangedListener, android.os.Handler);
+ method public android.net.wifi.aware.Characteristics getCharacteristics();
+ method public boolean isAvailable();
+ field public static final java.lang.String ACTION_WIFI_AWARE_STATE_CHANGED = "android.net.wifi.aware.action.WIFI_AWARE_STATE_CHANGED";
+ field public static final int WIFI_AWARE_DATA_PATH_ROLE_INITIATOR = 0; // 0x0
+ field public static final int WIFI_AWARE_DATA_PATH_ROLE_RESPONDER = 1; // 0x1
+ }
+
+ public class WifiAwareSession {
+ method public java.lang.String createNetworkSpecifier(int, byte[], byte[]);
+ method public void destroy();
+ method public void publish(android.net.wifi.aware.PublishConfig, android.net.wifi.aware.DiscoverySessionCallback, android.os.Handler);
+ method public void subscribe(android.net.wifi.aware.SubscribeConfig, android.net.wifi.aware.DiscoverySessionCallback, android.os.Handler);
+ }
+
+}
+
package android.net.wifi.p2p {
public class WifiP2pConfig implements android.os.Parcelable {
@@ -31112,7 +31288,7 @@
method public void surfaceChanged(android.view.SurfaceHolder, int, int, int);
method public void surfaceCreated(android.view.SurfaceHolder);
method public void surfaceDestroyed(android.view.SurfaceHolder);
- method public void surfaceRedrawNeeded(android.view.SurfaceHolder);
+ method public deprecated void surfaceRedrawNeeded(android.view.SurfaceHolder);
field public static final int DEBUG_CHECK_GL_ERROR = 1; // 0x1
field public static final int DEBUG_LOG_GL_CALLS = 2; // 0x2
field public static final int RENDERMODE_CONTINUOUSLY = 1; // 0x1
@@ -33621,6 +33797,7 @@
field public static final java.lang.String ACTION_SET_ALARM = "android.intent.action.SET_ALARM";
field public static final java.lang.String ACTION_SET_TIMER = "android.intent.action.SET_TIMER";
field public static final java.lang.String ACTION_SHOW_ALARMS = "android.intent.action.SHOW_ALARMS";
+ field public static final java.lang.String ACTION_SHOW_TIMERS = "android.intent.action.SHOW_TIMERS";
field public static final java.lang.String ACTION_SNOOZE_ALARM = "android.intent.action.SNOOZE_ALARM";
field public static final java.lang.String ALARM_SEARCH_MODE_ALL = "android.all";
field public static final java.lang.String ALARM_SEARCH_MODE_LABEL = "android.label";
@@ -35273,7 +35450,10 @@
method public final android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException;
method public android.content.res.AssetFileDescriptor openTypedDocument(java.lang.String, java.lang.String, android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException;
method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
+ method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.os.CancellationSignal);
+ method public final android.database.Cursor query(android.net.Uri, java.lang.String[], android.os.Bundle, android.os.CancellationSignal);
method public abstract android.database.Cursor queryChildDocuments(java.lang.String, java.lang.String[], java.lang.String) throws java.io.FileNotFoundException;
+ method public android.database.Cursor queryChildDocuments(java.lang.String, java.lang.String[], android.os.Bundle) throws java.io.FileNotFoundException;
method public abstract android.database.Cursor queryDocument(java.lang.String, java.lang.String[]) throws java.io.FileNotFoundException;
method public android.database.Cursor queryRecentDocuments(java.lang.String, java.lang.String[]) throws java.io.FileNotFoundException;
method public abstract android.database.Cursor queryRoots(java.lang.String[]) throws java.io.FileNotFoundException;
@@ -37872,26 +38052,19 @@
method public void onDisconnected();
method public abstract void onFillRequest(android.app.assist.AssistStructure, android.os.Bundle, android.os.CancellationSignal, android.service.autofill.FillCallback);
method public abstract void onSaveRequest(android.app.assist.AssistStructure, android.os.Bundle, android.os.CancellationSignal, android.service.autofill.SaveCallback);
+ field public static final java.lang.String EXTRA_DATASET_EXTRAS = "android.service.autofill.extra.DATASET_EXTRAS";
+ field public static final java.lang.String EXTRA_RESPONSE_EXTRAS = "android.service.autofill.extra.RESPONSE_EXTRAS";
field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutoFillService";
}
public final class FillCallback {
method public void onFailure(java.lang.CharSequence);
- method public void onSuccess(android.service.autofill.FillCallback.FillData);
- }
-
- public static final class FillCallback.FillData {
- }
-
- public static class FillCallback.FillData.Builder {
- ctor public FillCallback.FillData.Builder();
- method public android.service.autofill.FillCallback.FillData build();
- method public android.service.autofill.FillCallback.FillData.Builder setTextField(int, java.lang.String);
+ method public void onSuccess(android.view.autofill.FillResponse);
}
public final class SaveCallback {
method public void onFailure(java.lang.CharSequence);
- method public void onSuccess(int[]);
+ method public void onSuccess(android.view.autofill.AutoFillId[]);
}
}
@@ -38170,6 +38343,7 @@
method public java.util.List<android.app.NotificationChannel> getNotificationChannels(java.lang.String);
method public final android.os.IBinder onBind(android.content.Intent);
method public abstract android.service.notification.Adjustment onNotificationEnqueued(android.service.notification.StatusBarNotification, int, boolean);
+ method public abstract void onNotificationSnoozedUntilContext(android.service.notification.StatusBarNotification, java.lang.String);
method public void updateNotificationChannel(java.lang.String, android.app.NotificationChannel);
field public static final java.lang.String SERVICE_INTERFACE = "android.service.notification.NotificationAssistantService";
}
@@ -38205,6 +38379,7 @@
method public final void requestUnbind();
method public final void setNotificationsShown(java.lang.String[]);
method public final void setOnNotificationPostedTrim(int);
+ method public final void snoozeNotification(java.lang.String, java.lang.String);
method public final void snoozeNotification(java.lang.String, long);
method public final void snoozeNotification(java.lang.String);
method public void unregisterAsSystemService() throws android.os.RemoteException;
@@ -39627,6 +39802,7 @@
method public void unhold();
method public void unregisterCallback(android.telecom.Call.Callback);
field public static final java.lang.String AVAILABLE_PHONE_ACCOUNTS = "selectPhoneAccountAccounts";
+ field public static final java.lang.String EXTRA_LAST_EMERGENCY_CALLBACK_TIME_MILLIS = "android.telecom.extra.LAST_EMERGENCY_CALLBACK_TIME_MILLIS";
field public static final int STATE_ACTIVE = 4; // 0x4
field public static final int STATE_CONNECTING = 9; // 0x9
field public static final int STATE_DIALING = 1; // 0x1
@@ -42090,6 +42266,7 @@
method public android.content.pm.ProviderInfo resolveContentProvider(java.lang.String, int);
method public android.content.pm.ResolveInfo resolveService(android.content.Intent, int);
method public void revokeRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle);
+ method public void setApplicationCategoryHint(java.lang.String, int);
method public void setApplicationEnabledSetting(java.lang.String, int, int);
method public void setComponentEnabledSetting(android.content.ComponentName, int, int);
method public void setInstallerPackageName(java.lang.String, java.lang.String);
@@ -42644,6 +42821,7 @@
method public android.text.StaticLayout.Builder setHyphenationFrequency(int);
method public android.text.StaticLayout.Builder setIncludePad(boolean);
method public android.text.StaticLayout.Builder setIndents(int[], int[]);
+ method public android.text.StaticLayout.Builder setJustify(boolean);
method public android.text.StaticLayout.Builder setLineSpacing(float, float);
method public android.text.StaticLayout.Builder setMaxLines(int);
method public android.text.StaticLayout.Builder setText(java.lang.CharSequence);
@@ -45029,7 +45207,7 @@
method public android.view.View findNearestTouchable(android.view.ViewGroup, int, int, int, int[]);
method public final android.view.View findNextFocus(android.view.ViewGroup, android.view.View, int);
method public android.view.View findNextFocusFromRect(android.view.ViewGroup, android.graphics.Rect, int);
- method public android.view.View findNextKeyboardNavigationCluster(int, android.view.View, android.view.View, int);
+ method public android.view.View findNextKeyboardNavigationGroup(int, android.view.View, android.view.View, int);
method public static android.view.FocusFinder getInstance();
}
@@ -46252,6 +46430,7 @@
public static abstract interface SurfaceHolder.Callback2 implements android.view.SurfaceHolder.Callback {
method public abstract void surfaceRedrawNeeded(android.view.SurfaceHolder);
+ method public default void surfaceRedrawNeededAsync(android.view.SurfaceHolder, java.lang.Runnable);
}
public class SurfaceView extends android.view.View {
@@ -46326,12 +46505,13 @@
method public void addChildrenForAccessibility(java.util.ArrayList<android.view.View>);
method public void addFocusables(java.util.ArrayList<android.view.View>, int);
method public void addFocusables(java.util.ArrayList<android.view.View>, int, int);
- method public void addKeyboardNavigationClusters(int, java.util.Collection<android.view.View>, int);
+ method public void addKeyboardNavigationGroups(int, java.util.Collection<android.view.View>, int);
method public void addOnAttachStateChangeListener(android.view.View.OnAttachStateChangeListener);
method public void addOnLayoutChangeListener(android.view.View.OnLayoutChangeListener);
method public void addTouchables(java.util.ArrayList<android.view.View>);
method public android.view.ViewPropertyAnimator animate();
method public void announceForAccessibility(java.lang.CharSequence);
+ method public void autoFill(android.view.autofill.AutoFillValue);
method protected boolean awakenScrollBars();
method protected boolean awakenScrollBars(int);
method protected boolean awakenScrollBars(int, boolean);
@@ -46383,8 +46563,8 @@
method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
method public boolean dispatchNestedScroll(int, int, int, int, int[]);
method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
- method public deprecated void dispatchProvideStructure(android.view.ViewStructure);
- method public void dispatchProvideStructure(android.view.ViewStructure, int);
+ method public void dispatchProvideAutoFillStructure(android.view.ViewStructure, int);
+ method public void dispatchProvideStructure(android.view.ViewStructure);
method protected void dispatchRestoreInstanceState(android.util.SparseArray<android.os.Parcelable>);
method protected void dispatchSaveInstanceState(android.util.SparseArray<android.os.Parcelable>);
method protected void dispatchSetActivated(boolean);
@@ -46419,6 +46599,8 @@
method public float getAlpha();
method public android.view.animation.Animation getAnimation();
method public android.os.IBinder getApplicationWindowToken();
+ method public android.view.autofill.AutoFillType getAutoFillType();
+ method public android.view.autofill.VirtualViewDelegate getAutoFillVirtualViewDelegate(android.view.autofill.VirtualViewDelegate.Callback);
method public android.graphics.drawable.Drawable getBackground();
method public android.content.res.ColorStateList getBackgroundTintList();
method public android.graphics.PorterDuff.Mode getBackgroundTintMode();
@@ -46581,6 +46763,7 @@
method public final boolean isFocusable();
method public final boolean isFocusableInTouchMode();
method public boolean isFocused();
+ method public final boolean isFocusedByDefault();
method public boolean isHapticFeedbackEnabled();
method public boolean isHardwareAccelerated();
method public boolean isHorizontalFadingEdgeEnabled();
@@ -46614,7 +46797,7 @@
method public boolean isVerticalFadingEdgeEnabled();
method public boolean isVerticalScrollBarEnabled();
method public void jumpDrawablesToCurrentState();
- method public android.view.View keyboardNavigationClusterSearch(int, android.view.View, int);
+ method public android.view.View keyboardNavigationGroupSearch(int, android.view.View, int);
method public void layout(int, int, int, int);
method public final void measure(int, int);
method protected static int[] mergeDrawableStates(int[], int[]);
@@ -46655,10 +46838,10 @@
method protected void onMeasure(int, int);
method protected void onOverScrolled(int, int, boolean, boolean);
method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
- method public deprecated void onProvideStructure(android.view.ViewStructure);
- method public void onProvideStructure(android.view.ViewStructure, int);
- method public deprecated void onProvideVirtualStructure(android.view.ViewStructure);
- method public void onProvideVirtualStructure(android.view.ViewStructure, int);
+ method public void onProvideAutoFillStructure(android.view.ViewStructure, int);
+ method public void onProvideAutoFillVirtualStructure(android.view.ViewStructure, int);
+ method public void onProvideStructure(android.view.ViewStructure);
+ method public void onProvideVirtualStructure(android.view.ViewStructure);
method public android.view.PointerIcon onResolvePointerIcon(android.view.MotionEvent, int);
method protected void onRestoreInstanceState(android.os.Parcelable);
method public void onRtlPropertiesChanged(int);
@@ -46711,8 +46894,8 @@
method public final void requestUnbufferedDispatch(android.view.MotionEvent);
method public static int resolveSize(int, int);
method public static int resolveSizeAndState(int, int, int);
+ method public boolean restoreDefaultFocus(int);
method public void restoreHierarchyState(android.util.SparseArray<android.os.Parcelable>);
- method public boolean restoreLastFocus();
method public void saveHierarchyState(android.util.SparseArray<android.os.Parcelable>);
method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
method public void scrollBy(int, int);
@@ -46750,6 +46933,7 @@
method public void setFitsSystemWindows(boolean);
method public void setFocusable(boolean);
method public void setFocusableInTouchMode(boolean);
+ method public void setFocusedByDefault(boolean);
method public void setForeground(android.graphics.drawable.Drawable);
method public void setForegroundGravity(int);
method public void setForegroundTintList(android.content.res.ColorStateList);
@@ -46865,8 +47049,8 @@
field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
field public static final android.util.Property<android.view.View, java.lang.Float> ALPHA;
- field public static final int ASSIST_FLAG_NON_SANITIZED_TEXT = 2; // 0x2
- field public static final int ASSIST_FLAG_SANITIZED_TEXT = 1; // 0x1
+ field public static final int AUTO_FILL_FLAG_TYPE_FILL = 1; // 0x1
+ field public static final int AUTO_FILL_FLAG_TYPE_SAVE = 2; // 0x2
field public static final int DRAG_FLAG_GLOBAL = 256; // 0x100
field public static final int DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION = 64; // 0x40
field public static final int DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION = 128; // 0x80
@@ -46896,8 +47080,6 @@
field public static final int FOCUS_BACKWARD = 1; // 0x1
field public static final int FOCUS_DOWN = 130; // 0x82
field public static final int FOCUS_FORWARD = 2; // 0x2
- field public static final int FOCUS_GROUP_CLUSTER = 1; // 0x1
- field public static final int FOCUS_GROUP_SECTION = 2; // 0x2
field public static final int FOCUS_LEFT = 17; // 0x11
field public static final int FOCUS_RIGHT = 66; // 0x42
field public static final int FOCUS_UP = 33; // 0x21
@@ -46909,6 +47091,8 @@
field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
field public static final int INVISIBLE = 4; // 0x4
field public static final int KEEP_SCREEN_ON = 67108864; // 0x4000000
+ field public static final int KEYBOARD_NAVIGATION_GROUP_CLUSTER = 1; // 0x1
+ field public static final int KEYBOARD_NAVIGATION_GROUP_SECTION = 2; // 0x2
field public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
field public static final int LAYER_TYPE_NONE = 0; // 0x0
field public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
@@ -47427,7 +47611,7 @@
method public abstract boolean isLayoutRequested();
method public abstract boolean isTextAlignmentResolved();
method public abstract boolean isTextDirectionResolved();
- method public abstract android.view.View keyboardNavigationClusterSearch(int, android.view.View, int);
+ method public abstract android.view.View keyboardNavigationGroupSearch(int, android.view.View, int);
method public abstract void notifySubtreeAccessibilityStateChanged(android.view.View, android.view.View, int);
method public abstract boolean onNestedFling(android.view.View, float, float, boolean);
method public abstract boolean onNestedPreFling(android.view.View, float, float);
@@ -47496,6 +47680,7 @@
method public abstract int addChildCount(int);
method public abstract void asyncCommit();
method public abstract android.view.ViewStructure asyncNewChild(int);
+ method public abstract android.view.ViewStructure asyncNewChild(int, int);
method public abstract int getChildCount();
method public abstract android.os.Bundle getExtras();
method public abstract java.lang.CharSequence getHint();
@@ -47504,9 +47689,11 @@
method public abstract int getTextSelectionStart();
method public abstract boolean hasExtras();
method public abstract android.view.ViewStructure newChild(int);
+ method public abstract android.view.ViewStructure newChild(int, int);
method public abstract void setAccessibilityFocused(boolean);
method public abstract void setActivated(boolean);
method public abstract void setAlpha(float);
+ method public abstract void setAutoFillType(android.view.autofill.AutoFillType);
method public abstract void setCheckable(boolean);
method public abstract void setChecked(boolean);
method public abstract void setChildCount(int);
@@ -48075,6 +48262,7 @@
}
public final class AccessibilityManager {
+ method public boolean addAccessibilityServicesStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener);
method public boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
method public boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
method public deprecated java.util.List<android.content.pm.ServiceInfo> getAccessibilityServiceList();
@@ -48083,11 +48271,16 @@
method public void interrupt();
method public boolean isEnabled();
method public boolean isTouchExplorationEnabled();
+ method public boolean removeAccessibilityServicesStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener);
method public boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
method public boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
method public void sendAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
}
+ public static abstract interface AccessibilityManager.AccessibilityServicesStateChangeListener {
+ method public abstract void onAccessibilityServicesStateChanged();
+ }
+
public static abstract interface AccessibilityManager.AccessibilityStateChangeListener {
method public abstract void onAccessibilityStateChanged(boolean);
}
@@ -48730,6 +48923,80 @@
}
+package android.view.autofill {
+
+ public final class AutoFillId implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.view.autofill.AutoFillId> CREATOR;
+ }
+
+ public final class AutoFillType implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.view.autofill.AutoFillType forList();
+ method public static android.view.autofill.AutoFillType forText(int);
+ method public static android.view.autofill.AutoFillType forToggle();
+ method public int getSubType();
+ method public boolean isList();
+ method public boolean isText();
+ method public boolean isToggle();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.view.autofill.AutoFillType> CREATOR;
+ }
+
+ public final class AutoFillValue implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.view.autofill.AutoFillValue forList(int);
+ method public static android.view.autofill.AutoFillValue forText(java.lang.CharSequence);
+ method public static android.view.autofill.AutoFillValue forToggle(boolean);
+ method public int getListValue();
+ method public java.lang.CharSequence getTextValue();
+ method public boolean getToggleValue();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.view.autofill.AutoFillValue> CREATOR;
+ }
+
+ public final class Dataset implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.view.autofill.Dataset> CREATOR;
+ }
+
+ public static final class Dataset.Builder {
+ ctor public Dataset.Builder(java.lang.CharSequence);
+ method public android.view.autofill.Dataset build();
+ method public android.view.autofill.Dataset.Builder setExtras(android.os.Bundle);
+ method public android.view.autofill.Dataset.Builder setValue(android.view.autofill.AutoFillId, android.view.autofill.AutoFillValue);
+ }
+
+ public final class FillResponse implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.view.autofill.FillResponse> CREATOR;
+ }
+
+ public static final class FillResponse.Builder {
+ ctor public FillResponse.Builder();
+ method public android.view.autofill.FillResponse.Builder addDataset(android.view.autofill.Dataset);
+ method public android.view.autofill.FillResponse.Builder addSavableFields(android.view.autofill.AutoFillId...);
+ method public android.view.autofill.FillResponse build();
+ method public android.view.autofill.FillResponse.Builder setExtras(android.os.Bundle);
+ }
+
+ public abstract class VirtualViewDelegate {
+ ctor public VirtualViewDelegate();
+ method public abstract void autoFill(int, android.view.autofill.AutoFillValue);
+ }
+
+ public static abstract class VirtualViewDelegate.Callback {
+ ctor public VirtualViewDelegate.Callback();
+ method public void onFocusChanged(int, boolean);
+ method public void onNodeRemoved(int...);
+ method public void onValueChanged(int);
+ }
+
+}
+
package android.view.inputmethod {
public class BaseInputConnection implements android.view.inputmethod.InputConnection {
@@ -50245,8 +50512,8 @@
method public abstract boolean onKeyUp(int, android.view.KeyEvent);
method public abstract void onMeasure(int, int);
method public abstract void onOverScrolled(int, int, boolean, boolean);
+ method public default void onProvideAutoFillVirtualStructure(android.view.ViewStructure, int);
method public abstract void onProvideVirtualStructure(android.view.ViewStructure);
- method public default void onProvideVirtualStructure(android.view.ViewStructure, int);
method public abstract void onScrollChanged(int, int, int, int);
method public abstract void onSizeChanged(int, int, int, int);
method public abstract void onStartTemporaryDetach();
@@ -52519,6 +52786,7 @@
method public int getExtendedPaddingTop();
method public android.text.InputFilter[] getFilters();
method public java.lang.String getFontFeatureSettings();
+ method public java.lang.String getFontVariationSettings();
method public boolean getFreezesText();
method public int getGravity();
method public int getHighlightColor();
@@ -52532,6 +52800,7 @@
method public boolean getIncludeFontPadding();
method public android.os.Bundle getInputExtras(boolean);
method public int getInputType();
+ method public boolean getJustify();
method public final android.text.method.KeyListener getKeyListener();
method public final android.text.Layout getLayout();
method public float getLetterSpacing();
@@ -52623,6 +52892,7 @@
method public void setExtractedText(android.view.inputmethod.ExtractedText);
method public void setFilters(android.text.InputFilter[]);
method public void setFontFeatureSettings(java.lang.String);
+ method public void setFontVariationSettings(java.lang.String);
method protected boolean setFrame(int, int, int, int);
method public void setFreezesText(boolean);
method public void setGravity(int);
@@ -52640,6 +52910,7 @@
method public void setIncludeFontPadding(boolean);
method public void setInputExtras(int) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
method public void setInputType(int);
+ method public void setJustify(boolean);
method public void setKeyListener(android.text.method.KeyListener);
method public void setLetterSpacing(float);
method public void setLineSpacing(float, float);
@@ -66965,10 +67236,12 @@
method public java.lang.StringBuffer appendTail(java.lang.StringBuffer);
method public int end();
method public int end(int);
+ method public int end(java.lang.String);
method public boolean find();
method public boolean find(int);
method public java.lang.String group();
method public java.lang.String group(int);
+ method public java.lang.String group(java.lang.String);
method public int groupCount();
method public boolean hasAnchoringBounds();
method public boolean hasTransparentBounds();
@@ -66987,6 +67260,7 @@
method public java.util.regex.Matcher reset(java.lang.CharSequence);
method public int start();
method public int start(int) throws java.lang.IllegalStateException;
+ method public int start(java.lang.String);
method public java.util.regex.MatchResult toMatchResult();
method public java.util.regex.Matcher useAnchoringBounds(boolean);
method public java.util.regex.Matcher usePattern(java.util.regex.Pattern);
diff --git a/api/system-removed.txt b/api/system-removed.txt
index 8016f58..1ba26f5 100644
--- a/api/system-removed.txt
+++ b/api/system-removed.txt
@@ -76,6 +76,11 @@
enum_constant public static final android.graphics.AvoidXfermode.Mode TARGET;
}
+ public class Canvas {
+ method public deprecated boolean clipRegion(android.graphics.Region, android.graphics.Region.Op);
+ method public deprecated boolean clipRegion(android.graphics.Region);
+ }
+
public deprecated class LayerRasterizer extends android.graphics.Rasterizer {
ctor public LayerRasterizer();
method public void addLayer(android.graphics.Paint, float, float);
@@ -119,6 +124,12 @@
package android.net {
+ public class ConnectivityManager {
+ method public deprecated boolean requestRouteToHost(int, int);
+ method public deprecated int startUsingNetworkFeature(int, java.lang.String);
+ method public deprecated int stopUsingNetworkFeature(int, java.lang.String);
+ }
+
public abstract class PskKeyManager {
ctor public PskKeyManager();
field public static final int MAX_IDENTITY_HINT_LENGTH_BYTES = 128; // 0x80
diff --git a/api/test-current.txt b/api/test-current.txt
index 4118053..c2e9fbb 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -284,6 +284,7 @@
field public static final int anyDensity = 16843372; // 0x101026c
field public static final int apduServiceBanner = 16843757; // 0x10103ed
field public static final int apiKey = 16843281; // 0x1010211
+ field public static final int appCategory = 16844102; // 0x1010546
field public static final int author = 16843444; // 0x10102b4
field public static final int authorities = 16842776; // 0x1010018
field public static final int autoAdvanceViewId = 16843535; // 0x101030f
@@ -584,6 +585,7 @@
field public static final int flipInterval = 16843129; // 0x1010179
field public static final int focusable = 16842970; // 0x10100da
field public static final int focusableInTouchMode = 16842971; // 0x10100db
+ field public static final int focusedByDefault = 16844101; // 0x1010545
field public static final deprecated int focusedMonthDateColor = 16843587; // 0x1010343
field public static final int font = 16844082; // 0x1010532
field public static final int fontFamily = 16843692; // 0x10103ac
@@ -2783,6 +2785,7 @@
field public static final int FEEDBACK_HAPTIC = 2; // 0x2
field public static final int FEEDBACK_SPOKEN = 1; // 0x1
field public static final int FEEDBACK_VISUAL = 8; // 0x8
+ field public static final int FLAG_ENABLE_ACCESSIBILITY_VOLUME = 128; // 0x80
field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
@@ -5403,7 +5406,6 @@
method public android.net.Uri getSound();
method public long[] getVibrationPattern();
method public boolean isAllowed();
- method public void setAllowed(boolean);
method public void setBypassDnd(boolean);
method public void setImportance(int);
method public void setLights(boolean);
@@ -5424,7 +5426,8 @@
method public void cancel(int);
method public void cancel(java.lang.String, int);
method public void cancelAll();
- method public void createNotificationChannel(android.app.NotificationChannel, android.app.NotificationManager.OnNotificationChannelCreatedListener, android.os.Handler);
+ method public void createNotificationChannel(android.app.NotificationChannel);
+ method public void createNotificationChannels(java.util.List<android.app.NotificationChannel>);
method public void deleteNotificationChannel(java.lang.String);
method public android.service.notification.StatusBarNotification[] getActiveNotifications();
method public android.app.AutomaticZenRule getAutomaticZenRule(java.lang.String);
@@ -5459,10 +5462,6 @@
field public static final int INTERRUPTION_FILTER_UNKNOWN = 0; // 0x0
}
- public static abstract interface NotificationManager.OnNotificationChannelCreatedListener {
- method public abstract void onNotificationChannelCreated(android.app.NotificationChannel);
- }
-
public static class NotificationManager.Policy implements android.os.Parcelable {
ctor public NotificationManager.Policy(int, int, int);
ctor public NotificationManager.Policy(int, int, int, int);
@@ -6157,6 +6156,7 @@
method public boolean isSecurityLoggingEnabled(android.content.ComponentName);
method public boolean isUninstallBlocked(android.content.ComponentName, java.lang.String);
method public void lockNow();
+ method public void lockNow(int);
method public void reboot(android.content.ComponentName);
method public void removeActiveAdmin(android.content.ComponentName);
method public boolean removeCrossProfileWidgetProvider(android.content.ComponentName, java.lang.String);
@@ -6273,6 +6273,7 @@
field public static final java.lang.String EXTRA_PROVISIONING_WIFI_PROXY_PORT = "android.app.extra.PROVISIONING_WIFI_PROXY_PORT";
field public static final java.lang.String EXTRA_PROVISIONING_WIFI_SECURITY_TYPE = "android.app.extra.PROVISIONING_WIFI_SECURITY_TYPE";
field public static final java.lang.String EXTRA_PROVISIONING_WIFI_SSID = "android.app.extra.PROVISIONING_WIFI_SSID";
+ field public static final int FLAG_EVICT_CE_KEY = 1; // 0x1
field public static final int FLAG_MANAGED_CAN_ACCESS_PARENT = 2; // 0x2
field public static final int FLAG_PARENT_CAN_ACCESS_MANAGED = 1; // 0x1
field public static final int KEYGUARD_DISABLE_FEATURES_ALL = 2147483647; // 0x7fffffff
@@ -6392,7 +6393,8 @@
public static class AssistStructure.ViewNode {
method public float getAlpha();
- method public int getAutoFillId();
+ method public android.view.autofill.AutoFillId getAutoFillId();
+ method public android.view.autofill.AutoFillType getAutoFillType();
method public android.app.assist.AssistStructure.ViewNode getChildAt(int);
method public int getChildCount();
method public java.lang.String getClassName();
@@ -6650,6 +6652,16 @@
field public static final android.os.Parcelable.Creator<android.app.usage.ConfigurationStats> CREATOR;
}
+ public final class ExternalStorageStats implements android.os.Parcelable {
+ method public int describeContents();
+ method public long getAudioBytes();
+ method public long getImageBytes();
+ method public long getTotalBytes();
+ method public long getVideoBytes();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.app.usage.ExternalStorageStats> CREATOR;
+ }
+
public final class NetworkStats implements java.lang.AutoCloseable {
method public void close();
method public boolean getNextBucket(android.app.usage.NetworkStats.Bucket);
@@ -6701,6 +6713,23 @@
method public abstract void onThresholdReached(int, java.lang.String);
}
+ public final class StorageStats implements android.os.Parcelable {
+ method public int describeContents();
+ method public long getCacheBytes();
+ method public long getCodeBytes();
+ method public long getDataBytes();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.app.usage.StorageStats> CREATOR;
+ }
+
+ public class StorageStatsManager {
+ method public long getFreeBytes(java.lang.String);
+ method public long getTotalBytes(java.lang.String);
+ method public android.app.usage.ExternalStorageStats queryExternalStatsForUser(java.lang.String, android.os.UserHandle);
+ method public android.app.usage.StorageStats queryStatsForUid(java.lang.String, int);
+ method public android.app.usage.StorageStats queryStatsForUser(java.lang.String, android.os.UserHandle);
+ }
+
public final class UsageEvents implements android.os.Parcelable {
method public int describeContents();
method public boolean getNextEvent(android.app.usage.UsageEvents.Event);
@@ -6781,6 +6810,7 @@
method protected android.view.View getErrorView();
method protected void prepareView(android.view.View);
method public void setAppWidget(int, android.appwidget.AppWidgetProviderInfo);
+ method public void setAsyncExecutor(java.util.concurrent.Executor);
method public void updateAppWidget(android.widget.RemoteViews);
method public void updateAppWidgetOptions(android.os.Bundle);
method public void updateAppWidgetSize(android.os.Bundle, int, int, int, int);
@@ -8195,9 +8225,14 @@
field public static final java.lang.String EXTRA_SIZE = "android.content.extra.SIZE";
field public static final int NOTIFY_SKIP_NOTIFY_FOR_DESCENDANTS = 2; // 0x2
field public static final int NOTIFY_SYNC_TO_NETWORK = 1; // 0x1
- field public static final java.lang.String QUERY_ARG_SELECTION = "android:query-selection";
- field public static final java.lang.String QUERY_ARG_SELECTION_ARGS = "android:query-selection-args";
- field public static final java.lang.String QUERY_ARG_SORT_ORDER = "android:query-sort-order";
+ field public static final java.lang.String QUERY_ARG_SORT_COLLATION = "android:query-sort-collation";
+ field public static final java.lang.String QUERY_ARG_SORT_COLUMNS = "android:query-sort-columns";
+ field public static final java.lang.String QUERY_ARG_SORT_DIRECTION = "android:query-sort-direction";
+ field public static final java.lang.String QUERY_ARG_SQL_SELECTION = "android:query-sql-selection";
+ field public static final java.lang.String QUERY_ARG_SQL_SELECTION_ARGS = "android:query-sql-selection-args";
+ field public static final java.lang.String QUERY_ARG_SQL_SORT_ORDER = "android:query-sql-sort-order";
+ field public static final int QUERY_SORT_DIRECTION_ASCENDING = 0; // 0x0
+ field public static final int QUERY_SORT_DIRECTION_DESCENDING = 1; // 0x1
field public static final java.lang.String SCHEME_ANDROID_RESOURCE = "android.resource";
field public static final java.lang.String SCHEME_CONTENT = "content";
field public static final java.lang.String SCHEME_FILE = "file";
@@ -8439,6 +8474,7 @@
field public static final java.lang.String SENSOR_SERVICE = "sensor";
field public static final java.lang.String SHORTCUT_SERVICE = "shortcut";
field public static final java.lang.String STORAGE_SERVICE = "storage";
+ field public static final java.lang.String STORAGE_STATS_SERVICE = "storagestats";
field public static final java.lang.String SYSTEM_HEALTH_SERVICE = "systemhealth";
field public static final java.lang.String TELECOM_SERVICE = "telecom";
field public static final java.lang.String TELEPHONY_SERVICE = "phone";
@@ -8452,6 +8488,7 @@
field public static final java.lang.String USER_SERVICE = "user";
field public static final java.lang.String VIBRATOR_SERVICE = "vibrator";
field public static final java.lang.String WALLPAPER_SERVICE = "wallpaper";
+ field public static final java.lang.String WIFI_AWARE_SERVICE = "wifiaware";
field public static final java.lang.String WIFI_P2P_SERVICE = "wifip2p";
field public static final java.lang.String WIFI_SERVICE = "wifi";
field public static final java.lang.String WINDOW_SERVICE = "window";
@@ -9586,9 +9623,19 @@
ctor public ApplicationInfo(android.content.pm.ApplicationInfo);
method public int describeContents();
method public void dump(android.util.Printer, java.lang.String);
+ method public static java.lang.CharSequence getCategoryTitle(android.content.Context, int);
method public boolean isPrivilegedApp();
method public boolean isSystemApp();
method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager);
+ field public static final int CATEGORY_AUDIO = 1; // 0x1
+ field public static final int CATEGORY_GAME = 0; // 0x0
+ field public static final int CATEGORY_IMAGE = 3; // 0x3
+ field public static final int CATEGORY_MAPS = 6; // 0x6
+ field public static final int CATEGORY_NEWS = 5; // 0x5
+ field public static final int CATEGORY_PRODUCTIVITY = 7; // 0x7
+ field public static final int CATEGORY_SOCIAL = 4; // 0x4
+ field public static final int CATEGORY_UNDEFINED = -1; // 0xffffffff
+ field public static final int CATEGORY_VIDEO = 2; // 0x2
field public static final android.os.Parcelable.Creator<android.content.pm.ApplicationInfo> CREATOR;
field public static final int FLAG_ALLOW_BACKUP = 32768; // 0x8000
field public static final int FLAG_ALLOW_CLEAR_USER_DATA = 64; // 0x40
@@ -9602,7 +9649,7 @@
field public static final int FLAG_HAS_CODE = 4; // 0x4
field public static final int FLAG_INSTALLED = 8388608; // 0x800000
field public static final int FLAG_IS_DATA_ONLY = 16777216; // 0x1000000
- field public static final int FLAG_IS_GAME = 33554432; // 0x2000000
+ field public static final deprecated int FLAG_IS_GAME = 33554432; // 0x2000000
field public static final int FLAG_KILL_AFTER_RESTORE = 65536; // 0x10000
field public static final int FLAG_LARGE_HEAP = 1048576; // 0x100000
field public static final int FLAG_MULTIARCH = -2147483648; // 0x80000000
@@ -9623,6 +9670,7 @@
field public static final int FLAG_USES_CLEARTEXT_TRAFFIC = 134217728; // 0x8000000
field public static final int FLAG_VM_SAFE_MODE = 16384; // 0x4000
field public java.lang.String backupAgentName;
+ field public int category;
field public java.lang.String className;
field public int compatibleWidthLimitDp;
field public java.lang.String dataDir;
@@ -9754,6 +9802,7 @@
public class LauncherApps {
ctor public LauncherApps(android.content.Context);
method public java.util.List<android.content.pm.LauncherActivityInfo> getActivityList(java.lang.String, android.os.UserHandle);
+ method public android.content.pm.ApplicationInfo getApplicationInfo(java.lang.String, int, android.os.UserHandle);
method public android.content.pm.LauncherApps.PinItemRequest getPinItemRequest(android.content.Intent);
method public android.graphics.drawable.Drawable getShortcutBadgedIconDrawable(android.content.pm.ShortcutInfo, int);
method public android.graphics.drawable.Drawable getShortcutIconDrawable(android.content.pm.ShortcutInfo, int);
@@ -9800,9 +9849,6 @@
field public static final int REQUEST_TYPE_SHORTCUT = 1; // 0x1
}
- public static abstract class LauncherApps.PinItemRequest.RequestType implements java.lang.annotation.Annotation {
- }
-
public static class LauncherApps.ShortcutQuery {
ctor public LauncherApps.ShortcutQuery();
method public android.content.pm.LauncherApps.ShortcutQuery setActivity(android.content.ComponentName);
@@ -10046,6 +10092,7 @@
method public abstract android.content.pm.ResolveInfo resolveActivity(android.content.Intent, int);
method public abstract android.content.pm.ProviderInfo resolveContentProvider(java.lang.String, int);
method public abstract android.content.pm.ResolveInfo resolveService(android.content.Intent, int);
+ method public abstract void setApplicationCategoryHint(java.lang.String, int);
method public abstract void setApplicationEnabledSetting(java.lang.String, int, int);
method public abstract void setComponentEnabledSetting(android.content.ComponentName, int, int);
method public abstract void setInstallerPackageName(java.lang.String, java.lang.String);
@@ -10139,6 +10186,7 @@
field public static final java.lang.String FEATURE_WATCH = "android.hardware.type.watch";
field public static final java.lang.String FEATURE_WEBVIEW = "android.software.webview";
field public static final java.lang.String FEATURE_WIFI = "android.hardware.wifi";
+ field public static final java.lang.String FEATURE_WIFI_AWARE = "android.hardware.wifi.aware";
field public static final java.lang.String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct";
field public static final int GET_ACTIVITIES = 1; // 0x1
field public static final int GET_CONFIGURATIONS = 16384; // 0x4000
@@ -11980,8 +12028,6 @@
method public boolean clipRect(float, float, float, float, android.graphics.Region.Op);
method public boolean clipRect(float, float, float, float);
method public boolean clipRect(int, int, int, int);
- method public deprecated boolean clipRegion(android.graphics.Region, android.graphics.Region.Op);
- method public deprecated boolean clipRegion(android.graphics.Region);
method public void concat(android.graphics.Matrix);
method public void drawARGB(int, int, int, int);
method public void drawArc(android.graphics.RectF, float, float, boolean, android.graphics.Paint);
@@ -12495,6 +12541,7 @@
method public int getFontMetricsInt(android.graphics.Paint.FontMetricsInt);
method public android.graphics.Paint.FontMetricsInt getFontMetricsInt();
method public float getFontSpacing();
+ method public java.lang.String getFontVariationSettings();
method public int getHinting();
method public float getLetterSpacing();
method public android.graphics.MaskFilter getMaskFilter();
@@ -12552,6 +12599,7 @@
method public void setFilterBitmap(boolean);
method public void setFlags(int);
method public void setFontFeatureSettings(java.lang.String);
+ method public void setFontVariationSettings(java.lang.String);
method public void setHinting(int);
method public void setLetterSpacing(float);
method public void setLinearText(boolean);
@@ -24062,11 +24110,8 @@
method public boolean requestBandwidthUpdate(android.net.Network);
method public void requestNetwork(android.net.NetworkRequest, android.net.ConnectivityManager.NetworkCallback);
method public void requestNetwork(android.net.NetworkRequest, android.app.PendingIntent);
- method public deprecated boolean requestRouteToHost(int, int);
method public deprecated void setNetworkPreference(int);
method public static deprecated boolean setProcessDefaultNetwork(android.net.Network);
- method public deprecated int startUsingNetworkFeature(int, java.lang.String);
- method public deprecated int stopUsingNetworkFeature(int, java.lang.String);
method public void unregisterNetworkCallback(android.net.ConnectivityManager.NetworkCallback);
method public void unregisterNetworkCallback(android.app.PendingIntent);
field public static final deprecated java.lang.String ACTION_BACKGROUND_DATA_SETTING_CHANGED = "android.net.conn.BACKGROUND_DATA_SETTING_CHANGED";
@@ -24281,6 +24326,7 @@
field public static final int TRANSPORT_ETHERNET = 3; // 0x3
field public static final int TRANSPORT_VPN = 4; // 0x4
field public static final int TRANSPORT_WIFI = 1; // 0x1
+ field public static final int TRANSPORT_WIFI_AWARE = 5; // 0x5
}
public class NetworkInfo implements android.os.Parcelable {
@@ -25274,6 +25320,122 @@
}
+package android.net.wifi.aware {
+
+ public class AttachCallback {
+ ctor public AttachCallback();
+ method public void onAttachFailed();
+ method public void onAttached(android.net.wifi.aware.WifiAwareSession);
+ }
+
+ public final class Characteristics implements android.os.Parcelable {
+ method public int describeContents();
+ method public int getMaxMatchFilterLength();
+ method public int getMaxServiceNameLength();
+ method public int getMaxServiceSpecificInfoLength();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.net.wifi.aware.Characteristics> CREATOR;
+ }
+
+ public class DiscoverySession {
+ method public java.lang.String createNetworkSpecifier(android.net.wifi.aware.PeerHandle, byte[]);
+ method public void destroy();
+ method public static int getMaxSendRetryCount();
+ method public void sendMessage(android.net.wifi.aware.PeerHandle, int, byte[], int);
+ method public void sendMessage(android.net.wifi.aware.PeerHandle, int, byte[]);
+ }
+
+ public class DiscoverySessionCallback {
+ ctor public DiscoverySessionCallback();
+ method public void onMessageReceived(android.net.wifi.aware.PeerHandle, byte[]);
+ method public void onMessageSendFailed(int);
+ method public void onMessageSendSucceeded(int);
+ method public void onPublishStarted(android.net.wifi.aware.PublishDiscoverySession);
+ method public void onServiceDiscovered(android.net.wifi.aware.PeerHandle, byte[], java.util.List<byte[]>);
+ method public void onSessionConfigFailed();
+ method public void onSessionConfigUpdated();
+ method public void onSessionTerminated();
+ method public void onSubscribeStarted(android.net.wifi.aware.SubscribeDiscoverySession);
+ }
+
+ public class IdentityChangedListener {
+ ctor public IdentityChangedListener();
+ method public void onIdentityChanged(byte[]);
+ }
+
+ public class PeerHandle {
+ }
+
+ public final class PublishConfig implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.net.wifi.aware.PublishConfig> CREATOR;
+ field public static final int PUBLISH_TYPE_SOLICITED = 1; // 0x1
+ field public static final int PUBLISH_TYPE_UNSOLICITED = 0; // 0x0
+ }
+
+ public static final class PublishConfig.Builder {
+ ctor public PublishConfig.Builder();
+ method public android.net.wifi.aware.PublishConfig build();
+ method public android.net.wifi.aware.PublishConfig.Builder setMatchFilter(java.util.List<byte[]>);
+ method public android.net.wifi.aware.PublishConfig.Builder setPublishCount(int);
+ method public android.net.wifi.aware.PublishConfig.Builder setPublishType(int);
+ method public android.net.wifi.aware.PublishConfig.Builder setServiceName(java.lang.String);
+ method public android.net.wifi.aware.PublishConfig.Builder setServiceSpecificInfo(byte[]);
+ method public android.net.wifi.aware.PublishConfig.Builder setTerminateNotificationEnabled(boolean);
+ method public android.net.wifi.aware.PublishConfig.Builder setTtlSec(int);
+ }
+
+ public class PublishDiscoverySession extends android.net.wifi.aware.DiscoverySession {
+ method public void updatePublish(android.net.wifi.aware.PublishConfig);
+ }
+
+ public final class SubscribeConfig implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.net.wifi.aware.SubscribeConfig> CREATOR;
+ field public static final int MATCH_STYLE_ALL = 1; // 0x1
+ field public static final int MATCH_STYLE_FIRST_ONLY = 0; // 0x0
+ field public static final int SUBSCRIBE_TYPE_ACTIVE = 1; // 0x1
+ field public static final int SUBSCRIBE_TYPE_PASSIVE = 0; // 0x0
+ }
+
+ public static final class SubscribeConfig.Builder {
+ ctor public SubscribeConfig.Builder();
+ method public android.net.wifi.aware.SubscribeConfig build();
+ method public android.net.wifi.aware.SubscribeConfig.Builder setMatchFilter(java.util.List<byte[]>);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setMatchStyle(int);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setServiceName(java.lang.String);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setServiceSpecificInfo(byte[]);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setSubscribeCount(int);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setSubscribeType(int);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setTerminateNotificationEnabled(boolean);
+ method public android.net.wifi.aware.SubscribeConfig.Builder setTtlSec(int);
+ }
+
+ public class SubscribeDiscoverySession extends android.net.wifi.aware.DiscoverySession {
+ method public void updateSubscribe(android.net.wifi.aware.SubscribeConfig);
+ }
+
+ public class WifiAwareManager {
+ method public void attach(android.net.wifi.aware.AttachCallback, android.os.Handler);
+ method public void attach(android.net.wifi.aware.AttachCallback, android.net.wifi.aware.IdentityChangedListener, android.os.Handler);
+ method public android.net.wifi.aware.Characteristics getCharacteristics();
+ method public boolean isAvailable();
+ field public static final java.lang.String ACTION_WIFI_AWARE_STATE_CHANGED = "android.net.wifi.aware.action.WIFI_AWARE_STATE_CHANGED";
+ field public static final int WIFI_AWARE_DATA_PATH_ROLE_INITIATOR = 0; // 0x0
+ field public static final int WIFI_AWARE_DATA_PATH_ROLE_RESPONDER = 1; // 0x1
+ }
+
+ public class WifiAwareSession {
+ method public java.lang.String createNetworkSpecifier(int, byte[], byte[]);
+ method public void destroy();
+ method public void publish(android.net.wifi.aware.PublishConfig, android.net.wifi.aware.DiscoverySessionCallback, android.os.Handler);
+ method public void subscribe(android.net.wifi.aware.SubscribeConfig, android.net.wifi.aware.DiscoverySessionCallback, android.os.Handler);
+ }
+
+}
+
package android.net.wifi.p2p {
public class WifiP2pConfig implements android.os.Parcelable {
@@ -28643,7 +28805,7 @@
method public void surfaceChanged(android.view.SurfaceHolder, int, int, int);
method public void surfaceCreated(android.view.SurfaceHolder);
method public void surfaceDestroyed(android.view.SurfaceHolder);
- method public void surfaceRedrawNeeded(android.view.SurfaceHolder);
+ method public deprecated void surfaceRedrawNeeded(android.view.SurfaceHolder);
field public static final int DEBUG_CHECK_GL_ERROR = 1; // 0x1
field public static final int DEBUG_LOG_GL_CALLS = 2; // 0x2
field public static final int RENDERMODE_CONTINUOUSLY = 1; // 0x1
@@ -31022,6 +31184,7 @@
field public static final java.lang.String ACTION_SET_ALARM = "android.intent.action.SET_ALARM";
field public static final java.lang.String ACTION_SET_TIMER = "android.intent.action.SET_TIMER";
field public static final java.lang.String ACTION_SHOW_ALARMS = "android.intent.action.SHOW_ALARMS";
+ field public static final java.lang.String ACTION_SHOW_TIMERS = "android.intent.action.SHOW_TIMERS";
field public static final java.lang.String ACTION_SNOOZE_ALARM = "android.intent.action.SNOOZE_ALARM";
field public static final java.lang.String ALARM_SEARCH_MODE_ALL = "android.all";
field public static final java.lang.String ALARM_SEARCH_MODE_LABEL = "android.label";
@@ -32644,7 +32807,10 @@
method public final android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException;
method public android.content.res.AssetFileDescriptor openTypedDocument(java.lang.String, java.lang.String, android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException;
method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
+ method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.os.CancellationSignal);
+ method public final android.database.Cursor query(android.net.Uri, java.lang.String[], android.os.Bundle, android.os.CancellationSignal);
method public abstract android.database.Cursor queryChildDocuments(java.lang.String, java.lang.String[], java.lang.String) throws java.io.FileNotFoundException;
+ method public android.database.Cursor queryChildDocuments(java.lang.String, java.lang.String[], android.os.Bundle) throws java.io.FileNotFoundException;
method public abstract android.database.Cursor queryDocument(java.lang.String, java.lang.String[]) throws java.io.FileNotFoundException;
method public android.database.Cursor queryRecentDocuments(java.lang.String, java.lang.String[]) throws java.io.FileNotFoundException;
method public abstract android.database.Cursor queryRoots(java.lang.String[]) throws java.io.FileNotFoundException;
@@ -35135,26 +35301,19 @@
method public void onDisconnected();
method public abstract void onFillRequest(android.app.assist.AssistStructure, android.os.Bundle, android.os.CancellationSignal, android.service.autofill.FillCallback);
method public abstract void onSaveRequest(android.app.assist.AssistStructure, android.os.Bundle, android.os.CancellationSignal, android.service.autofill.SaveCallback);
+ field public static final java.lang.String EXTRA_DATASET_EXTRAS = "android.service.autofill.extra.DATASET_EXTRAS";
+ field public static final java.lang.String EXTRA_RESPONSE_EXTRAS = "android.service.autofill.extra.RESPONSE_EXTRAS";
field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutoFillService";
}
public final class FillCallback {
method public void onFailure(java.lang.CharSequence);
- method public void onSuccess(android.service.autofill.FillCallback.FillData);
- }
-
- public static final class FillCallback.FillData {
- }
-
- public static class FillCallback.FillData.Builder {
- ctor public FillCallback.FillData.Builder();
- method public android.service.autofill.FillCallback.FillData build();
- method public android.service.autofill.FillCallback.FillData.Builder setTextField(int, java.lang.String);
+ method public void onSuccess(android.view.autofill.FillResponse);
}
public final class SaveCallback {
method public void onFailure(java.lang.CharSequence);
- method public void onSuccess(int[]);
+ method public void onSuccess(android.view.autofill.AutoFillId[]);
}
}
@@ -35433,6 +35592,7 @@
method public java.util.List<android.app.NotificationChannel> getNotificationChannels(java.lang.String);
method public final android.os.IBinder onBind(android.content.Intent);
method public abstract android.service.notification.Adjustment onNotificationEnqueued(android.service.notification.StatusBarNotification, int, boolean);
+ method public abstract void onNotificationSnoozedUntilContext(android.service.notification.StatusBarNotification, java.lang.String);
method public void updateNotificationChannel(java.lang.String, android.app.NotificationChannel);
field public static final java.lang.String SERVICE_INTERFACE = "android.service.notification.NotificationAssistantService";
}
@@ -35464,6 +35624,7 @@
method public static void requestRebind(android.content.ComponentName);
method public final void requestUnbind();
method public final void setNotificationsShown(java.lang.String[]);
+ method public final void snoozeNotification(java.lang.String, java.lang.String);
method public final void snoozeNotification(java.lang.String, long);
method public final void snoozeNotification(java.lang.String);
method public final void unsnoozeNotification(java.lang.String);
@@ -36819,6 +36980,7 @@
method public void unhold();
method public void unregisterCallback(android.telecom.Call.Callback);
field public static final java.lang.String AVAILABLE_PHONE_ACCOUNTS = "selectPhoneAccountAccounts";
+ field public static final java.lang.String EXTRA_LAST_EMERGENCY_CALLBACK_TIME_MILLIS = "android.telecom.extra.LAST_EMERGENCY_CALLBACK_TIME_MILLIS";
field public static final int STATE_ACTIVE = 4; // 0x4
field public static final int STATE_CONNECTING = 9; // 0x9
field public static final int STATE_DIALING = 1; // 0x1
@@ -39002,6 +39164,7 @@
method public android.content.pm.ResolveInfo resolveActivity(android.content.Intent, int);
method public android.content.pm.ProviderInfo resolveContentProvider(java.lang.String, int);
method public android.content.pm.ResolveInfo resolveService(android.content.Intent, int);
+ method public void setApplicationCategoryHint(java.lang.String, int);
method public void setApplicationEnabledSetting(java.lang.String, int, int);
method public void setComponentEnabledSetting(android.content.ComponentName, int, int);
method public void setInstallerPackageName(java.lang.String, java.lang.String);
@@ -39554,6 +39717,7 @@
method public android.text.StaticLayout.Builder setHyphenationFrequency(int);
method public android.text.StaticLayout.Builder setIncludePad(boolean);
method public android.text.StaticLayout.Builder setIndents(int[], int[]);
+ method public android.text.StaticLayout.Builder setJustify(boolean);
method public android.text.StaticLayout.Builder setLineSpacing(float, float);
method public android.text.StaticLayout.Builder setMaxLines(int);
method public android.text.StaticLayout.Builder setText(java.lang.CharSequence);
@@ -42106,7 +42270,7 @@
method public android.view.View findNearestTouchable(android.view.ViewGroup, int, int, int, int[]);
method public final android.view.View findNextFocus(android.view.ViewGroup, android.view.View, int);
method public android.view.View findNextFocusFromRect(android.view.ViewGroup, android.graphics.Rect, int);
- method public android.view.View findNextKeyboardNavigationCluster(int, android.view.View, android.view.View, int);
+ method public android.view.View findNextKeyboardNavigationGroup(int, android.view.View, android.view.View, int);
method public static android.view.FocusFinder getInstance();
}
@@ -43331,6 +43495,7 @@
public static abstract interface SurfaceHolder.Callback2 implements android.view.SurfaceHolder.Callback {
method public abstract void surfaceRedrawNeeded(android.view.SurfaceHolder);
+ method public default void surfaceRedrawNeededAsync(android.view.SurfaceHolder, java.lang.Runnable);
}
public class SurfaceView extends android.view.View {
@@ -43405,12 +43570,13 @@
method public void addChildrenForAccessibility(java.util.ArrayList<android.view.View>);
method public void addFocusables(java.util.ArrayList<android.view.View>, int);
method public void addFocusables(java.util.ArrayList<android.view.View>, int, int);
- method public void addKeyboardNavigationClusters(int, java.util.Collection<android.view.View>, int);
+ method public void addKeyboardNavigationGroups(int, java.util.Collection<android.view.View>, int);
method public void addOnAttachStateChangeListener(android.view.View.OnAttachStateChangeListener);
method public void addOnLayoutChangeListener(android.view.View.OnLayoutChangeListener);
method public void addTouchables(java.util.ArrayList<android.view.View>);
method public android.view.ViewPropertyAnimator animate();
method public void announceForAccessibility(java.lang.CharSequence);
+ method public void autoFill(android.view.autofill.AutoFillValue);
method protected boolean awakenScrollBars();
method protected boolean awakenScrollBars(int);
method protected boolean awakenScrollBars(int, boolean);
@@ -43462,8 +43628,8 @@
method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
method public boolean dispatchNestedScroll(int, int, int, int, int[]);
method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
- method public deprecated void dispatchProvideStructure(android.view.ViewStructure);
- method public void dispatchProvideStructure(android.view.ViewStructure, int);
+ method public void dispatchProvideAutoFillStructure(android.view.ViewStructure, int);
+ method public void dispatchProvideStructure(android.view.ViewStructure);
method protected void dispatchRestoreInstanceState(android.util.SparseArray<android.os.Parcelable>);
method protected void dispatchSaveInstanceState(android.util.SparseArray<android.os.Parcelable>);
method protected void dispatchSetActivated(boolean);
@@ -43498,6 +43664,8 @@
method public float getAlpha();
method public android.view.animation.Animation getAnimation();
method public android.os.IBinder getApplicationWindowToken();
+ method public android.view.autofill.AutoFillType getAutoFillType();
+ method public android.view.autofill.VirtualViewDelegate getAutoFillVirtualViewDelegate(android.view.autofill.VirtualViewDelegate.Callback);
method public android.graphics.drawable.Drawable getBackground();
method public android.content.res.ColorStateList getBackgroundTintList();
method public android.graphics.PorterDuff.Mode getBackgroundTintMode();
@@ -43661,6 +43829,7 @@
method public final boolean isFocusable();
method public final boolean isFocusableInTouchMode();
method public boolean isFocused();
+ method public final boolean isFocusedByDefault();
method public boolean isHapticFeedbackEnabled();
method public boolean isHardwareAccelerated();
method public boolean isHorizontalFadingEdgeEnabled();
@@ -43694,7 +43863,7 @@
method public boolean isVerticalFadingEdgeEnabled();
method public boolean isVerticalScrollBarEnabled();
method public void jumpDrawablesToCurrentState();
- method public android.view.View keyboardNavigationClusterSearch(int, android.view.View, int);
+ method public android.view.View keyboardNavigationGroupSearch(int, android.view.View, int);
method public void layout(int, int, int, int);
method public final void measure(int, int);
method protected static int[] mergeDrawableStates(int[], int[]);
@@ -43735,10 +43904,10 @@
method protected void onMeasure(int, int);
method protected void onOverScrolled(int, int, boolean, boolean);
method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
- method public deprecated void onProvideStructure(android.view.ViewStructure);
- method public void onProvideStructure(android.view.ViewStructure, int);
- method public deprecated void onProvideVirtualStructure(android.view.ViewStructure);
- method public void onProvideVirtualStructure(android.view.ViewStructure, int);
+ method public void onProvideAutoFillStructure(android.view.ViewStructure, int);
+ method public void onProvideAutoFillVirtualStructure(android.view.ViewStructure, int);
+ method public void onProvideStructure(android.view.ViewStructure);
+ method public void onProvideVirtualStructure(android.view.ViewStructure);
method public android.view.PointerIcon onResolvePointerIcon(android.view.MotionEvent, int);
method protected void onRestoreInstanceState(android.os.Parcelable);
method public void onRtlPropertiesChanged(int);
@@ -43791,8 +43960,8 @@
method public final void requestUnbufferedDispatch(android.view.MotionEvent);
method public static int resolveSize(int, int);
method public static int resolveSizeAndState(int, int, int);
+ method public boolean restoreDefaultFocus(int);
method public void restoreHierarchyState(android.util.SparseArray<android.os.Parcelable>);
- method public boolean restoreLastFocus();
method public void saveHierarchyState(android.util.SparseArray<android.os.Parcelable>);
method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
method public void scrollBy(int, int);
@@ -43830,6 +43999,7 @@
method public void setFitsSystemWindows(boolean);
method public void setFocusable(boolean);
method public void setFocusableInTouchMode(boolean);
+ method public void setFocusedByDefault(boolean);
method public void setForeground(android.graphics.drawable.Drawable);
method public void setForegroundGravity(int);
method public void setForegroundTintList(android.content.res.ColorStateList);
@@ -43945,8 +44115,8 @@
field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
field public static final android.util.Property<android.view.View, java.lang.Float> ALPHA;
- field public static final int ASSIST_FLAG_NON_SANITIZED_TEXT = 2; // 0x2
- field public static final int ASSIST_FLAG_SANITIZED_TEXT = 1; // 0x1
+ field public static final int AUTO_FILL_FLAG_TYPE_FILL = 1; // 0x1
+ field public static final int AUTO_FILL_FLAG_TYPE_SAVE = 2; // 0x2
field public static final int DRAG_FLAG_GLOBAL = 256; // 0x100
field public static final int DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION = 64; // 0x40
field public static final int DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION = 128; // 0x80
@@ -43976,8 +44146,6 @@
field public static final int FOCUS_BACKWARD = 1; // 0x1
field public static final int FOCUS_DOWN = 130; // 0x82
field public static final int FOCUS_FORWARD = 2; // 0x2
- field public static final int FOCUS_GROUP_CLUSTER = 1; // 0x1
- field public static final int FOCUS_GROUP_SECTION = 2; // 0x2
field public static final int FOCUS_LEFT = 17; // 0x11
field public static final int FOCUS_RIGHT = 66; // 0x42
field public static final int FOCUS_UP = 33; // 0x21
@@ -43989,6 +44157,8 @@
field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
field public static final int INVISIBLE = 4; // 0x4
field public static final int KEEP_SCREEN_ON = 67108864; // 0x4000000
+ field public static final int KEYBOARD_NAVIGATION_GROUP_CLUSTER = 1; // 0x1
+ field public static final int KEYBOARD_NAVIGATION_GROUP_SECTION = 2; // 0x2
field public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
field public static final int LAYER_TYPE_NONE = 0; // 0x0
field public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
@@ -44511,7 +44681,7 @@
method public abstract boolean isLayoutRequested();
method public abstract boolean isTextAlignmentResolved();
method public abstract boolean isTextDirectionResolved();
- method public abstract android.view.View keyboardNavigationClusterSearch(int, android.view.View, int);
+ method public abstract android.view.View keyboardNavigationGroupSearch(int, android.view.View, int);
method public abstract void notifySubtreeAccessibilityStateChanged(android.view.View, android.view.View, int);
method public abstract boolean onNestedFling(android.view.View, float, float, boolean);
method public abstract boolean onNestedPreFling(android.view.View, float, float);
@@ -44580,6 +44750,7 @@
method public abstract int addChildCount(int);
method public abstract void asyncCommit();
method public abstract android.view.ViewStructure asyncNewChild(int);
+ method public abstract android.view.ViewStructure asyncNewChild(int, int);
method public abstract int getChildCount();
method public abstract android.os.Bundle getExtras();
method public abstract java.lang.CharSequence getHint();
@@ -44588,9 +44759,11 @@
method public abstract int getTextSelectionStart();
method public abstract boolean hasExtras();
method public abstract android.view.ViewStructure newChild(int);
+ method public abstract android.view.ViewStructure newChild(int, int);
method public abstract void setAccessibilityFocused(boolean);
method public abstract void setActivated(boolean);
method public abstract void setAlpha(float);
+ method public abstract void setAutoFillType(android.view.autofill.AutoFillType);
method public abstract void setCheckable(boolean);
method public abstract void setChecked(boolean);
method public abstract void setChildCount(int);
@@ -45156,6 +45329,7 @@
}
public final class AccessibilityManager {
+ method public boolean addAccessibilityServicesStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener);
method public boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
method public boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
method public deprecated java.util.List<android.content.pm.ServiceInfo> getAccessibilityServiceList();
@@ -45164,11 +45338,16 @@
method public void interrupt();
method public boolean isEnabled();
method public boolean isTouchExplorationEnabled();
+ method public boolean removeAccessibilityServicesStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener);
method public boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
method public boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
method public void sendAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
}
+ public static abstract interface AccessibilityManager.AccessibilityServicesStateChangeListener {
+ method public abstract void onAccessibilityServicesStateChanged();
+ }
+
public static abstract interface AccessibilityManager.AccessibilityStateChangeListener {
method public abstract void onAccessibilityStateChanged(boolean);
}
@@ -45813,6 +45992,80 @@
}
+package android.view.autofill {
+
+ public final class AutoFillId implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.view.autofill.AutoFillId> CREATOR;
+ }
+
+ public final class AutoFillType implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.view.autofill.AutoFillType forList();
+ method public static android.view.autofill.AutoFillType forText(int);
+ method public static android.view.autofill.AutoFillType forToggle();
+ method public int getSubType();
+ method public boolean isList();
+ method public boolean isText();
+ method public boolean isToggle();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.view.autofill.AutoFillType> CREATOR;
+ }
+
+ public final class AutoFillValue implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.view.autofill.AutoFillValue forList(int);
+ method public static android.view.autofill.AutoFillValue forText(java.lang.CharSequence);
+ method public static android.view.autofill.AutoFillValue forToggle(boolean);
+ method public int getListValue();
+ method public java.lang.CharSequence getTextValue();
+ method public boolean getToggleValue();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.view.autofill.AutoFillValue> CREATOR;
+ }
+
+ public final class Dataset implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.view.autofill.Dataset> CREATOR;
+ }
+
+ public static final class Dataset.Builder {
+ ctor public Dataset.Builder(java.lang.CharSequence);
+ method public android.view.autofill.Dataset build();
+ method public android.view.autofill.Dataset.Builder setExtras(android.os.Bundle);
+ method public android.view.autofill.Dataset.Builder setValue(android.view.autofill.AutoFillId, android.view.autofill.AutoFillValue);
+ }
+
+ public final class FillResponse implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.view.autofill.FillResponse> CREATOR;
+ }
+
+ public static final class FillResponse.Builder {
+ ctor public FillResponse.Builder();
+ method public android.view.autofill.FillResponse.Builder addDataset(android.view.autofill.Dataset);
+ method public android.view.autofill.FillResponse.Builder addSavableFields(android.view.autofill.AutoFillId...);
+ method public android.view.autofill.FillResponse build();
+ method public android.view.autofill.FillResponse.Builder setExtras(android.os.Bundle);
+ }
+
+ public abstract class VirtualViewDelegate {
+ ctor public VirtualViewDelegate();
+ method public abstract void autoFill(int, android.view.autofill.AutoFillValue);
+ }
+
+ public static abstract class VirtualViewDelegate.Callback {
+ ctor public VirtualViewDelegate.Callback();
+ method public void onFocusChanged(int, boolean);
+ method public void onNodeRemoved(int...);
+ method public void onValueChanged(int);
+ }
+
+}
+
package android.view.inputmethod {
public class BaseInputConnection implements android.view.inputmethod.InputConnection {
@@ -49251,6 +49504,7 @@
method public int getExtendedPaddingTop();
method public android.text.InputFilter[] getFilters();
method public java.lang.String getFontFeatureSettings();
+ method public java.lang.String getFontVariationSettings();
method public boolean getFreezesText();
method public int getGravity();
method public int getHighlightColor();
@@ -49264,6 +49518,7 @@
method public boolean getIncludeFontPadding();
method public android.os.Bundle getInputExtras(boolean);
method public int getInputType();
+ method public boolean getJustify();
method public final android.text.method.KeyListener getKeyListener();
method public final android.text.Layout getLayout();
method public float getLetterSpacing();
@@ -49355,6 +49610,7 @@
method public void setExtractedText(android.view.inputmethod.ExtractedText);
method public void setFilters(android.text.InputFilter[]);
method public void setFontFeatureSettings(java.lang.String);
+ method public void setFontVariationSettings(java.lang.String);
method protected boolean setFrame(int, int, int, int);
method public void setFreezesText(boolean);
method public void setGravity(int);
@@ -49372,6 +49628,7 @@
method public void setIncludeFontPadding(boolean);
method public void setInputExtras(int) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
method public void setInputType(int);
+ method public void setJustify(boolean);
method public void setKeyListener(android.text.method.KeyListener);
method public void setLetterSpacing(float);
method public void setLineSpacing(float, float);
@@ -63705,10 +63962,12 @@
method public java.lang.StringBuffer appendTail(java.lang.StringBuffer);
method public int end();
method public int end(int);
+ method public int end(java.lang.String);
method public boolean find();
method public boolean find(int);
method public java.lang.String group();
method public java.lang.String group(int);
+ method public java.lang.String group(java.lang.String);
method public int groupCount();
method public boolean hasAnchoringBounds();
method public boolean hasTransparentBounds();
@@ -63727,6 +63986,7 @@
method public java.util.regex.Matcher reset(java.lang.CharSequence);
method public int start();
method public int start(int) throws java.lang.IllegalStateException;
+ method public int start(java.lang.String);
method public java.util.regex.MatchResult toMatchResult();
method public java.util.regex.Matcher useAnchoringBounds(boolean);
method public java.util.regex.Matcher usePattern(java.util.regex.Pattern);
diff --git a/api/test-removed.txt b/api/test-removed.txt
index 35b4859..ab22b6e 100644
--- a/api/test-removed.txt
+++ b/api/test-removed.txt
@@ -78,6 +78,11 @@
enum_constant public static final android.graphics.AvoidXfermode.Mode TARGET;
}
+ public class Canvas {
+ method public deprecated boolean clipRegion(android.graphics.Region, android.graphics.Region.Op);
+ method public deprecated boolean clipRegion(android.graphics.Region);
+ }
+
public deprecated class LayerRasterizer extends android.graphics.Rasterizer {
ctor public LayerRasterizer();
method public void addLayer(android.graphics.Paint, float, float);
@@ -121,6 +126,12 @@
package android.net {
+ public class ConnectivityManager {
+ method public deprecated boolean requestRouteToHost(int, int);
+ method public deprecated int startUsingNetworkFeature(int, java.lang.String);
+ method public deprecated int stopUsingNetworkFeature(int, java.lang.String);
+ }
+
public abstract class PskKeyManager {
ctor public PskKeyManager();
field public static final int MAX_IDENTITY_HINT_LENGTH_BYTES = 128; // 0x80
diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
index ee03280..07a8253 100644
--- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
+++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
@@ -319,6 +319,13 @@
*/
public static final int FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 0x00000040;
+ /**
+ * This flag requests that all audio tracks system-wide with
+ * {@link android.media.AudioAttributes#USAGE_ASSISTANCE_ACCESSIBILITY} be controlled by the
+ * {@link android.media.AudioManager#STREAM_ACCESSIBILITY} volume.
+ */
+ public static final int FLAG_ENABLE_ACCESSIBILITY_VOLUME = 0x00000080;
+
/** {@hide} */
public static final int FLAG_FORCE_DIRECT_BOOT_AWARE = 0x00010000;
@@ -930,6 +937,8 @@
return "FLAG_REQUEST_FILTER_KEY_EVENTS";
case FLAG_RETRIEVE_INTERACTIVE_WINDOWS:
return "FLAG_RETRIEVE_INTERACTIVE_WINDOWS";
+ case FLAG_ENABLE_ACCESSIBILITY_VOLUME:
+ return "FLAG_ENABLE_ACCESSIBILITY_VOLUME";
default:
return null;
}
diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java
index 58f5a78..1294325 100644
--- a/core/java/android/app/ActionBar.java
+++ b/core/java/android/app/ActionBar.java
@@ -31,13 +31,12 @@
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
-import android.view.View.OnFocusChangeListener;
import android.view.ViewDebug;
import android.view.ViewGroup;
import android.view.ViewHierarchyEncoder;
-import android.view.ViewParent;
import android.view.Window;
import android.widget.SpinnerAdapter;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -1093,67 +1092,11 @@
public void setWindowTitle(CharSequence title) {
}
- /**
- * Attempts to move focus to the ActionBar if it does not already contain the focus.
- *
- * @return {@code true} if focus changes or {@code false} if focus doesn't change.
- * @hide
- */
- public boolean requestFocus() {
- return false;
- }
-
/** @hide */
public void onDestroy() {
}
/**
- * Common implementation for requestFocus that takes in the Toolbar and moves focus
- * to the contents. This makes the ViewGroups containing the toolbar allow focus while it stays
- * in the ActionBar and then prevents it again once it leaves.
- *
- * @param viewGroup The toolbar ViewGroup
- * @return {@code true} if focus changes or {@code false} if focus doesn't change.
- * @hide
- */
- protected boolean requestFocus(ViewGroup viewGroup) {
- if (viewGroup != null && !viewGroup.hasFocus()) {
- final ViewGroup toolbar = viewGroup.getTouchscreenBlocksFocus() ? viewGroup : null;
- ViewParent parent = viewGroup.getParent();
- ViewGroup container = null;
- while (parent != null && parent instanceof ViewGroup) {
- final ViewGroup vgParent = (ViewGroup) parent;
- if (vgParent.getTouchscreenBlocksFocus()) {
- container = vgParent;
- break;
- }
- parent = vgParent.getParent();
- }
- if (container != null) {
- container.setTouchscreenBlocksFocus(false);
- }
- if (toolbar != null) {
- toolbar.setTouchscreenBlocksFocus(false);
- }
- viewGroup.requestFocus();
- final View focused = viewGroup.findFocus();
- if (focused != null) {
- focused.setOnFocusChangeListener(new FollowOutOfActionBar(viewGroup,
- container, toolbar));
- } else {
- if (container != null) {
- container.setTouchscreenBlocksFocus(true);
- }
- if (toolbar != null) {
- toolbar.setTouchscreenBlocksFocus(true);
- }
- }
- return true;
- }
- return false;
- }
-
- /**
* Listener interface for ActionBar navigation events.
*
* @deprecated Action bar navigation modes are deprecated and not supported by inline
@@ -1474,43 +1417,4 @@
encoder.addProperty("gravity", gravity);
}
}
-
- /**
- * Tracks the focused View until it leaves the ActionBar, then it resets the
- * touchscreenBlocksFocus value.
- */
- private static class FollowOutOfActionBar implements OnFocusChangeListener, Runnable {
- private final ViewGroup mFocusRoot;
- private final ViewGroup mContainer;
- private final ViewGroup mToolbar;
-
- public FollowOutOfActionBar(ViewGroup focusRoot, ViewGroup container, ViewGroup toolbar) {
- mContainer = container;
- mToolbar = toolbar;
- mFocusRoot = focusRoot;
- }
-
- @Override
- public void onFocusChange(View v, boolean hasFocus) {
- if (!hasFocus) {
- v.setOnFocusChangeListener(null);
- mFocusRoot.post(this);
- }
- }
-
- @Override
- public void run() {
- final View focused = mFocusRoot.findFocus();
- if (focused != null) {
- focused.setOnFocusChangeListener(this);
- } else {
- if (mContainer != null) {
- mContainer.setTouchscreenBlocksFocus(true);
- }
- if (mToolbar != null) {
- mToolbar.setTouchscreenBlocksFocus(true);
- }
- }
- }
- }
}
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 2ccfe0e..f6771857 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -16,7 +16,11 @@
package android.app;
-import static java.lang.Character.MIN_VALUE;
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.app.IVoiceInteractor;
+import com.android.internal.app.ToolbarActionBar;
+import com.android.internal.app.WindowDecorActionBar;
+import com.android.internal.policy.PhoneWindow;
import android.annotation.CallSuper;
import android.annotation.DrawableRes;
@@ -70,9 +74,8 @@
import android.os.StrictMode;
import android.os.SystemProperties;
import android.os.UserHandle;
-import android.service.autofill.FillableInputField;
import android.service.autofill.AutoFillService;
-import android.service.autofill.IAutoFillCallback;
+import android.service.autofill.IAutoFillAppCallback;
import android.text.Selection;
import android.text.SpannableStringBuilder;
import android.text.TextAssistant;
@@ -115,25 +118,25 @@
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
import android.view.accessibility.AccessibilityEvent;
+import android.view.autofill.AutoFillId;
+import android.view.autofill.Dataset;
+import android.view.autofill.DatasetField;
+import android.view.autofill.VirtualViewDelegate;
import android.widget.AdapterView;
-import android.widget.EditText;
import android.widget.Toast;
import android.widget.Toolbar;
-import com.android.internal.annotations.GuardedBy;
-import com.android.internal.app.IVoiceInteractor;
-import com.android.internal.app.ToolbarActionBar;
-import com.android.internal.app.WindowDecorActionBar;
-import com.android.internal.policy.PhoneWindow;
-
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import static java.lang.Character.MIN_VALUE;
+
/**
* An activity is a single, focused thing that the user can do. Almost all
* activities interact with the user, so the Activity class takes care of
@@ -697,6 +700,9 @@
private static final String TAG = "Activity";
private static final boolean DEBUG_LIFECYCLE = false;
+ // TODO(b/33197203): set to false once stable
+ private static final boolean DEBUG_AUTO_FILL = true;
+
/** Standard activity result: operation canceled. */
public static final int RESULT_CANCELED = 0;
/** Standard activity result: operation succeeded. */
@@ -844,10 +850,12 @@
SharedElementCallback mExitTransitionListener = SharedElementCallback.NULL_CALLBACK;
private boolean mHasCurrentPermissionsRequest;
- private boolean mEatKeyUpEvent;
@GuardedBy("this")
- private IAutoFillCallback mAutoFillCallback;
+ private WeakReference<IAutoFillAppCallback> mAutoFillCallback;
+
+ @GuardedBy("this")
+ private VirtualViewDelegate.Callback mAutoFillDelegateCallback;
private static native String getDlWarning();
@@ -1718,47 +1726,73 @@
}
/**
- * Lazily gets the {@code IAutoFillCallback} for this activitity.
+ * Lazily sets the {@link #mAutoFillDelegateCallback}.
+ */
+ private void setAutoFillDelegateCallback() {
+ synchronized (this) {
+ if (mAutoFillDelegateCallback == null) {
+ mAutoFillDelegateCallback = new VirtualViewDelegate.Callback() {
+ // TODO(b/33197203): implement
+ };
+ }
+ }
+ }
+
+ /**
+ * Lazily gets the {@link IAutoFillAppCallback} for this activitity.
*
* <p>This callback is used by the {@link AutoFillService} app to auto-fill the activity fields.
*/
- IAutoFillCallback getAutoFillCallback() {
+ WeakReference<IAutoFillAppCallback> getAutoFillCallback() {
synchronized (this) {
if (mAutoFillCallback == null) {
- mAutoFillCallback = new IAutoFillCallback.Stub() {
+ final IAutoFillAppCallback cb = new IAutoFillAppCallback.Stub() {
@Override
- public void autofill(@SuppressWarnings("rawtypes") List fields)
- throws RemoteException {
+ public void autoFill(Dataset dataset) throws RemoteException {
+ // TODO(b/33197203): must keep the dataset so subsequent calls pass the same
+ // dataset.extras to service
runOnUiThread(() -> {
final View root = getWindow().getDecorView().getRootView();
- for (Object field : fields) {
- if (!(field instanceof FillableInputField)) {
- Slog.w(TAG, "autofill(): invalid type " + field.getClass());
+ for (DatasetField field : dataset.getFields()) {
+ final AutoFillId id = field.getId();
+ if (id == null) {
+ Log.w(TAG, "autoFill(): null id on " + field);
continue;
}
- FillableInputField autoFillField = (FillableInputField) field;
- final int viewId = autoFillField.getId();
+ final int viewId = id.getViewId();
final View view = root.findViewByAccessibilityIdTraversal(viewId);
- // TODO(b/33197203): should handle other types of view as well, but
- // that will require:
- // - a new interface like AutoFillable
- // - a way for the views to define the type of the autofield value
- if ((view instanceof EditText)) {
- ((EditText) view).setText(autoFillField.getValue());
+ if (view == null) {
+ Log.w(TAG, "autoFill(): no View with id " + viewId);
+ continue;
+ }
+
+ // TODO(b/33197203): handle protected value (like credit card)
+ if (id.isVirtual()) {
+ // Delegate virtual fields to provider.
+ setAutoFillDelegateCallback();
+ final VirtualViewDelegate mgr = view
+ .getAutoFillVirtualViewDelegate(
+ mAutoFillDelegateCallback);
+ if (mgr == null) {
+ Log.w(TAG, "autoFill(): cannot fill virtual " + id
+ + "; no auto-fill provider for view "
+ + view.getClass());
+ continue;
+ }
+ if (DEBUG_AUTO_FILL) {
+ Log.d(TAG, "autoFill(): delegating " + id
+ + " to virtual manager " + mgr);
+ }
+ mgr.autoFill(id.getVirtualChildId(), field.getValue());
+ } else {
+ // Handle non-virtual fields itself.
+ view.autoFill(field.getValue());
}
}
});
}
-
- @Override
- public void showError(String message) {
- runOnUiThread(() -> {
- // TODO(b/33197203): temporary show a toast until it uses the Snack bar.
- Toast.makeText(Activity.this, "Auto-fill request failed: " + message,
- Toast.LENGTH_LONG).show();
- });
- }
};
+ mAutoFillCallback = new WeakReference<IAutoFillAppCallback>(cb);
}
}
return mAutoFillCallback;
@@ -3144,20 +3178,6 @@
if (keyCode == KeyEvent.KEYCODE_MENU &&
mActionBar != null && mActionBar.onMenuKeyEvent(event)) {
return true;
- } else if (event.isCtrlPressed() &&
- event.getUnicodeChar(event.getMetaState() & ~KeyEvent.META_CTRL_MASK) == '<') {
- // Capture the Control-< and send focus to the ActionBar
- final int action = event.getAction();
- if (action == KeyEvent.ACTION_DOWN) {
- final ActionBar actionBar = getActionBar();
- if (actionBar != null && actionBar.isShowing() && actionBar.requestFocus()) {
- mEatKeyUpEvent = true;
- return true;
- }
- } else if (action == KeyEvent.ACTION_UP && mEatKeyUpEvent) {
- mEatKeyUpEvent = false;
- return true;
- }
}
Window win = getWindow();
@@ -4341,8 +4361,8 @@
* that are defined to return a result. In other protocols (such as
* {@link Intent#ACTION_MAIN} or {@link Intent#ACTION_VIEW}), you may
* not get the result when you expect. For example, if the activity you
- * are launching uses the singleTask launch mode, it will not run in your
- * task and thus you will immediately receive a cancel result.
+ * are launching uses {@link Intent#FLAG_ACTIVITY_NEW_TASK}, it will not
+ * run in your task and thus you will immediately receive a cancel result.
*
* <p>As a special case, if you call startActivityForResult() with a requestCode
* >= 0 during the initial onCreate(Bundle savedInstanceState)/onResume() of your
@@ -6096,7 +6116,7 @@
if (mAutoFillCallback != null) {
writer.print(prefix); writer.print("mAutoFillCallback: " );
- writer.println(mAutoFillCallback);
+ writer.println(mAutoFillCallback.get());
}
mHandler.getLooper().dump(new PrintWriterPrinter(writer), prefix);
diff --git a/core/java/android/app/ActivityManager.aidl b/core/java/android/app/ActivityManager.aidl
index 5672f6b..29260e9 100644
--- a/core/java/android/app/ActivityManager.aidl
+++ b/core/java/android/app/ActivityManager.aidl
@@ -26,4 +26,6 @@
/** @hide */
parcelable ActivityManager.StackInfo;
/** @hide */
-parcelable ActivityManager.TaskThumbnail;
\ No newline at end of file
+parcelable ActivityManager.TaskThumbnail;
+/** @hide */
+parcelable ActivityManager.TaskSnapshot;
\ No newline at end of file
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 761da35..3170d0d 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -26,6 +26,7 @@
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.graphics.Canvas;
+import android.graphics.GraphicBuffer;
import android.graphics.Matrix;
import android.graphics.Point;
import android.os.BatteryStats;
@@ -80,7 +81,39 @@
import java.util.List;
/**
- * Interact with the overall activities running in the system.
+ * <p>
+ * This class gives information about, and interacts
+ * with, activities, services, and the containing
+ * process.
+ * </p>
+ *
+ * <p>
+ * A number of the methods in this class are for
+ * debugging or informational purposes and they should
+ * not be used to affect any runtime behavior of
+ * your app. These methods are called out as such in
+ * the method level documentation.
+ * </p>
+ *
+ *<p>
+ * Most application developers should not have the need to
+ * use this class, most of whose methods are for specialized
+ * use cases. However, a few methods are more broadly applicable.
+ * For instance, {@link android.app.ActivityManager#isLowRamDevice() isLowRamDevice()}
+ * enables your app to detect whether it is running on a low-memory device,
+ * and behave accordingly.
+ * {@link android.app.ActivityManager#clearApplicationUserData() clearApplicationUserData()}
+ * is for apps with reset-data functionality.
+ * </p>
+ *
+ * <p>
+ * In some special use cases, where an app interacts with
+ * its Task stack, the app may use the
+ * {@link android.app.ActivityManager.AppTask} and
+ * {@link android.app.ActivityManager.RecentTaskInfo} inner
+ * classes. However, in general, the methods in this class should
+ * be used for testing and debugging purposes only.
+ * </p>
*/
public class ActivityManager {
private static String TAG = "ActivityManager";
@@ -93,6 +126,16 @@
private static volatile boolean sSystemReady = false;
+ /**
+ * System property to enable task snapshots.
+ * @hide
+ */
+ public final static boolean ENABLE_TASK_SNAPSHOTS;
+
+ static {
+ ENABLE_TASK_SNAPSHOTS = SystemProperties.getBoolean("persist.enable_task_snapshots", false);
+ }
+
static final class UidObserver extends IUidObserver.Stub {
final OnUidImportanceListener mListener;
@@ -130,7 +173,8 @@
BUGREPORT_OPTION_FULL,
BUGREPORT_OPTION_INTERACTIVE,
BUGREPORT_OPTION_REMOTE,
- BUGREPORT_OPTION_WEAR
+ BUGREPORT_OPTION_WEAR,
+ BUGREPORT_OPTION_TELEPHONY
})
public @interface BugreportMode {}
/**
@@ -158,6 +202,13 @@
public static final int BUGREPORT_OPTION_WEAR = 3;
/**
+ * Takes a lightweight version of bugreport that only includes a few, urgent sections
+ * used to report telephony bugs.
+ * @hide
+ */
+ public static final int BUGREPORT_OPTION_TELEPHONY = 4;
+
+ /**
* <a href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code
* <meta-data>}</a> name for a 'home' Activity that declares a package that is to be
* uninstalled in lieu of the declaring one. The package named here must be
@@ -451,6 +502,12 @@
/** @hide requestType for assist context: generate full AssistStructure. */
public static final int ASSIST_CONTEXT_FULL = 1;
+ /** @hide requestType for assist context: generate full AssistStructure for auto-fill. */
+ public static final int ASSIST_CONTEXT_AUTO_FILL = 2;
+
+ /** @hide requestType for assist context: generate full AssistStructure for auto-fill save. */
+ public static final int ASSIST_CONTEXT_AUTO_FILL_SAVE = 3;
+
/** @hide Flag for registerUidObserver: report changes in process state. */
public static final int UID_OBSERVER_PROCSTATE = 1<<0;
@@ -2069,6 +2126,62 @@
};
}
+ /**
+ * Represents a task snapshot.
+ * @hide
+ */
+ public static class TaskSnapshot implements Parcelable {
+
+ private final GraphicBuffer mSnapshot;
+ private final int mOrientation;
+ private final Rect mContentInsets;
+
+ public TaskSnapshot(GraphicBuffer snapshot, int orientation, Rect contentInsets) {
+ mSnapshot = snapshot;
+ mOrientation = orientation;
+ mContentInsets = new Rect(contentInsets);
+ }
+
+ private TaskSnapshot(Parcel source) {
+ mSnapshot = source.readParcelable(null /* classLoader */);
+ mOrientation = source.readInt();
+ mContentInsets = source.readParcelable(null /* classLoader */);
+ }
+
+ public GraphicBuffer getSnapshot() {
+ return mSnapshot;
+ }
+
+ public int getOrientation() {
+ return mOrientation;
+ }
+
+ public Rect getContentInsets() {
+ return mContentInsets;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeParcelable(mSnapshot, 0);
+ dest.writeInt(mOrientation);
+ dest.writeParcelable(mContentInsets, 0);
+ }
+
+ public static final Creator<TaskSnapshot> CREATOR = new Creator<TaskSnapshot>() {
+ public TaskSnapshot createFromParcel(Parcel source) {
+ return new TaskSnapshot(source);
+ }
+ public TaskSnapshot[] newArray(int size) {
+ return new TaskSnapshot[size];
+ }
+ };
+ }
+
/** @hide */
public TaskThumbnail getTaskThumbnail(int id) throws SecurityException {
try {
@@ -3336,6 +3449,8 @@
* @see #forceStopPackageAsUser(String, int)
* @hide
*/
+ @SystemApi
+ @RequiresPermission(Manifest.permission.FORCE_STOP_PACKAGES)
public void forceStopPackage(String packageName) {
forceStopPackageAsUser(packageName, UserHandle.myUserId());
}
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index e34fabc..45d325a 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -89,7 +89,7 @@
import android.security.NetworkSecurityPolicy;
import android.security.net.config.NetworkSecurityConfigProvider;
import android.service.autofill.AutoFillService;
-import android.service.autofill.IAutoFillCallback;
+import android.service.autofill.IAutoFillAppCallback;
import android.service.voice.VoiceInteractionSession;
import android.util.AndroidRuntimeException;
import android.util.ArrayMap;
@@ -1758,6 +1758,7 @@
case LOCAL_VOICE_INTERACTION_STARTED:
handleLocalVoiceInteractionStarted((IBinder) ((SomeArgs) msg.obj).arg1,
(IVoiceInteractor) ((SomeArgs) msg.obj).arg2);
+ break;
case ATTACH_AGENT:
handleAttachAgent((String) msg.obj);
break;
@@ -2884,9 +2885,8 @@
// - it does not call onProvideAssistData()
// - it needs an IAutoFillCallback
// - it sets the flags so views can provide autofill-specific data (such as passwords)
- boolean forAutoFill = (cmd.flags
- & (View.ASSIST_FLAG_SANITIZED_TEXT
- | View.ASSIST_FLAG_NON_SANITIZED_TEXT)) != 0;
+ boolean forAutoFill = cmd.requestType == ActivityManager.ASSIST_CONTEXT_AUTO_FILL
+ || cmd.requestType == ActivityManager.ASSIST_CONTEXT_AUTO_FILL_SAVE;
// TODO(b/33197203): decide if lastSessionId logic applies to auto-fill sessions
if (mLastSessionId != cmd.sessionId) {
@@ -2910,22 +2910,23 @@
if (!forAutoFill) {
r.activity.getApplication().dispatchOnProvideAssistData(r.activity, data);
r.activity.onProvideAssistData(data);
+ referrer = r.activity.onProvideReferrer();
}
- referrer = r.activity.onProvideReferrer();
if (cmd.requestType == ActivityManager.ASSIST_CONTEXT_FULL || forAutoFill) {
structure = new AssistStructure(r.activity, cmd.flags);
Intent activityIntent = r.activity.getIntent();
- if (cmd.flags > 0) {
+ if (forAutoFill) {
data.putInt(VoiceInteractionSession.KEY_FLAGS, cmd.flags);
}
+ boolean addAutoFillCallback = false;
// TODO(b/33197203): re-evaluate conditions below for auto-fill. In particular,
// FLAG_SECURE might be allowed on AUTO_FILL but not on AUTO_FILL_SAVE)
- if (activityIntent != null && (r.window == null ||
+ boolean notSecure = r.window == null ||
(r.window.getAttributes().flags
- & WindowManager.LayoutParams.FLAG_SECURE) == 0)) {
+ & WindowManager.LayoutParams.FLAG_SECURE) == 0;
+ if (activityIntent != null && notSecure) {
if (forAutoFill) {
- IAutoFillCallback autoFillCallback = r.activity.getAutoFillCallback();
- data.putBinder(AutoFillService.KEY_CALLBACK, autoFillCallback.asBinder());
+ addAutoFillCallback = true;
} else {
Intent intent = new Intent(activityIntent);
intent.setFlags(intent.getFlags() & ~(Intent.FLAG_GRANT_WRITE_URI_PERMISSION
@@ -2936,10 +2937,21 @@
} else {
if (!forAutoFill) {
content.setDefaultIntent(new Intent());
+ } else {
+ // activityIntent is unlikely to be null, but if it is, we should still
+ // set the auto-fill callback.
+ addAutoFillCallback = notSecure;
}
}
if (!forAutoFill) {
r.activity.onProvideAssistContent(content);
+ } else if (addAutoFillCallback) {
+ IAutoFillAppCallback cb = r.activity.getAutoFillCallback().get();
+ if (cb != null) {
+ data.putBinder(AutoFillService.KEY_CALLBACK, cb.asBinder());
+ } else {
+ Slog.w(TAG, "handleRequestAssistContextExtras(): callback was GCed");
+ }
}
}
}
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index 627e661..aedcdce 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -2027,6 +2027,17 @@
}
}
+ /** @hide */
+ @Override
+ public void setApplicationCategoryHint(String packageName, int categoryHint) {
+ try {
+ mPM.setApplicationCategoryHint(packageName, categoryHint,
+ mContext.getOpPackageName());
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
@Override
public void getPackageSizeInfoAsUser(String packageName, int userHandle,
IPackageStatsObserver observer) {
diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl
index fd139f7..21ae853 100644
--- a/core/java/android/app/IActivityManager.aidl
+++ b/core/java/android/app/IActivityManager.aidl
@@ -53,6 +53,7 @@
import android.content.pm.UserInfo;
import android.content.res.Configuration;
import android.graphics.Bitmap;
+import android.graphics.GraphicBuffer;
import android.graphics.Point;
import android.graphics.Rect;
import android.net.Uri;
@@ -586,8 +587,20 @@
void unregisterTaskStackListener(ITaskStackListener listener);
void moveStackToDisplay(int stackId, int displayId);
boolean requestAutoFillData(in IResultReceiver receiver, in Bundle receiverExtras,
- in IBinder activityToken, int flags);
+ int resultCode, in IBinder activityToken, int flags);
void dismissKeyguard(in IBinder token, in IKeyguardDismissCallback callback);
+ int restartUserInBackground(int userId);
+
+ /** Cancels the window transitions for the given task. */
+ void cancelTaskWindowTransition(int taskId);
+
+ /** Cancels the thumbnail transitions for the given task. */
+ void cancelTaskThumbnailTransition(int taskId);
+
+ /**
+ * @return a graphic buffer representing a screenshot of a task
+ */
+ ActivityManager.TaskSnapshot getTaskSnapshot(int taskId);
// WARNING: when these transactions are updated, check if they are any callers on the native
// side. If so, make sure they are using the correct transaction ids and arguments.
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index 4d5f67b..07c21a5 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -17,7 +17,6 @@
package android.app;
-import android.app.IOnNotificationChannelCreatedListener;
import android.app.ITransientNotification;
import android.app.Notification;
import android.app.NotificationChannel;
@@ -52,8 +51,7 @@
boolean areNotificationsEnabled(String pkg);
int getPackageImportance(String pkg);
- void createNotificationChannel(String pkg, in NotificationChannel channel,
- in IOnNotificationChannelCreatedListener listener);
+ void createNotificationChannels(String pkg, in ParceledListSlice channelsList);
void updateNotificationChannelForPackage(String pkg, int uid, in NotificationChannel channel);
NotificationChannel getNotificationChannel(String pkg, String channelId);
NotificationChannel getNotificationChannelForPackage(String pkg, int uid, String channelId);
@@ -72,7 +70,7 @@
void cancelNotificationFromListener(in INotificationListener token, String pkg, String tag, int id);
void cancelNotificationsFromListener(in INotificationListener token, in String[] keys);
-
+ void snoozeNotificationUntilContextFromListener(in INotificationListener token, String key, String snoozeCriterionId);
void snoozeNotificationUntilFromListener(in INotificationListener token, String key, long until);
void snoozeNotificationFromListener(in INotificationListener token, String key);
void unsnoozeNotificationFromListener(in INotificationListener token, String key);
diff --git a/core/java/android/app/IOnNotificationChannelCreatedListener.aidl b/core/java/android/app/IOnNotificationChannelCreatedListener.aidl
deleted file mode 100644
index 8e66542..0000000
--- a/core/java/android/app/IOnNotificationChannelCreatedListener.aidl
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-**
-** Copyright 2016, 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.app.NotificationChannel;
-
-/** {@hide} */
-oneway interface IOnNotificationChannelCreatedListener {
- void onNotificationChannelCreated(in NotificationChannel channel);
-}
diff --git a/core/java/android/app/ITaskStackListener.aidl b/core/java/android/app/ITaskStackListener.aidl
index e454ae1..ef997c9 100644
--- a/core/java/android/app/ITaskStackListener.aidl
+++ b/core/java/android/app/ITaskStackListener.aidl
@@ -95,4 +95,11 @@
* perform relevant animations before the window disappears.
*/
void onTaskRemovalStarted(int taskId);
+
+ /**
+ * Called when the task has been put in a locked state because one or more of the
+ * activities inside it belong to a managed profile user, and that user has just
+ * been locked.
+ */
+ void onTaskProfileLocked(int taskId, int userId);
}
diff --git a/core/java/android/app/NotificationChannel.java b/core/java/android/app/NotificationChannel.java
index 52d9b67..bdccb8a 100644
--- a/core/java/android/app/NotificationChannel.java
+++ b/core/java/android/app/NotificationChannel.java
@@ -55,7 +55,6 @@
private static final String ATT_AUDIO_ATTRIBUTES = "audio_attributes";
private static final String ATT_SHOW_BADGE = "show_badge";
private static final String ATT_USER_LOCKED = "locked";
- private static final String ATT_ALLOWED = "allowed";
private static final String DELIMITER = ",";
/**
@@ -243,12 +242,12 @@
this.mImportance = importance;
}
+ // Modifiable by apps on channel creation.
+
/**
* Sets whether notifications posted to this channel can appear as application icon badges
* in a Launcher.
*
- * Only modifiable by the system and notification ranker.
- *
* @param showBadge true if badges should be allowed to be shown.
*/
public void setShowBadge(boolean showBadge) {
@@ -256,20 +255,6 @@
}
/**
- * Sets whether notifications are allowed to be posted to this channel.
- *
- * Only modifiable by the system and notification ranker.
- *
- * @param allowed true if notifications are not allowed from this channel.
- */
- public void setAllowed(boolean allowed) {
- this.mAllowed = allowed;
- }
-
-
- // Modifiable by apps on channel creation.
-
- /**
* Sets the sound that should be played for notifications posted to this channel if
* the notifications don't supply a sound. Only modifiable before the channel is submitted
* to the NotificationManager.
@@ -408,7 +393,6 @@
enableVibration(safeBool(parser, ATT_VIBRATION_ENABLED, false));
setVibrationPattern(safeLongArray(parser, ATT_VIBRATION, null));
setShowBadge(safeBool(parser, ATT_SHOW_BADGE, false));
- setAllowed(safeBool(parser, ATT_ALLOWED, true));
lockFields(safeInt(parser, ATT_USER_LOCKED, 0));
}
@@ -450,9 +434,6 @@
if (canShowBadge()) {
out.attribute(null, ATT_SHOW_BADGE, Boolean.toString(canShowBadge()));
}
- if (!isAllowed()) {
- out.attribute(null, ATT_ALLOWED, Boolean.toString(isAllowed()));
- }
out.endTag(null, TAG_CHANNEL);
}
@@ -483,8 +464,6 @@
record.put(ATT_USER_LOCKED, Integer.toString(getUserLockedFields()));
record.put(ATT_VIBRATION, longArrayToString(getVibrationPattern()));
record.put(ATT_SHOW_BADGE, Boolean.toString(canShowBadge()));
- record.put(ATT_ALLOWED, Boolean.toString(isAllowed()));
-
return record;
}
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index a9ff482..3551691 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -47,6 +47,7 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -381,42 +382,26 @@
}
/**
- * Listener passed to {@link NotificationManager#createNotificationChannel} to notify
- * caller of result.
+ * Creates a notification channel that notifications can be posted to.
+ *
+ * @param channel the channel to create. Note that the created channel may differ from this
+ * value. If the channel already exists, it will not be modified.
*/
- public interface OnNotificationChannelCreatedListener {
- /**
- * @param createdChannel NotificationChannel created by the system. Value is null iff an
- * exception was thrown during channel creation.
- */
- public void onNotificationChannelCreated(NotificationChannel createdChannel);
+ public void createNotificationChannel(@NonNull NotificationChannel channel) {
+ createNotificationChannels(Arrays.asList(channel));
}
/**
- * Creates a notification channel that notifications can be posted to.
+ * Creates multiple notification channels that different notifications can be posted to.
*
- * @param channel the channel to attempt to create. Note that the created channel may differ
- * from this value.
- * @param listener Called when operation is finished.
- * @param handler The handler to invoke the listener on, or {@code null} to use the main
- * handler.
+ * @param channels the list of channels to attempt to create. If any of these channels already
+ * exist, they will not be modified.
*/
- public void createNotificationChannel(
- @NonNull NotificationChannel channel,
- @NonNull OnNotificationChannelCreatedListener listener,
- @Nullable Handler handler) {
+ public void createNotificationChannels(@NonNull List<NotificationChannel> channels) {
INotificationManager service = getService();
try {
- final Handler actualHandler =
- handler != null ? handler : new Handler(Looper.getMainLooper());
- service.createNotificationChannel(mContext.getPackageName(), channel,
- new IOnNotificationChannelCreatedListener.Stub() {
- @Override public void onNotificationChannelCreated(
- NotificationChannel channel) {
- actualHandler.post(
- () -> { listener.onNotificationChannelCreated(channel); });
- }
- });
+ service.createNotificationChannels(mContext.getPackageName(),
+ new ParceledListSlice(channels));
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java
index 6bddfba..9387019 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -23,8 +23,10 @@
import android.app.job.IJobScheduler;
import android.app.job.JobScheduler;
import android.app.trust.TrustManager;
+import android.app.usage.IStorageStatsManager;
import android.app.usage.IUsageStatsManager;
import android.app.usage.NetworkStatsManager;
+import android.app.usage.StorageStatsManager;
import android.app.usage.UsageStatsManager;
import android.appwidget.AppWidgetManager;
import android.bluetooth.BluetoothManager;
@@ -434,6 +436,15 @@
return new StorageManager(ctx, ctx.mMainThread.getHandler().getLooper());
}});
+ registerService(Context.STORAGE_STATS_SERVICE, StorageStatsManager.class,
+ new CachedServiceFetcher<StorageStatsManager>() {
+ @Override
+ public StorageStatsManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IStorageStatsManager service = IStorageStatsManager.Stub.asInterface(
+ ServiceManager.getServiceOrThrow(Context.STORAGE_STATS_SERVICE));
+ return new StorageStatsManager(ctx, service);
+ }});
+
registerService(Context.TELEPHONY_SERVICE, TelephonyManager.class,
new CachedServiceFetcher<TelephonyManager>() {
@Override
diff --git a/core/java/android/app/TaskStackListener.java b/core/java/android/app/TaskStackListener.java
index 0639552..ad5e69b 100644
--- a/core/java/android/app/TaskStackListener.java
+++ b/core/java/android/app/TaskStackListener.java
@@ -74,4 +74,8 @@
public void onActivityRequestedOrientationChanged(int taskId, int requestedOrientation)
throws RemoteException {
}
+
+ @Override
+ public void onTaskProfileLocked(int taskId, int userId) {
+ }
}
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 6f73388..074326f 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -279,6 +279,8 @@
* <li>{@link #EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION}, optional</li>
* <li>{@link #EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER}, optional</li>
* <li>{@link #EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM}, optional</li>
+ * <li>{@link #EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_LABEL}, optional</li>
+ * <li>{@link #EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_ICON_URI}, optional</li>
* <li>{@link #EXTRA_PROVISIONING_LOCAL_TIME} (convert to String), optional</li>
* <li>{@link #EXTRA_PROVISIONING_TIME_ZONE}, optional</li>
* <li>{@link #EXTRA_PROVISIONING_LOCALE}, optional</li>
@@ -290,6 +292,8 @@
* <li>{@link #EXTRA_PROVISIONING_WIFI_PROXY_PORT} (convert to String), optional</li>
* <li>{@link #EXTRA_PROVISIONING_WIFI_PROXY_BYPASS}, optional</li>
* <li>{@link #EXTRA_PROVISIONING_WIFI_PAC_URL}, optional</li>
+ * <li>{@link #EXTRA_PROVISIONING_SUPPORT_URL}, optional</li>
+ * <li>{@link #EXTRA_PROVISIONING_ORGANIZATION_NAME}, optional</li>
* <li>{@link #EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE}, optional</li></ul>
*
* @hide
@@ -688,6 +692,67 @@
= "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION";
/**
+ * A String extra holding the localized name of the organization under management.
+ *
+ * The name is displayed only during provisioning.
+ *
+ * <p>Use in an intent with action {@link #ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE}
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String EXTRA_PROVISIONING_ORGANIZATION_NAME =
+ "android.app.extra.PROVISIONING_ORGANIZATION_NAME";
+
+ /**
+ * A String extra holding a url to the website of the device's provider. The website can be
+ * opened in a browser during provisioning.
+ *
+ * <p>Use in an intent with action {@link #ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE}
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String EXTRA_PROVISIONING_SUPPORT_URL =
+ "android.app.extra.PROVISIONING_SUPPORT_URL";
+
+ /**
+ * A String extra holding the localized name of the device admin package. It should be the same
+ * as the app label of the package.
+ *
+ * <p>Use in an intent with action {@link #ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE}
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_LABEL =
+ "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_LABEL";
+
+ /**
+ * A {@link Uri} extra pointing to the app icon of device admin package. This image will be
+ * shown during the provisioning.
+ * <h5>The following URI schemes are accepted:</h5>
+ * <ul>
+ * <li>content ({@link android.content.ContentResolver#SCHEME_CONTENT})</li>
+ * <li>android.resource ({@link android.content.ContentResolver#SCHEME_ANDROID_RESOURCE})</li>
+ * </ul>
+ *
+ * <p> It is the responsibility of the caller to provide an image with a reasonable
+ * pixel density for the device.
+ *
+ * <p> If a content: URI is passed, the intent should have the flag
+ * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION} and the uri should be added to the
+ * {@link android.content.ClipData} of the intent too.
+ *
+ * <p>Use in an intent with action {@link #ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE}
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_ICON_URI =
+ "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_ICON_URI";
+
+ /**
* An int extra holding a minimum required version code for the device admin package. If the
* device admin is already installed on the device, it will only be re-downloaded from
* {@link #EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION} if the version of the
@@ -808,7 +873,7 @@
* </ul>
*
* <p> It is the responsibility of the caller to provide an image with a reasonable
- * pixed density for the device.
+ * pixel density for the device.
*
* <p> If a content: URI is passed, the intent should have the flag
* {@link Intent#FLAG_GRANT_READ_URI_PERMISSION} and the uri should be added to the
@@ -2715,6 +2780,43 @@
}
/**
+ * Flag for {@link #lockNow(int)}: also evict the user's credential encryption key from the
+ * keyring. The user's credential will need to be entered again in order to derive the
+ * credential encryption key that will be stored back in the keyring for future use.
+ * <p>
+ * This flag can only be used by a profile owner when locking a managed profile on an FBE
+ * device.
+ * <p>
+ * In order to secure user data, the user will be stopped and restarted so apps should wait
+ * until they are next run to perform further actions.
+ */
+ public static final int FLAG_EVICT_CE_KEY = 1;
+
+ /** @hide */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(flag=true, value={FLAG_EVICT_CE_KEY})
+ public @interface LockNowFlag {}
+
+ /**
+ * Make the device lock immediately, as if the lock screen timeout has expired at the point of
+ * this call.
+ * <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>
+ * This method can be called on the {@link DevicePolicyManager} instance returned by
+ * {@link #getParentProfileInstance(ComponentName)} in order to lock the parent profile.
+ * <p>
+ * Equivalent to calling {@link #lockNow(int)} with no flags.
+ *
+ * @throws SecurityException if the calling application does not own an active administrator
+ * that uses {@link DeviceAdminInfo#USES_POLICY_FORCE_LOCK}
+ */
+ public void lockNow() {
+ lockNow(0);
+ }
+
+ /**
* Make the device lock immediately, as if the lock screen timeout has expired at the point of
* this call.
* <p>
@@ -2724,13 +2826,20 @@
* This method can be called on the {@link DevicePolicyManager} instance returned by
* {@link #getParentProfileInstance(ComponentName)} in order to lock the parent profile.
*
+ * @param flags May be 0 or {@link #FLAG_EVICT_CE_KEY}.
* @throws SecurityException if the calling application does not own an active administrator
- * that uses {@link DeviceAdminInfo#USES_POLICY_FORCE_LOCK}
+ * that uses {@link DeviceAdminInfo#USES_POLICY_FORCE_LOCK} or the
+ * {@link #FLAG_EVICT_CE_KEY} flag is passed by an application that is not a profile
+ * owner of a managed profile.
+ * @throws IllegalArgumentException if the {@link #FLAG_EVICT_CE_KEY} flag is passed when
+ * locking the parent profile.
+ * @throws UnsupportedOperationException if the {@link #FLAG_EVICT_CE_KEY} flag is passed on a
+ * non-FBE device.
*/
- public void lockNow() {
+ public void lockNow(@LockNowFlag int flags) {
if (mService != null) {
try {
- mService.lockNow(mParentInstance);
+ mService.lockNow(flags, mParentInstance);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -4038,6 +4147,7 @@
*
* @hide
*/
+ @SystemApi
public ComponentName getDeviceOwnerComponentOnAnyUser() {
return getDeviceOwnerComponentInner(/* callingUserOnly =*/ false);
}
diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl
index 9be694e..66185d5 100644
--- a/core/java/android/app/admin/IDevicePolicyManager.aidl
+++ b/core/java/android/app/admin/IDevicePolicyManager.aidl
@@ -90,7 +90,7 @@
void setRequiredStrongAuthTimeout(in ComponentName who, long timeMs, boolean parent);
long getRequiredStrongAuthTimeout(in ComponentName who, int userId, boolean parent);
- void lockNow(boolean parent);
+ void lockNow(int flags, boolean parent);
void wipeData(int flags);
diff --git a/core/java/android/app/admin/SystemUpdatePolicy.java b/core/java/android/app/admin/SystemUpdatePolicy.java
index 20ddb77..28704e6 100644
--- a/core/java/android/app/admin/SystemUpdatePolicy.java
+++ b/core/java/android/app/admin/SystemUpdatePolicy.java
@@ -19,10 +19,8 @@
import android.annotation.IntDef;
import android.os.Parcel;
import android.os.Parcelable;
-import android.os.PersistableBundle;
import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
import java.io.IOException;
@@ -49,25 +47,45 @@
* Unknown policy type, used only internally.
*/
private static final int TYPE_UNKNOWN = -1;
+
/**
* Install system update automatically as soon as one is available.
*/
public static final int TYPE_INSTALL_AUTOMATIC = 1;
/**
- * Install system update automatically within a daily maintenance window, for a maximum of 30
- * days. After the expiration the policy will no longer be effective and the system should
- * revert back to its normal behavior as if no policy were set. The only exception is
- * {@link #TYPE_INSTALL_AUTOMATIC} which should still take effect to install system update
- * immediately.
+ * Install system update automatically within a daily maintenance window. An update can be
+ * delayed for a maximum of 30 days, after which the policy will no longer be effective and the
+ * system will revert back to its normal behavior as if no policy were set.
+ *
+ * <p>After this policy expires, resetting it to any policy other than
+ * {@link #TYPE_INSTALL_AUTOMATIC} will produce no effect, as the 30-day maximum delay has
+ * already been used up.
+ * The {@link #TYPE_INSTALL_AUTOMATIC} policy will still take effect to install the delayed
+ * system update immediately.
+ *
+ * <p>Re-applying this policy or changing it to {@link #TYPE_POSTPONE} within the 30-day period
+ * will <i>not</i> extend policy expiration.
+ * However, the expiration will be recalculated when a new system update is made available.
*/
public static final int TYPE_INSTALL_WINDOWED = 2;
/**
- * Incoming system update will be blocked for a maximum of 30 days, after which the system
- * should revert back to its normal behavior as if no policy were set. The only exception is
- * {@link #TYPE_INSTALL_AUTOMATIC} which should still take effect to install system update
- * immediately.
+ * Incoming system updates (except for security updates) will be blocked for 30 days, after
+ * which the policy will no longer be effective and the system will revert back to its normal
+ * behavior as if no policy were set.
+ * <b>Note:</b> security updates (e.g. monthly security patches) will <i>not</i> be affected by
+ * this policy.
+ *
+ * <p>After this policy expires, resetting it to any policy other than
+ * {@link #TYPE_INSTALL_AUTOMATIC} will produce no effect, as the 30-day maximum delay has
+ * already been used up.
+ * The {@link #TYPE_INSTALL_AUTOMATIC} policy will still take effect to install the delayed
+ * system update immediately.
+ *
+ * <p>Re-applying this policy or changing it to {@link #TYPE_INSTALL_WINDOWED} within the 30-day
+ * period will <i>not</i> extend policy expiration.
+ * However, the expiration will be recalculated when a new system update is made available.
*/
public static final int TYPE_POSTPONE = 3;
@@ -105,11 +123,12 @@
/**
* Create a policy object and set it to: new system update will only be installed automatically
* when the system clock is inside a daily maintenance window. If the start and end times are
- * the same, the window is considered to include the WHOLE 24 hours, that is, updates can
- * install at any time. If the given window in invalid, a {@link IllegalArgumentException} will
- * be thrown. If start time is later than end time, the window is considered spanning midnight,
- * i.e. end time donates a time on the next day. The maintenance window will last for 30 days,
- * after which the system should revert back to its normal behavior as if no policy were set.
+ * the same, the window is considered to include the <i>whole 24 hours</i>. That is, updates can
+ * install at any time. If the given window in invalid, an {@link IllegalArgumentException}
+ * will be thrown. If start time is later than end time, the window is considered spanning
+ * midnight (i.e. the end time denotes a time on the next day). The maintenance window will last
+ * for 30 days, after which the system will revert back to its normal behavior as if no policy
+ * were set.
*
* @param startTime the start of the maintenance window, measured as the number of minutes from
* midnight in the device's local time. Must be in the range of [0, 1440).
@@ -131,9 +150,12 @@
/**
* Create a policy object and set it to block installation for a maximum period of 30 days.
- * After expiration the system should revert back to its normal behavior as if no policy were
+ * After expiration the system will revert back to its normal behavior as if no policy were
* set.
*
+ * <p><b>Note: </b> security updates (e.g. monthly security patches) will <i>not</i> be affected
+ * by this policy.
+ *
* @see #TYPE_POSTPONE
*/
public static SystemUpdatePolicy createPostponeInstallPolicy() {
diff --git a/core/java/android/app/assist/AssistStructure.java b/core/java/android/app/assist/AssistStructure.java
index 1988e42..b94264e 100644
--- a/core/java/android/app/assist/AssistStructure.java
+++ b/core/java/android/app/assist/AssistStructure.java
@@ -21,6 +21,8 @@
import android.view.ViewRootImpl;
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
+import android.view.autofill.AutoFillType;
+import android.view.autofill.AutoFillId;
import java.util.ArrayList;
@@ -411,25 +413,30 @@
mTitle = root.getTitle();
mDisplayId = root.getDisplayId();
mRoot = new ViewNode();
+
+ // Must explicitly call the proper method based on flags since we don't know which
+ // method (if any) was overridden by the View subclass.
+ boolean forAutoFill = (flags
+ & (View.AUTO_FILL_FLAG_TYPE_FILL
+ | View.AUTO_FILL_FLAG_TYPE_SAVE)) != 0;
+
ViewNodeBuilder builder = new ViewNodeBuilder(assist, mRoot, false);
if ((root.getWindowFlags()& WindowManager.LayoutParams.FLAG_SECURE) != 0) {
// This is a secure window, so it doesn't want a screenshot, and that
// means we should also not copy out its view hierarchy.
- // Must explicitly set which method to calls since View subclasses might
- // have implemented the deprecated method.
- if (flags == 0) {
- view.onProvideStructure(builder);
+ if (forAutoFill) {
+ view.onProvideAutoFillStructure(builder, flags);
} else {
- view.onProvideStructure(builder, flags);
+ view.onProvideStructure(builder);
}
builder.setAssistBlocked(true);
return;
}
- if (flags == 0) {
- view.dispatchProvideStructure(builder);
+ if (forAutoFill) {
+ view.dispatchProvideAutoFillStructure(builder, flags);
} else {
- view.dispatchProvideStructure(builder, flags);
+ view.dispatchProvideStructure(builder);
}
}
@@ -526,7 +533,10 @@
String mIdPackage;
String mIdType;
String mIdEntry;
- int mAutoFillId = View.NO_ID;
+ // TODO(b/33197203): once we have more flags, it might be better to store the individual
+ // fields (viewId and childId) of the field.
+ AutoFillId mAutoFillId;
+ AutoFillType mAutoFillType;
int mX;
int mY;
int mScrollX;
@@ -551,7 +561,11 @@
static final int FLAGS_ACTIVATED = 0x00002000;
static final int FLAGS_CONTEXT_CLICKABLE = 0x00004000;
- static final int FLAGS_HAS_AUTO_FILL_ID = 0x80000000;
+ // TODO(b/33197203): auto-fill data is made of many fields and ideally we should verify
+ // one-by-one to optimize what's sent over, but there isn't enough flag bits for that, we'd
+ // need to create a 'flags2' or 'autoFillFlags' field and add these flags there.
+ // So, to keep thinkg simpler for now, let's just use on flag for all of them...
+ static final int FLAGS_HAS_AUTO_FILL_DATA = 0x80000000;
static final int FLAGS_HAS_MATRIX = 0x40000000;
static final int FLAGS_HAS_ALPHA = 0x20000000;
static final int FLAGS_HAS_ELEVATION = 0x10000000;
@@ -595,8 +609,9 @@
}
}
}
- if ((flags&FLAGS_HAS_AUTO_FILL_ID) != 0) {
- mAutoFillId = in.readInt();
+ if ((flags&FLAGS_HAS_AUTO_FILL_DATA) != 0) {
+ mAutoFillId = in.readParcelable(null);
+ mAutoFillType = in.readParcelable(null);
}
if ((flags&FLAGS_HAS_LARGE_COORDS) != 0) {
mX = in.readInt();
@@ -653,8 +668,8 @@
if (mId != View.NO_ID) {
flags |= FLAGS_HAS_ID;
}
- if (mAutoFillId != View.NO_ID) {
- flags |= FLAGS_HAS_AUTO_FILL_ID;
+ if (mAutoFillId != null) {
+ flags |= FLAGS_HAS_AUTO_FILL_DATA;
}
if ((mX&~0x7fff) != 0 || (mY&~0x7fff) != 0
|| (mWidth&~0x7fff) != 0 | (mHeight&~0x7fff) != 0) {
@@ -700,8 +715,9 @@
}
}
}
- if ((flags&FLAGS_HAS_AUTO_FILL_ID) != 0) {
- out.writeInt(mAutoFillId);
+ if ((flags&FLAGS_HAS_AUTO_FILL_DATA) != 0) {
+ out.writeParcelable(mAutoFillId, 0);
+ out.writeParcelable(mAutoFillType, 0);
}
if ((flags&FLAGS_HAS_LARGE_COORDS) != 0) {
out.writeInt(mX);
@@ -773,16 +789,26 @@
}
/**
- * Returns the id that can be used to auto-fill the view.
+ * Gets the id that can be used to auto-fill the view contents.
*
* <p>It's only set when the {@link AssistStructure} is used for auto-filling purposes, not
* for assist.
*/
- public int getAutoFillId() {
+ public AutoFillId getAutoFillId() {
return mAutoFillId;
}
/**
+ * Gets the the type of value that can be used to auto-fill the view contents.
+ *
+ * <p>It's only set when the {@link AssistStructure} is used for auto-filling purposes, not
+ * for assist.
+ */
+ public AutoFillType getAutoFillType() {
+ return mAutoFillType;
+ }
+
+ /**
* Returns the left edge of this view, in pixels, relative to the left edge of its parent.
*/
public int getLeft() {
@@ -1318,17 +1344,23 @@
return mNode.mChildren != null ? mNode.mChildren.length : 0;
}
- @Override
- public ViewStructure newChild(int index) {
+ private void setAutoFillId(ViewNode child, boolean forAutoFill, int virtualId) {
+ if (forAutoFill) {
+ child.mAutoFillId = new AutoFillId(mNode.mAutoFillId, virtualId);
+ }
+ }
+
+ private ViewStructure newChild(int index, boolean forAutoFill, int virtualId) {
ViewNode node = new ViewNode();
+ setAutoFillId(node, forAutoFill, virtualId);
mNode.mChildren[index] = node;
return new ViewNodeBuilder(mAssist, node, false);
}
- @Override
- public ViewStructure asyncNewChild(int index) {
+ private ViewStructure asyncNewChild(int index, boolean forAutoFill, int virtualId) {
synchronized (mAssist) {
ViewNode node = new ViewNode();
+ setAutoFillId(node, forAutoFill, virtualId);
mNode.mChildren[index] = node;
ViewNodeBuilder builder = new ViewNodeBuilder(mAssist, node, true);
mAssist.mPendingAsyncChildren.add(builder);
@@ -1337,6 +1369,26 @@
}
@Override
+ public ViewStructure newChild(int index) {
+ return newChild(index, false, 0);
+ }
+
+ @Override
+ public ViewStructure newChild(int index, int virtualId) {
+ return newChild(index, true, virtualId);
+ }
+
+ @Override
+ public ViewStructure asyncNewChild(int index) {
+ return asyncNewChild(index, false, 0);
+ }
+
+ @Override
+ public ViewStructure asyncNewChild(int index, int virtualId) {
+ return asyncNewChild(index, true, virtualId);
+ }
+
+ @Override
public void asyncCommit() {
synchronized (mAssist) {
if (!mAsync) {
@@ -1356,9 +1408,20 @@
}
@Override
- public void setAutoFillId(int autoFillId) {
- mNode.mAutoFillId = autoFillId;
+ public void setAutoFillId(int viewId) {
+ mNode.mAutoFillId = new AutoFillId(viewId);
}
+
+ @Override
+ public AutoFillId getAutoFillId() {
+ return mNode.mAutoFillId;
+ }
+
+ @Override
+ public void setAutoFillType(AutoFillType type) {
+ mNode.mAutoFillType = type;
+ }
+
}
/** @hide */
diff --git a/core/java/android/view/GraphicBuffer.aidl b/core/java/android/app/usage/ExternalStorageStats.aidl
similarity index 82%
copy from core/java/android/view/GraphicBuffer.aidl
copy to core/java/android/app/usage/ExternalStorageStats.aidl
index 6dc6bed..2d9375c 100644
--- a/core/java/android/view/GraphicBuffer.aidl
+++ b/core/java/android/app/usage/ExternalStorageStats.aidl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-package android.view;
+package android.app.usage;
-parcelable GraphicBuffer;
+parcelable ExternalStorageStats;
diff --git a/core/java/android/app/usage/ExternalStorageStats.java b/core/java/android/app/usage/ExternalStorageStats.java
new file mode 100644
index 0000000..1166df0
--- /dev/null
+++ b/core/java/android/app/usage/ExternalStorageStats.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.app.usage;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.os.UserHandle;
+
+/**
+ * Shared/external storage statistics for a {@link UserHandle} on a single
+ * storage volume.
+ *
+ * @see StorageStatsManager
+ */
+public final class ExternalStorageStats implements Parcelable {
+ /** {@hide} */ public long totalBytes;
+ /** {@hide} */ public long audioBytes;
+ /** {@hide} */ public long videoBytes;
+ /** {@hide} */ public long imageBytes;
+
+ /**
+ * Return the total bytes used by all files in the shared/external storage
+ * hosted on this volume.
+ */
+ public long getTotalBytes() {
+ return totalBytes;
+ }
+
+ /**
+ * Return the total bytes used by audio files in the shared/external storage
+ * hosted on this volume.
+ */
+ public long getAudioBytes() {
+ return audioBytes;
+ }
+
+ /**
+ * Return the total bytes used by video files in the shared/external storage
+ * hosted on this volume.
+ */
+ public long getVideoBytes() {
+ return videoBytes;
+ }
+
+ /**
+ * Return the total bytes used by image files in the shared/external storage
+ * hosted on this volume.
+ */
+ public long getImageBytes() {
+ return imageBytes;
+ }
+
+ /** {@hide} */
+ public ExternalStorageStats() {
+ }
+
+ /** {@hide} */
+ public ExternalStorageStats(Parcel in) {
+ this.totalBytes = in.readLong();
+ this.audioBytes = in.readLong();
+ this.videoBytes = in.readLong();
+ this.imageBytes = in.readLong();
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeLong(totalBytes);
+ dest.writeLong(audioBytes);
+ dest.writeLong(videoBytes);
+ dest.writeLong(imageBytes);
+ }
+
+ public static final Creator<ExternalStorageStats> CREATOR = new Creator<ExternalStorageStats>() {
+ @Override
+ public ExternalStorageStats createFromParcel(Parcel in) {
+ return new ExternalStorageStats(in);
+ }
+
+ @Override
+ public ExternalStorageStats[] newArray(int size) {
+ return new ExternalStorageStats[size];
+ }
+ };
+}
diff --git a/core/java/android/app/usage/IStorageStatsManager.aidl b/core/java/android/app/usage/IStorageStatsManager.aidl
new file mode 100644
index 0000000..62ebf60
--- /dev/null
+++ b/core/java/android/app/usage/IStorageStatsManager.aidl
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.app.usage;
+
+import android.app.usage.StorageStats;
+import android.app.usage.ExternalStorageStats;
+
+/** {@hide} */
+interface IStorageStatsManager {
+ long getTotalBytes(String volumeUuid, String callingPackage);
+ long getFreeBytes(String volumeUuid, String callingPackage);
+ StorageStats queryStatsForUid(String volumeUuid, int uid, String callingPackage);
+ StorageStats queryStatsForUser(String volumeUuid, int userId, String callingPackage);
+ ExternalStorageStats queryExternalStatsForUser(String volumeUuid, int userId, String callingPackage);
+}
diff --git a/core/java/android/view/GraphicBuffer.aidl b/core/java/android/app/usage/StorageStats.aidl
similarity index 83%
copy from core/java/android/view/GraphicBuffer.aidl
copy to core/java/android/app/usage/StorageStats.aidl
index 6dc6bed..fde6267 100644
--- a/core/java/android/view/GraphicBuffer.aidl
+++ b/core/java/android/app/usage/StorageStats.aidl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-package android.view;
+package android.app.usage;
-parcelable GraphicBuffer;
+parcelable StorageStats;
diff --git a/core/java/android/app/usage/StorageStats.java b/core/java/android/app/usage/StorageStats.java
new file mode 100644
index 0000000..b3104f6
--- /dev/null
+++ b/core/java/android/app/usage/StorageStats.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.app.usage;
+
+import android.content.Context;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.os.UserHandle;
+
+/**
+ * Storage statistics for a UID or {@link UserHandle} on a single storage
+ * volume.
+ * <p class="note">
+ * Note: multiple packages using the same {@code sharedUserId} in their manifest
+ * will be merged into a single UID.
+ * </p>
+ *
+ * @see StorageStatsManager
+ */
+public final class StorageStats implements Parcelable {
+ /** {@hide} */ public long codeBytes;
+ /** {@hide} */ public long dataBytes;
+ /** {@hide} */ public long cacheBytes;
+
+ /**
+ * Return the size of all code. This includes {@code APK} files and
+ * optimized compiler output.
+ * <p>
+ * Code is shared between all users on a multiuser device.
+ */
+ public long getCodeBytes() {
+ return codeBytes;
+ }
+
+ /**
+ * Return the size of all data. This includes files stored under
+ * {@link Context#getDataDir()}, {@link Context#getCacheDir()},
+ * {@link Context#getCodeCacheDir()}.
+ * <p>
+ * Data is isolated for each user on a multiuser device.
+ */
+ public long getDataBytes() {
+ return dataBytes;
+ }
+
+ /**
+ * Return the size of all cached data. This includes files stored under
+ * {@link Context#getCacheDir()} and {@link Context#getCodeCacheDir()}.
+ * <p>
+ * Cached data is isolated for each user on a multiuser device.
+ */
+ public long getCacheBytes() {
+ return cacheBytes;
+ }
+
+ /** {@hide} */
+ public StorageStats() {
+ }
+
+ /** {@hide} */
+ public StorageStats(Parcel in) {
+ this.codeBytes = in.readLong();
+ this.dataBytes = in.readLong();
+ this.cacheBytes = in.readLong();
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeLong(codeBytes);
+ dest.writeLong(dataBytes);
+ dest.writeLong(cacheBytes);
+ }
+
+ public static final Creator<StorageStats> CREATOR = new Creator<StorageStats>() {
+ @Override
+ public StorageStats createFromParcel(Parcel in) {
+ return new StorageStats(in);
+ }
+
+ @Override
+ public StorageStats[] newArray(int size) {
+ return new StorageStats[size];
+ }
+ };
+}
diff --git a/core/java/android/app/usage/StorageStatsManager.java b/core/java/android/app/usage/StorageStatsManager.java
new file mode 100644
index 0000000..695994b
--- /dev/null
+++ b/core/java/android/app/usage/StorageStatsManager.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.app.usage;
+
+import android.annotation.WorkerThread;
+import android.content.Context;
+import android.os.RemoteException;
+import android.os.UserHandle;
+
+import com.android.internal.util.Preconditions;
+
+import java.io.File;
+
+/**
+ * Provides access to detailed storage statistics.
+ * <p class="note">
+ * Note: this API requires the permission
+ * {@code android.permission.PACKAGE_USAGE_STATS}, which is a system-level
+ * permission that will not be granted to normal apps. However, declaring the
+ * permission expresses your intention to use this API and an end user can then
+ * choose to grant this permission through the Settings application.
+ * </p>
+ */
+public class StorageStatsManager {
+ private final Context mContext;
+ private final IStorageStatsManager mService;
+
+ /** {@hide} */
+ public StorageStatsManager(Context context, IStorageStatsManager service) {
+ mContext = Preconditions.checkNotNull(context);
+ mService = Preconditions.checkNotNull(service);
+ }
+
+ /**
+ * Return the total space on the requested storage volume.
+ * <p>
+ * To reduce end user confusion, this value is the total storage size
+ * advertised in a retail environment, which is typically larger than the
+ * actual writable partition total size.
+ * <p>
+ * This method may take several seconds to calculate the requested values,
+ * so it should only be called from a worker thread.
+ *
+ * @param volumeUuid the UUID of the storage volume you're interested in, or
+ * {@code null} to specify the default internal storage.
+ */
+ @WorkerThread
+ public long getTotalBytes(String volumeUuid) {
+ try {
+ return mService.getTotalBytes(volumeUuid, mContext.getOpPackageName());
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Return the free space on the requested storage volume.
+ * <p>
+ * The free space is equivalent to {@link File#getFreeSpace()} plus the size
+ * of any cached data that can be automatically deleted by the system as
+ * additional space is needed.
+ * <p>
+ * This method may take several seconds to calculate the requested values,
+ * so it should only be called from a worker thread.
+ *
+ * @param volumeUuid the UUID of the storage volume you're interested in, or
+ * {@code null} to specify the default internal storage.
+ */
+ @WorkerThread
+ public long getFreeBytes(String volumeUuid) {
+ try {
+ return mService.getFreeBytes(volumeUuid, mContext.getOpPackageName());
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Return storage statistics for a specific UID on the requested storage
+ * volume.
+ * <p>
+ * This method may take several seconds to calculate the requested values,
+ * so it should only be called from a worker thread.
+ *
+ * @param volumeUuid the UUID of the storage volume you're interested in, or
+ * {@code null} to specify the default internal storage.
+ * @param uid the UID you're interested in.
+ */
+ @WorkerThread
+ public StorageStats queryStatsForUid(String volumeUuid, int uid) {
+ try {
+ return mService.queryStatsForUid(volumeUuid, uid, mContext.getOpPackageName());
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Return storage statistics for a specific {@link UserHandle} on the
+ * requested storage volume.
+ * <p>
+ * This method may take several seconds to calculate the requested values,
+ * so it should only be called from a worker thread.
+ *
+ * @param volumeUuid the UUID of the storage volume you're interested in, or
+ * {@code null} to specify the default internal storage.
+ * @param user the user you're interested in.
+ * @see android.os.Process#myUserHandle()
+ */
+ @WorkerThread
+ public StorageStats queryStatsForUser(String volumeUuid, UserHandle user) {
+ try {
+ return mService.queryStatsForUser(volumeUuid, user.getIdentifier(),
+ mContext.getOpPackageName());
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Return shared/external storage statistics for a specific
+ * {@link UserHandle} on the requested storage volume.
+ * <p>
+ * This method may take several seconds to calculate the requested values,
+ * so it should only be called from a worker thread.
+ *
+ * @param volumeUuid the UUID of the storage volume you're interested in, or
+ * {@code null} to specify the default internal storage.
+ * @see android.os.Process#myUserHandle()
+ */
+ @WorkerThread
+ public ExternalStorageStats queryExternalStatsForUser(String volumeUuid, UserHandle user) {
+ try {
+ return mService.queryExternalStatsForUser(volumeUuid, user.getIdentifier(),
+ mContext.getOpPackageName());
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+}
diff --git a/core/java/android/appwidget/AppWidgetHostView.java b/core/java/android/appwidget/AppWidgetHostView.java
index 4c8360f..ef3b1c5 100644
--- a/core/java/android/appwidget/AppWidgetHostView.java
+++ b/core/java/android/appwidget/AppWidgetHostView.java
@@ -347,11 +347,11 @@
}
/**
- * Sets an executor which can be used for asynchronously inflating and applying the remoteviews.
- * @see {@link RemoteViews#applyAsync(Context, ViewGroup, RemoteViews.OnViewAppliedListener, Executor)}
+ * Sets an executor which can be used for asynchronously inflating. CPU intensive tasks like
+ * view inflation or loading images will be performed on the executor. The updates will still
+ * be applied on the UI thread.
*
* @param executor the executor to use or null.
- * @hide
*/
public void setAsyncExecutor(Executor executor) {
if (mLastExecutionSignal != null) {
diff --git a/core/java/android/appwidget/AppWidgetManager.java b/core/java/android/appwidget/AppWidgetManager.java
index 3189681..31e779f 100644
--- a/core/java/android/appwidget/AppWidgetManager.java
+++ b/core/java/android/appwidget/AppWidgetManager.java
@@ -1094,8 +1094,9 @@
* <p>Only apps with a foreground activity or a foreground service can call it. Otherwise
* it'll throw {@link IllegalStateException}.
*
- * <p>When an app calls this API when a previous request is still waiting for a response,
- * the previous request will be canceled.
+ * <p>It's up to the launcher how to handle previous pending requests when the same package
+ * calls this API multiple times in a row. It may ignore the previous requests,
+ * for example.
*
* @param provider The {@link ComponentName} for the {@link
* android.content.BroadcastReceiver BroadcastReceiver} provider for your AppWidget.
diff --git a/core/java/android/bluetooth/BluetoothSocket.java b/core/java/android/bluetooth/BluetoothSocket.java
index b686938..98a5341 100644
--- a/core/java/android/bluetooth/BluetoothSocket.java
+++ b/core/java/android/bluetooth/BluetoothSocket.java
@@ -243,7 +243,7 @@
}
as.mPfd = new ParcelFileDescriptor(fds[0]);
- as.mSocket = new LocalSocket(fds[0]);
+ as.mSocket = LocalSocket.createConnectedLocalSocket(fds[0]);
as.mSocketIS = as.mSocket.getInputStream();
as.mSocketOS = as.mSocket.getOutputStream();
as.mAddress = RemoteAddr;
@@ -367,7 +367,7 @@
if (mSocketState == SocketState.CLOSED) throw new IOException("socket closed");
if (mPfd == null) throw new IOException("bt socket connect failed");
FileDescriptor fd = mPfd.getFileDescriptor();
- mSocket = new LocalSocket(fd);
+ mSocket = LocalSocket.createConnectedLocalSocket(fd);
mSocketIS = mSocket.getInputStream();
mSocketOS = mSocket.getOutputStream();
}
@@ -416,9 +416,9 @@
if(mSocketState != SocketState.INIT) return EBADFD;
if(mPfd == null) return -1;
FileDescriptor fd = mPfd.getFileDescriptor();
- if (DBG) Log.d(TAG, "bindListen(), new LocalSocket ");
- mSocket = new LocalSocket(fd);
- if (DBG) Log.d(TAG, "bindListen(), new LocalSocket.getInputStream() ");
+ if (DBG) Log.d(TAG, "bindListen(), Create LocalSocket");
+ mSocket = LocalSocket.createConnectedLocalSocket(fd);
+ if (DBG) Log.d(TAG, "bindListen(), new LocalSocket.getInputStream()");
mSocketIS = mSocket.getInputStream();
mSocketOS = mSocket.getOutputStream();
}
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index cda98e5..12f6442 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -915,7 +915,12 @@
/**
* Implement this to handle query requests from clients.
- * This method can be called from multiple threads, as described in
+ *
+ * <p>Apps targeting {@link android.os.Build.VERSION_CODES#O} or higher should override
+ * {@link #query(Uri, String[], Bundle, CancellationSignal)} and provide a stub
+ * implementation of this method.
+ *
+ * <p>This method can be called from multiple threads, as described in
* <a href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html#Threads">Processes
* and Threads</a>.
* <p>
@@ -974,7 +979,11 @@
/**
* Implement this to handle query requests from clients with support for cancellation.
- * This method can be called from multiple threads, as described in
+ *
+ * <p>Apps targeting {@link android.os.Build.VERSION_CODES#O} or higher should override
+ * {@link #query(Uri, String[], Bundle, CancellationSignal)} instead of this method.
+ *
+ * <p>This method can be called from multiple threads, as described in
* <a href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html#Threads">Processes
* and Threads</a>.
* <p>
@@ -1048,9 +1057,9 @@
* {@link #query(Uri, String[], String, String[], String, CancellationSignal).
*
* <p>Traditional SQL arguments can be found in the bundle using the following keys:
- * <li>{@link ContentResolver#QUERY_ARG_SELECTION}
- * <li>{@link ContentResolver#QUERY_ARG_SELECTION_ARGS}
- * <li>{@link ContentResolver#QUERY_ARG_SORT_ORDER}
+ * <li>{@link ContentResolver#QUERY_ARG_SQL_SELECTION}
+ * <li>{@link ContentResolver#QUERY_ARG_SQL_SELECTION_ARGS}
+ * <li>{@link ContentResolver#QUERY_ARG_SQL_SORT_ORDER}
*
* @see #query(Uri, String[], String, String[], String, CancellationSignal) for
* implementation details.
@@ -1071,12 +1080,21 @@
public @Nullable Cursor query(@NonNull Uri uri, @Nullable String[] projection,
@Nullable Bundle queryArgs, @Nullable CancellationSignal cancellationSignal) {
queryArgs = queryArgs != null ? queryArgs : Bundle.EMPTY;
+
+ String sortClause = queryArgs.getString(ContentResolver.QUERY_ARG_SQL_SORT_ORDER);
+
+ // if client didn't explicitly supply and sql sort order argument, we try to build
+ // one from sort columns if present.
+ if (sortClause == null && queryArgs.containsKey(ContentResolver.QUERY_ARG_SORT_COLUMNS)) {
+ sortClause = ContentResolver.createSqlSortClause(queryArgs);
+ }
+
return query(
uri,
projection,
- queryArgs.getString(ContentResolver.QUERY_ARG_SELECTION),
- queryArgs.getStringArray(ContentResolver.QUERY_ARG_SELECTION_ARGS),
- queryArgs.getString(ContentResolver.QUERY_ARG_SORT_ORDER),
+ queryArgs.getString(ContentResolver.QUERY_ARG_SQL_SELECTION),
+ queryArgs.getStringArray(ContentResolver.QUERY_ARG_SQL_SELECTION_ARGS),
+ sortClause,
cancellationSignal);
}
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index c4bf4f7..80556bd 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -205,21 +205,111 @@
* Key for an SQL style selection string that may be present in the query Bundle argument
* passed to {@link ContentProvider#query(Uri, String[], Bundle, CancellationSignal)}
* when called by a legacy client.
+ *
+ * <p>Clients should never include user supplied values directly in the selection string,
+ * as this presents an avenue for SQL injection attacks. In lieu of this, a client
+ * should use standard placeholder notation to represent values in a selection string,
+ * then supply a corresponding value in {@value #QUERY_ARG_SQL_SELECTION_ARGS}.
+ *
+ * <p><b>Clients targeting Android O or higher are strongly encourage to use structured
+ * query arguments in lieu of opaque SQL query clauses.</b> See:
+ * {@link #QUERY_ARG_SORT_COLUMNS}, {@link #QUERY_ARG_SORT_DIRECTION}, and
+ * {@link #QUERY_ARG_SORT_COLLATION}.
*/
- public static final String QUERY_ARG_SELECTION = "android:query-selection";
+ public static final String QUERY_ARG_SQL_SELECTION = "android:query-sql-selection";
/**
- * Key for sql selection string arguments list.
- * @see #QUERY_ARG_SELECTION
+ * Key for SQL selection string arguments list.
+ *
+ * <p>Clients should never include user supplied values directly in the selection string,
+ * as this presents an avenue for SQL injection attacks. In lieu of this, a client
+ * should use standard placeholder notation to represent values in a selection string,
+ * then supply a corresponding value in {@value #QUERY_ARG_SQL_SELECTION_ARGS}.
+ *
+ * <p><b>Clients targeting Android O or higher are strongly encourage to use structured
+ * query arguments in lieu of opaque SQL query clauses.</b> See:
+ * {@link #QUERY_ARG_SORT_COLUMNS}, {@link #QUERY_ARG_SORT_DIRECTION}, and
+ * {@link #QUERY_ARG_SORT_COLLATION}.
*/
- public static final String QUERY_ARG_SELECTION_ARGS = "android:query-selection-args";
+ public static final String QUERY_ARG_SQL_SELECTION_ARGS = "android:query-sql-selection-args";
/**
* Key for an SQL style sort string that may be present in the query Bundle argument
* passed to {@link ContentProvider#query(Uri, String[], Bundle, CancellationSignal)}
* when called by a legacy client.
+ *
+ * <p><b>Clients targeting Android O or higher are strongly encourage to use structured
+ * query arguments in lieu of opaque SQL query clauses.</b> See:
+ * {@link #QUERY_ARG_SORT_COLUMNS}, {@link #QUERY_ARG_SORT_DIRECTION}, and
+ * {@link #QUERY_ARG_SORT_COLLATION}.
*/
- public static final String QUERY_ARG_SORT_ORDER = "android:query-sort-order";
+ public static final String QUERY_ARG_SQL_SORT_ORDER = "android:query-sql-sort-order";
+
+ /**
+ * Identifies the list columns against which to sort results.
+ *
+ * <p>Columns present in this list must also be included in the projection
+ * supplied to {@link ContentResolver#query(Uri, String[], Bundle, CancellationSignal)}.
+ *
+ * <p>Apps targeting {@link android.os.Build.VERSION_CODES#O} or higher are strongly
+ * encouraged to include an entry in Cursor extras under this same key as an indication
+ * to the client that column sorting was honored.
+ *
+ * <p>QUERY_SORT* values are exclusive from QUERY_ARG_SQL* arguments.
+ * When any QUERY_SORT arguments are present, any QUERY_ARG_SQL* values will be ignored.
+ */
+ public static final String QUERY_ARG_SORT_COLUMNS = "android:query-sort-columns";
+
+ /**
+ * Specifies desired sort order. When unspecified a provider may provide a default
+ * sort direction, or choose to return unsorted results.
+ *
+ * <p>Apps targeting {@link android.os.Build.VERSION_CODES#O} or higher are strongly
+ * encouraged to include an entry in Cursor extras under this same key as an indication
+ * to the client that sort direction was honored.
+ *
+ * @see #QUERY_SORT_DIRECTION_ASCENDING
+ * @see #QUERY_SORT_DIRECTION_DESCENDING
+ */
+ public static final String QUERY_ARG_SORT_DIRECTION = "android:query-sort-direction";
+
+ /**
+ * Allows client to specify a hint to the provider as to which collation
+ * to use when sorting text values.
+ *
+ * <p>Providers may provide their own collators. When selecting a custom collator
+ * the value will be determined by the Provider.
+ *
+ * <p>apps targeting {@link android.os.Build.VERSION_CODES#O} or higher are strongly
+ * encouraged to include an entry in Cursor extras under this same key as an indication
+ * to the client that collation was honored.
+ *
+ * @see #QUERY_COLLATOR_MODE_NOCASE
+ */
+ public static final String QUERY_ARG_SORT_COLLATION = "android:query-sort-collation";
+
+ /** @hide */
+ @IntDef(flag = false, value = {
+ QUERY_SORT_DIRECTION_ASCENDING,
+ QUERY_SORT_DIRECTION_DESCENDING
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface SortDirection {}
+ public static final int QUERY_SORT_DIRECTION_ASCENDING = 0;
+ public static final int QUERY_SORT_DIRECTION_DESCENDING = 1;
+
+ /**
+ * @see {@link java.text.Collector} for details on respective collation strength.
+ * @hide
+ */
+ @IntDef(flag = false, value = {
+ java.text.Collator.PRIMARY,
+ java.text.Collator.SECONDARY,
+ java.text.Collator.TERTIARY,
+ java.text.Collator.IDENTICAL
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface QueryCollator {}
/**
* This is the Android platform's base MIME type for a content: URI
@@ -2685,8 +2775,8 @@
EventLogTags.CONTENT_QUERY_SAMPLE,
uri.toString(),
projectionBuffer.toString(),
- queryArgs.getString(QUERY_ARG_SELECTION, ""),
- queryArgs.getString(QUERY_ARG_SORT_ORDER, ""),
+ queryArgs.getString(QUERY_ARG_SQL_SELECTION, ""),
+ queryArgs.getString(QUERY_ARG_SQL_SORT_ORDER, ""),
durationMillis,
blockingPackage != null ? blockingPackage : "",
samplePercent);
@@ -2815,14 +2905,54 @@
Bundle queryArgs = new Bundle();
if (selection != null) {
- queryArgs.putString(QUERY_ARG_SELECTION, selection);
+ queryArgs.putString(QUERY_ARG_SQL_SELECTION, selection);
}
if (selectionArgs != null) {
- queryArgs.putStringArray(QUERY_ARG_SELECTION_ARGS, selectionArgs);
+ queryArgs.putStringArray(QUERY_ARG_SQL_SELECTION_ARGS, selectionArgs);
}
if (sortOrder != null) {
- queryArgs.putString(QUERY_ARG_SORT_ORDER, sortOrder);
+ queryArgs.putString(QUERY_ARG_SQL_SORT_ORDER, sortOrder);
}
return queryArgs;
}
+
+ /**
+ * Returns structured sort args formatted as an SQL sort clause.
+ *
+ * Collator clauses are not included as column information is unknown, and
+ * collate clauses should only be included on text fields.
+ *
+ * TODO: Should we explicitly validate that colums are present in the projection?
+ *
+ * @hide
+ */
+ public static String createSqlSortClause(Bundle queryArgs) {
+ String[] columns = queryArgs.getStringArray(QUERY_ARG_SORT_COLUMNS);
+ if (columns == null || columns.length == 0) {
+ throw new IllegalArgumentException("Can't create sort clause without columns.");
+ }
+
+ String query = TextUtils.join(", ", columns);
+
+ switch (queryArgs.getInt(
+ QUERY_ARG_SORT_DIRECTION, Integer.MIN_VALUE)) {
+ case QUERY_SORT_DIRECTION_ASCENDING:
+ query += " ASC";
+ break;
+ case QUERY_SORT_DIRECTION_DESCENDING:
+ query += " DESC";
+ break;
+ default:
+ throw new IllegalArgumentException("Unsupported sort direction value."
+ + " See ContentResolver documentation for details.");
+ }
+
+ // Interpret PRIMARY collation strength as no-case collation.
+ int collation = queryArgs.getInt(
+ ContentResolver.QUERY_ARG_SORT_COLLATION, java.text.Collator.IDENTICAL);
+ if (collation == java.text.Collator.PRIMARY || collation == java.text.Collator.SECONDARY) {
+ query += " COLLATE NOCASE";
+ }
+ return query;
+ }
}
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 9dc60ab..af5e643 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -2680,6 +2680,7 @@
SEARCH_SERVICE,
SENSOR_SERVICE,
STORAGE_SERVICE,
+ STORAGE_STATS_SERVICE,
WALLPAPER_SERVICE,
VIBRATOR_SERVICE,
//@hide: STATUS_BAR_SERVICE,
@@ -2792,6 +2793,9 @@
* connectivity. On releases before NYC, it should only be obtained from an application
* context, and not from any other derived context to avoid memory leaks within the calling
* process.
+ * <dt> {@link #WIFI_AWARE_SERVICE} ("wifiaware")
+ * <dd> A {@link android.net.wifi.aware.WifiAwareManager WifiAwareManager} for management of
+ * Wi-Fi Aware discovery and connectivity.
* <dt> {@link #WIFI_P2P_SERVICE} ("wifip2p")
* <dd> A {@link android.net.wifi.p2p.WifiP2pManager WifiP2pManager} for management of
* Wi-Fi Direct connectivity.
@@ -3077,6 +3081,16 @@
public static final String STORAGE_SERVICE = "storage";
/**
+ * Use with {@link #getSystemService} to retrieve a {@link
+ * android.app.usage.StorageStatsManager} for accessing system storage
+ * statistics.
+ *
+ * @see #getSystemService
+ * @see android.app.usage.StorageStatsManager
+ */
+ public static final String STORAGE_STATS_SERVICE = "storagestats";
+
+ /**
* Use with {@link #getSystemService} to retrieve a
* com.android.server.WallpaperService for accessing wallpapers.
*
@@ -3168,7 +3182,6 @@
*
* @see #getSystemService
* @see android.net.wifi.aware.WifiAwareManager
- * @hide PROPOSED_AWARE_API
*/
public static final String WIFI_AWARE_SERVICE = "wifiaware";
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index 9b99bbf..71071e1 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -16,6 +16,9 @@
package android.content.pm;
+import static android.os.Build.VERSION_CODES.DONUT;
+
+import android.annotation.IntDef;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.content.Context;
@@ -31,6 +34,8 @@
import com.android.internal.util.ArrayUtils;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.text.Collator;
import java.util.Arrays;
import java.util.Comparator;
@@ -342,9 +347,12 @@
public static final int FLAG_IS_DATA_ONLY = 1<<24;
/**
- * Value for {@link #flags}: true if the application was declared to be a game, or
- * false if it is a non-game application.
+ * Value for {@link #flags}: true if the application was declared to be a
+ * game, or false if it is a non-game application.
+ *
+ * @deprecated use {@link #CATEGORY_GAME} instead.
*/
+ @Deprecated
public static final int FLAG_IS_GAME = 1<<25;
/**
@@ -777,6 +785,134 @@
*/
public int networkSecurityConfigRes;
+ /**
+ * The category of this app. Categories are used to cluster multiple apps
+ * together into meaningful groups, such as when summarizing battery,
+ * network, or disk usage. Apps should only define this value when they fit
+ * well into one of the specific categories.
+ * <p>
+ * Set from the {@link android.R.attr#appCategory} attribute in the
+ * manifest. If the manifest doesn't define a category, this value may have
+ * been provided by the installer via
+ * {@link PackageManager#setApplicationCategoryHint(String, int)}.
+ */
+ public @Category int category = CATEGORY_UNDEFINED;
+
+ /** {@hide} */
+ @IntDef({
+ CATEGORY_UNDEFINED,
+ CATEGORY_GAME,
+ CATEGORY_AUDIO,
+ CATEGORY_VIDEO,
+ CATEGORY_IMAGE,
+ CATEGORY_SOCIAL,
+ CATEGORY_NEWS,
+ CATEGORY_MAPS,
+ CATEGORY_PRODUCTIVITY
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface Category {
+ }
+
+ /**
+ * Value when category is undefined.
+ *
+ * @see #category
+ */
+ public static final int CATEGORY_UNDEFINED = -1;
+
+ /**
+ * Category for apps which are primarily games.
+ *
+ * @see #category
+ */
+ public static final int CATEGORY_GAME = 0;
+
+ /**
+ * Category for apps which primarily work with audio or music, such as music
+ * players.
+ *
+ * @see #category
+ */
+ public static final int CATEGORY_AUDIO = 1;
+
+ /**
+ * Category for apps which primarily work with video or movies, such as
+ * streaming video apps.
+ *
+ * @see #category
+ */
+ public static final int CATEGORY_VIDEO = 2;
+
+ /**
+ * Category for apps which primarily work with images or photos, such as
+ * camera or gallery apps.
+ *
+ * @see #category
+ */
+ public static final int CATEGORY_IMAGE = 3;
+
+ /**
+ * Category for apps which are primarily social apps, such as messaging,
+ * communication, or social network apps.
+ *
+ * @see #category
+ */
+ public static final int CATEGORY_SOCIAL = 4;
+
+ /**
+ * Category for apps which are primarily news apps, such as newspapers,
+ * magazines, or sports apps.
+ *
+ * @see #category
+ */
+ public static final int CATEGORY_NEWS = 5;
+
+ /**
+ * Category for apps which are primarily maps apps, such as navigation apps.
+ *
+ * @see #category
+ */
+ public static final int CATEGORY_MAPS = 6;
+
+ /**
+ * Category for apps which are primarily productivity apps, such as cloud
+ * storage or workplace apps.
+ *
+ * @see #category
+ */
+ public static final int CATEGORY_PRODUCTIVITY = 7;
+
+ /**
+ * Return a concise, localized title for the given
+ * {@link ApplicationInfo#category} value, or {@code null} for unknown
+ * values such as {@link #CATEGORY_UNDEFINED}.
+ *
+ * @see #category
+ */
+ public static CharSequence getCategoryTitle(Context context, @Category int category) {
+ switch (category) {
+ case ApplicationInfo.CATEGORY_GAME:
+ return context.getText(com.android.internal.R.string.app_category_game);
+ case ApplicationInfo.CATEGORY_AUDIO:
+ return context.getText(com.android.internal.R.string.app_category_audio);
+ case ApplicationInfo.CATEGORY_VIDEO:
+ return context.getText(com.android.internal.R.string.app_category_video);
+ case ApplicationInfo.CATEGORY_IMAGE:
+ return context.getText(com.android.internal.R.string.app_category_image);
+ case ApplicationInfo.CATEGORY_SOCIAL:
+ return context.getText(com.android.internal.R.string.app_category_social);
+ case ApplicationInfo.CATEGORY_NEWS:
+ return context.getText(com.android.internal.R.string.app_category_news);
+ case ApplicationInfo.CATEGORY_MAPS:
+ return context.getText(com.android.internal.R.string.app_category_maps);
+ case ApplicationInfo.CATEGORY_PRODUCTIVITY:
+ return context.getText(com.android.internal.R.string.app_category_productivity);
+ default:
+ return null;
+ }
+ }
+
public void dump(Printer pw, String prefix) {
dump(pw, prefix, DUMP_FLAG_ALL);
}
@@ -852,6 +988,9 @@
pw.println(prefix + "networkSecurityConfigRes=0x"
+ Integer.toHexString(networkSecurityConfigRes));
}
+ if (category != CATEGORY_UNDEFINED) {
+ pw.println(prefix + "category=" + category);
+ }
}
super.dumpBack(pw, prefix);
}
@@ -939,6 +1078,7 @@
backupAgentName = orig.backupAgentName;
fullBackupContent = orig.fullBackupContent;
networkSecurityConfigRes = orig.networkSecurityConfigRes;
+ category = orig.category;
}
public String toString() {
@@ -995,6 +1135,7 @@
dest.writeInt(uiOptions);
dest.writeInt(fullBackupContent);
dest.writeInt(networkSecurityConfigRes);
+ dest.writeInt(category);
}
public static final Parcelable.Creator<ApplicationInfo> CREATOR
@@ -1051,6 +1192,7 @@
uiOptions = source.readInt();
fullBackupContent = source.readInt();
networkSecurityConfigRes = source.readInt();
+ category = source.readInt();
}
/**
@@ -1085,6 +1227,18 @@
FLAG_SUPPORTS_SCREEN_DENSITIES | FLAG_SUPPORTS_XLARGE_SCREENS);
}
+ /**
+ * Is using compatibility mode for non densty aware legacy applications.
+ *
+ * @hide
+ */
+ public boolean usesCompatibilityMode() {
+ return targetSdkVersion < DONUT ||
+ (flags & (FLAG_SUPPORTS_LARGE_SCREENS | FLAG_SUPPORTS_NORMAL_SCREENS |
+ FLAG_SUPPORTS_SMALL_SCREENS | FLAG_RESIZEABLE_FOR_SCREENS |
+ FLAG_SUPPORTS_SCREEN_DENSITIES | FLAG_SUPPORTS_XLARGE_SCREENS)) == 0;
+ }
+
/** {@hide} */
public void initForUser(int userId) {
uid = UserHandle.getUid(userId, UserHandle.getAppId(uid));
diff --git a/core/java/android/content/pm/FallbackCategoryProvider.java b/core/java/android/content/pm/FallbackCategoryProvider.java
new file mode 100644
index 0000000..a0a11aa
--- /dev/null
+++ b/core/java/android/content/pm/FallbackCategoryProvider.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.content.pm;
+
+import android.content.res.AssetManager;
+import android.content.res.Resources;
+import android.os.SystemProperties;
+import android.util.ArrayMap;
+import android.util.Log;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+/**
+ * Class that provides fallback values for {@link ApplicationInfo#category}.
+ *
+ * @hide
+ */
+public class FallbackCategoryProvider {
+ private static final String TAG = "FallbackCategoryProvider";
+
+ private static final ArrayMap<String, Integer> sFallbacks = new ArrayMap<>();
+
+ public static void loadFallbacks() {
+ sFallbacks.clear();
+ if (SystemProperties.getBoolean("fw.ignore_fb_categories", false)) {
+ Log.d(TAG, "Ignoring fallback categories");
+ return;
+ }
+
+ final AssetManager assets = new AssetManager();
+ assets.addAssetPath("/system/framework/framework-res.apk");
+ final Resources res = new Resources(assets, null, null);
+
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(
+ res.openRawResource(com.android.internal.R.raw.fallback_categories)))) {
+ String line;
+ while ((line = reader.readLine()) != null) {
+ if (line.charAt(0) == '#') continue;
+ final String[] split = line.split(",");
+ if (split.length == 2) {
+ sFallbacks.put(split[0], Integer.parseInt(split[1]));
+ }
+ }
+ Log.d(TAG, "Found " + sFallbacks.size() + " fallback categories");
+ } catch (IOException | NumberFormatException e) {
+ Log.w(TAG, "Failed to read fallback categories", e);
+ }
+ }
+
+ public static int getFallbackCategory(String packageName) {
+ return sFallbacks.getOrDefault(packageName, ApplicationInfo.CATEGORY_UNDEFINED);
+ }
+}
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index b9b61db..eb0ca2e 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -226,6 +226,8 @@
void setInstallerPackageName(in String targetPackage, in String installerPackageName);
+ void setApplicationCategoryHint(String packageName, int categoryHint, String callerPackageName);
+
/** @deprecated rawr, don't call AIDL methods directly! */
void deletePackageAsUser(in String packageName, IPackageDeleteObserver observer,
int userId, int flags);
diff --git a/core/java/android/content/pm/LauncherApps.java b/core/java/android/content/pm/LauncherApps.java
index 4b5b995..4cdd653 100644
--- a/core/java/android/content/pm/LauncherApps.java
+++ b/core/java/android/content/pm/LauncherApps.java
@@ -481,15 +481,15 @@
}
/**
- * Retrieve all of the information we know about a particular package / application.
+ * Get {@link ApplicationInfo} for a profile
*
* @param packageName The package name of the application
* @param flags Additional option flags {@link PackageManager#getApplicationInfo}
* @param user The UserHandle of the profile.
*
* @return An {@link ApplicationInfo} containing information about the package or
- * null if the package isn't installed for the given user.
- * @hide
+ * null if the package isn't installed for the given user, or the target user
+ * is not enabled.
*/
public ApplicationInfo getApplicationInfo(String packageName, @ApplicationInfoFlags int flags,
UserHandle user) {
@@ -1142,6 +1142,7 @@
/** This is a request to pin app widget. */
public static final int REQUEST_TYPE_APPWIDGET = 2;
+ /** @hide */
@IntDef(value = {REQUEST_TYPE_SHORTCUT})
@Retention(RetentionPolicy.SOURCE)
public @interface RequestType {}
@@ -1200,7 +1201,7 @@
/**
* Return {@code TRUE} if a request is valid -- i.e. {@link #accept(Bundle)} has not been
- * called, and it has not been canceled.
+ * called yet.
*/
public boolean isValid() {
try {
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 2fbb5b1..0cd67b7 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -2070,8 +2070,6 @@
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports Wi-Fi Aware.
- *
- * @hide PROPOSED_AWARE_API
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_WIFI_AWARE = "android.hardware.wifi.aware";
@@ -5587,6 +5585,16 @@
*/
public abstract boolean isPackageSuspendedForUser(String packageName, int userId);
+ /**
+ * Provide a hint of what the {@link ApplicationInfo#category} value should
+ * be for the given package.
+ * <p>
+ * This hint can only be set by the app which installed this package, as
+ * determined by {@link #getInstallerPackageName(String)}.
+ */
+ public abstract void setApplicationCategoryHint(String packageName,
+ @ApplicationInfo.Category int categoryHint);
+
/** {@hide} */
public static boolean isMoveStatusFinished(int status) {
return (status < 0 || status > 100);
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index cf4c0fa..a48762b 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -16,15 +16,30 @@
package android.content.pm;
-import android.os.Parcel;
-import android.os.Parcelable;
-import com.android.internal.R;
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.util.ArrayUtils;
-import com.android.internal.util.XmlUtils;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
+import static android.content.pm.ActivityInfo.FLAG_ALWAYS_FOCUSABLE;
+import static android.content.pm.ActivityInfo.FLAG_ON_TOP_LAUNCHER;
+import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_LANDSCAPE_ONLY;
+import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_PORTRAIT_ONLY;
+import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_PRESERVE_ORIENTATION;
+import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZEABLE;
+import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;
+import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE_AND_PIPABLE;
+import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
+import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
+import static android.content.pm.ApplicationInfo.FLAG_SUSPENDED;
+import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_EXPLICITLY_SET;
+import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_VIA_SDK_VERSION;
+import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_BAD_MANIFEST;
+import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME;
+import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING;
+import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES;
+import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
+import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_NOT_APK;
+import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_NO_CERTIFICATES;
+import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION;
+import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER;
+import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_ROTATE;
import android.annotation.IntRange;
import android.annotation.NonNull;
@@ -42,6 +57,8 @@
import android.os.Build;
import android.os.Bundle;
import android.os.FileUtils;
+import android.os.Parcel;
+import android.os.Parcelable;
import android.os.PatternMatcher;
import android.os.Trace;
import android.os.UserHandle;
@@ -62,6 +79,16 @@
import android.util.jar.StrictJarFile;
import android.view.Gravity;
+import com.android.internal.R;
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.XmlUtils;
+
+import libcore.io.IoUtils;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -83,38 +110,10 @@
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
-import java.util.Objects;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
import java.util.zip.ZipEntry;
-import libcore.io.IoUtils;
-
-import static android.content.pm.ActivityInfo.FLAG_ALWAYS_FOCUSABLE;
-import static android.content.pm.ActivityInfo.FLAG_ON_TOP_LAUNCHER;
-import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZEABLE;
-import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_LANDSCAPE_ONLY;
-import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_PORTRAIT_ONLY;
-import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_PRESERVE_ORIENTATION;
-import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;
-import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE_AND_PIPABLE;
-import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
-import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
-import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
-import static android.content.pm.ApplicationInfo.FLAG_SUSPENDED;
-import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_EXPLICITLY_SET;
-import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_VIA_SDK_VERSION;
-import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_BAD_MANIFEST;
-import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME;
-import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING;
-import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES;
-import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
-import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_NOT_APK;
-import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_NO_CERTIFICATES;
-import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION;
-import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER;
-import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_ROTATE;
-
/**
* Parser for package files (APKs) on disk. This supports apps packaged either
* as a single "monolithic" APK, or apps packaged as a "cluster" of multiple
@@ -2387,10 +2386,28 @@
pkg.applicationInfo.flags |= ApplicationInfo.FLAG_SUPPORTS_SCREEN_DENSITIES;
}
+ // At this point we can check if an application is not supporting densities and hence
+ // cannot be windowed / resized. Note that an SDK version of 0 is common for
+ // pre-Doughnut applications.
+ if (pkg.applicationInfo.usesCompatibilityMode()) {
+ adjustPackageToBeUnresizeable(pkg);
+ }
return pkg;
}
/**
+ * This is a pre-density application which will get scaled - instead of being pixel perfect.
+ * This type of application is not resizable.
+ *
+ * @param pkg The package which needs to be marked as unresizable.
+ */
+ private void adjustPackageToBeUnresizeable(Package pkg) {
+ for (Activity a : pkg.activities) {
+ a.info.resizeMode = RESIZE_MODE_UNRESIZEABLE;
+ }
+ }
+
+ /**
* Computes the targetSdkVersion to use at runtime. If the package is not
* compatible with this platform, populates {@code outError[0]} with an
* error message.
@@ -3256,6 +3273,9 @@
ai.networkSecurityConfigRes = sa.getResourceId(
com.android.internal.R.styleable.AndroidManifestApplication_networkSecurityConfig,
0);
+ ai.category = sa.getInt(
+ com.android.internal.R.styleable.AndroidManifestApplication_appCategory,
+ ApplicationInfo.CATEGORY_UNDEFINED);
String str;
str = sa.getNonConfigurationString(
@@ -6237,6 +6257,12 @@
ai.enabled = false;
}
ai.enabledSetting = state.enabled;
+ if (ai.category == ApplicationInfo.CATEGORY_UNDEFINED) {
+ ai.category = state.categoryHint;
+ }
+ if (ai.category == ApplicationInfo.CATEGORY_UNDEFINED) {
+ ai.category = FallbackCategoryProvider.getFallbackCategory(ai.packageName);
+ }
}
public static ApplicationInfo generateApplicationInfo(Package p, int flags,
diff --git a/core/java/android/content/pm/PackageUserState.java b/core/java/android/content/pm/PackageUserState.java
index 1821458..eb3f275 100644
--- a/core/java/android/content/pm/PackageUserState.java
+++ b/core/java/android/content/pm/PackageUserState.java
@@ -47,6 +47,7 @@
public String lastDisableAppCaller;
public int domainVerificationStatus;
public int appLinkGeneration;
+ public int categoryHint = ApplicationInfo.CATEGORY_UNDEFINED;
public ArraySet<String> disabledComponents;
public ArraySet<String> enabledComponents;
@@ -72,6 +73,7 @@
lastDisableAppCaller = o.lastDisableAppCaller;
domainVerificationStatus = o.domainVerificationStatus;
appLinkGeneration = o.appLinkGeneration;
+ categoryHint = o.categoryHint;
disabledComponents = ArrayUtils.cloneOrNull(o.disabledComponents);
enabledComponents = ArrayUtils.cloneOrNull(o.enabledComponents);
}
@@ -197,6 +199,9 @@
if (appLinkGeneration != oldState.appLinkGeneration) {
return false;
}
+ if (categoryHint != oldState.categoryHint) {
+ return false;
+ }
if ((disabledComponents == null && oldState.disabledComponents != null)
|| (disabledComponents != null && oldState.disabledComponents == null)) {
return false;
diff --git a/core/java/android/content/pm/ShortcutInfo.java b/core/java/android/content/pm/ShortcutInfo.java
index a4d8916..b4dcdf7 100644
--- a/core/java/android/content/pm/ShortcutInfo.java
+++ b/core/java/android/content/pm/ShortcutInfo.java
@@ -1061,11 +1061,6 @@
* Launcher apps should show the launcher icon for the returned activity alongside
* this shortcut.
*
- * <p>When a shortcut is dynamic or manifest
- * (i.e. either {@link #isDynamic()} or {@link #isDeclaredInManifest()} returns {@code TRUE}),
- * then it should always have a non-null target activity.
- * Otherwise it will return null.
- *
* @see Builder#setActivity
*/
@Nullable
@@ -1372,7 +1367,7 @@
}
/**
- * Return {@code TRUE} if a shortcut is pinned but neither manifest nor dynamic.
+ * @return true if pinned but neither static nor dynamic.
* @hide
*/
public boolean isFloating() {
diff --git a/core/java/android/content/pm/ShortcutManager.java b/core/java/android/content/pm/ShortcutManager.java
index c8fb3d1..3853400 100644
--- a/core/java/android/content/pm/ShortcutManager.java
+++ b/core/java/android/content/pm/ShortcutManager.java
@@ -846,8 +846,9 @@
* <p>Only apps with a foreground activity or a foreground service can call it. Otherwise
* it'll throw {@link IllegalStateException}.
*
- * <p>When an app calls this API when a previous request is still waiting for a response,
- * the previous request will be canceled.
+ * <p>It's up to the launcher how to handle previous pending requests when the same package
+ * calls this API multiple times in a row. It may ignore the previous requests,
+ * for example.
*
* @param shortcut New shortcut to pin. If an app wants to pin an existing (either dynamic
* or manifest) shortcut, then it only needs to have an ID, and other fields don't have to
diff --git a/core/java/android/hardware/display/DisplayManagerInternal.java b/core/java/android/hardware/display/DisplayManagerInternal.java
index 13ba6cc..aea1258 100644
--- a/core/java/android/hardware/display/DisplayManagerInternal.java
+++ b/core/java/android/hardware/display/DisplayManagerInternal.java
@@ -167,6 +167,8 @@
public static final int POLICY_DIM = 2;
// Policy: Make the screen bright as usual.
public static final int POLICY_BRIGHT = 3;
+ // Policy: Keep the screen and display optimized for VR mode.
+ public static final int POLICY_VR = 4;
// The basic overall policy to apply: off, doze, dim or bright.
public int policy;
@@ -233,6 +235,10 @@
return policy == POLICY_BRIGHT || policy == POLICY_DIM;
}
+ public boolean isVr() {
+ return policy == POLICY_VR;
+ }
+
public void copyFrom(DisplayPowerRequest other) {
policy = other.policy;
useProximitySensor = other.useProximitySensor;
@@ -301,6 +307,8 @@
return "DIM";
case POLICY_BRIGHT:
return "BRIGHT";
+ case POLICY_VR:
+ return "VR";
default:
return Integer.toString(policy);
}
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index d1d5f40..ac0c0dc 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -1163,6 +1163,7 @@
* {@link #requestNetwork(NetworkRequest, NetworkCallback)} API.
* In {@link VERSION_CODES#M}, and above, this method is unsupported and will
* throw {@code UnsupportedOperationException} if called.
+ * @removed
*/
@Deprecated
public int startUsingNetworkFeature(int networkType, String feature) {
@@ -1219,6 +1220,7 @@
* {@link #unregisterNetworkCallback(NetworkCallback)} API.
* In {@link VERSION_CODES#M}, and above, this method is unsupported and will
* throw {@code UnsupportedOperationException} if called.
+ * @removed
*/
@Deprecated
public int stopUsingNetworkFeature(int networkType, String feature) {
@@ -1633,6 +1635,7 @@
* {@link #bindProcessToNetwork} and {@link Network#getSocketFactory} API.
* In {@link VERSION_CODES#M}, and above, this method is unsupported and will
* throw {@code UnsupportedOperationException} if called.
+ * @removed
*/
@Deprecated
public boolean requestRouteToHost(int networkType, int hostAddress) {
diff --git a/core/java/android/net/INetworkScoreService.aidl b/core/java/android/net/INetworkScoreService.aidl
index 932f031..9573953 100644
--- a/core/java/android/net/INetworkScoreService.aidl
+++ b/core/java/android/net/INetworkScoreService.aidl
@@ -100,4 +100,21 @@
* @hide
*/
boolean requestScores(in NetworkKey[] networks);
+
+ /**
+ * Determine whether the application with the given UID is the enabled scorer.
+ *
+ * @param callingUid the UID to check
+ * @return true if the provided UID is the active scorer, false otherwise.
+ * @hide
+ */
+ boolean isCallerActiveScorer(int callingUid);
+
+ /**
+ * Obtain the package name of the current active network scorer.
+ *
+ * @return the full package name of the current active scorer, or null if there is no active
+ * scorer.
+ */
+ String getActiveScorerPackage();
}
diff --git a/core/java/android/net/LocalServerSocket.java b/core/java/android/net/LocalServerSocket.java
index e1eaf00..3fcde330 100644
--- a/core/java/android/net/LocalServerSocket.java
+++ b/core/java/android/net/LocalServerSocket.java
@@ -89,7 +89,7 @@
impl.accept(acceptedImpl);
- return LocalSocket.createLocalSocketForAccept(acceptedImpl, LocalSocket.SOCKET_UNKNOWN);
+ return LocalSocket.createLocalSocketForAccept(acceptedImpl);
}
/**
diff --git a/core/java/android/net/LocalSocket.java b/core/java/android/net/LocalSocket.java
index d9ad74b..8afa1ed 100644
--- a/core/java/android/net/LocalSocket.java
+++ b/core/java/android/net/LocalSocket.java
@@ -31,6 +31,7 @@
public class LocalSocket implements Closeable {
private final LocalSocketImpl impl;
+ /** false if impl.create() needs to be called */
private volatile boolean implCreated;
private LocalSocketAddress localAddress;
private boolean isBound;
@@ -61,19 +62,6 @@
*/
public LocalSocket(int sockType) {
this(new LocalSocketImpl(), sockType);
- isBound = false;
- isConnected = false;
- }
-
- /**
- * Creates a AF_LOCAL/UNIX domain stream socket with FileDescriptor.
- * @hide
- */
- public LocalSocket(FileDescriptor fd) throws IOException {
- this(new LocalSocketImpl(fd), SOCKET_UNKNOWN);
- isBound = true;
- isConnected = true;
- implCreated = true;
}
private LocalSocket(LocalSocketImpl impl, int sockType) {
@@ -84,9 +72,27 @@
}
/**
+ * Creates a LocalSocket instances using the FileDescriptor for an already-connected
+ * AF_LOCAL/UNIX domain stream socket. Note: the FileDescriptor must be closed by the caller:
+ * closing the LocalSocket will not close it.
+ *
+ * @hide - used by BluetoothSocket.
+ */
+ public static LocalSocket createConnectedLocalSocket(FileDescriptor fd) {
+ return createConnectedLocalSocket(new LocalSocketImpl(fd), SOCKET_UNKNOWN);
+ }
+
+ /**
* for use with LocalServerSocket.accept()
*/
- static LocalSocket createLocalSocketForAccept(LocalSocketImpl impl, int sockType) {
+ static LocalSocket createLocalSocketForAccept(LocalSocketImpl impl) {
+ return createConnectedLocalSocket(impl, SOCKET_UNKNOWN);
+ }
+
+ /**
+ * Creates a LocalSocket from an existing LocalSocketImpl that is already connected.
+ */
+ private static LocalSocket createConnectedLocalSocket(LocalSocketImpl impl, int sockType) {
LocalSocket socket = new LocalSocket(impl, sockType);
socket.isConnected = true;
socket.isBound = true;
diff --git a/core/java/android/net/LocalSocketImpl.java b/core/java/android/net/LocalSocketImpl.java
index d8f7821..05c8afb 100644
--- a/core/java/android/net/LocalSocketImpl.java
+++ b/core/java/android/net/LocalSocketImpl.java
@@ -218,7 +218,7 @@
*
* @param fd non-null; bound file descriptor
*/
- /*package*/ LocalSocketImpl(FileDescriptor fd) throws IOException
+ /*package*/ LocalSocketImpl(FileDescriptor fd)
{
this.fd = fd;
}
diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java
index dacea55..4dd8ce9 100644
--- a/core/java/android/net/NetworkCapabilities.java
+++ b/core/java/android/net/NetworkCapabilities.java
@@ -420,8 +420,6 @@
/**
* Indicates this network uses a Wi-Fi Aware transport.
- *
- * @hide PROPOSED_AWARE_API
*/
public static final int TRANSPORT_WIFI_AWARE = 5;
diff --git a/core/java/android/net/NetworkScoreManager.java b/core/java/android/net/NetworkScoreManager.java
index 4e606ef..2870dd6 100644
--- a/core/java/android/net/NetworkScoreManager.java
+++ b/core/java/android/net/NetworkScoreManager.java
@@ -16,18 +16,15 @@
package android.net;
-import android.Manifest;
import android.annotation.IntDef;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.SystemApi;
import android.content.Context;
-import android.content.Intent;
import android.net.NetworkScorerAppManager.NetworkScorerAppData;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.ServiceManager.ServiceNotFoundException;
-import android.os.UserHandle;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -44,19 +41,11 @@
* <p>A network scorer is any application which:
* <ul>
* <li>Declares the {@link android.Manifest.permission#SCORE_NETWORKS} permission.
- * <li>Includes a receiver for {@link #ACTION_SCORE_NETWORKS} guarded by the
- * {@link android.Manifest.permission#BROADCAST_NETWORK_PRIVILEGED} permission which scores
- * networks and (eventually) calls {@link #updateScores} with the results. If this receiver
- * specifies an android:label attribute, this label will be used when referring to the
- * application throughout system settings; otherwise, the application label will be used.
+ * <li>Include a Service for the {@link #ACTION_RECOMMEND_NETWORKS} action
+ * protected by the {@link android.Manifest.permission#BIND_NETWORK_RECOMMENDATION_SERVICE}
+ * permission.
* </ul>
*
- * <p>The system keeps track of an active scorer application; at any time, only this application
- * will receive {@link #ACTION_SCORE_NETWORKS} broadcasts and will be permitted to call
- * {@link #updateScores}. Applications may determine the current active scorer with
- * {@link #getActiveScorerPackage()} and request to change the active scorer by sending an
- * {@link #ACTION_CHANGE_ACTIVE} broadcast with another scorer.
- *
* @hide
*/
@SystemApi
@@ -179,11 +168,11 @@
* scorer.
*/
public String getActiveScorerPackage() {
- NetworkScorerAppData app = new NetworkScorerAppManager(mContext).getActiveScorer();
- if (app == null) {
- return null;
+ try {
+ return mService.getActiveScorerPackage();
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
}
- return app.packageName;
}
/**
@@ -263,12 +252,9 @@
/**
* Request scoring for networks.
*
- * <p>Note that this is just a helper method to assemble the broadcast, and will run in the
- * calling process.
- *
* @return true if the broadcast was sent, or false if there is no active scorer.
* @throws SecurityException if the caller does not hold the
- * {@link android.Manifest.permission#BROADCAST_NETWORK_PRIVILEGED} permission.
+ * {@link android.Manifest.permission#REQUEST_NETWORK_SCORES} permission.
* @hide
*/
public boolean requestScores(NetworkKey[] networks) throws SecurityException {
@@ -285,7 +271,7 @@
* @param networkType the type of network this cache can handle. See {@link NetworkKey#type}.
* @param scoreCache implementation of {@link INetworkScoreCache} to store the scores.
* @throws SecurityException if the caller does not hold the
- * {@link android.Manifest.permission#BROADCAST_NETWORK_PRIVILEGED} permission.
+ * {@link android.Manifest.permission#REQUEST_NETWORK_SCORES} permission.
* @throws IllegalArgumentException if a score cache is already registered for this type.
* @deprecated equivalent to registering for cache updates with CACHE_FILTER_NONE.
* @hide
@@ -302,7 +288,7 @@
* @param scoreCache implementation of {@link INetworkScoreCache} to store the scores
* @param filterType the {@link CacheUpdateFilter} to apply
* @throws SecurityException if the caller does not hold the
- * {@link android.Manifest.permission#BROADCAST_NETWORK_PRIVILEGED} permission.
+ * {@link android.Manifest.permission#REQUEST_NETWORK_SCORES} permission.
* @throws IllegalArgumentException if a score cache is already registered for this type.
* @hide
*/
@@ -321,7 +307,7 @@
* @param networkType the type of network this cache can handle. See {@link NetworkKey#type}.
* @param scoreCache implementation of {@link INetworkScoreCache} to store the scores.
* @throws SecurityException if the caller does not hold the
- * {@link android.Manifest.permission#BROADCAST_NETWORK_PRIVILEGED} permission.
+ * {@link android.Manifest.permission#REQUEST_NETWORK_SCORES} permission.
* @throws IllegalArgumentException if a score cache is already registered for this type.
* @hide
*/
@@ -342,7 +328,8 @@
* request details
* @return a {@link RecommendationResult} instance containing the recommended network
* to connect to
- * @throws SecurityException
+ * @throws SecurityException if the caller does not hold the
+ * {@link android.Manifest.permission#REQUEST_NETWORK_SCORES} permission.
*/
public RecommendationResult requestRecommendation(RecommendationRequest request)
throws SecurityException {
@@ -352,4 +339,19 @@
throw e.rethrowFromSystemServer();
}
}
+
+ /**
+ * Determine whether the application with the given UID is the enabled scorer.
+ *
+ * @param callingUid the UID to check
+ * @return true if the provided UID is the active scorer, false otherwise.
+ * @hide
+ */
+ public boolean isCallerActiveScorer(int callingUid) {
+ try {
+ return mService.isCallerActiveScorer(callingUid);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
}
diff --git a/core/java/android/net/NetworkScorerAppManager.java b/core/java/android/net/NetworkScorerAppManager.java
index ec0bb25d..23d5af5 100644
--- a/core/java/android/net/NetworkScorerAppManager.java
+++ b/core/java/android/net/NetworkScorerAppManager.java
@@ -16,7 +16,6 @@
package android.net;
-import android.Manifest;
import android.Manifest.permission;
import android.annotation.Nullable;
import android.content.ContentResolver;
@@ -28,7 +27,9 @@
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
+
import com.android.internal.R;
+
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -226,6 +227,7 @@
}
/** Determine whether the application with the given UID is the enabled scorer. */
+ @Deprecated // Use NetworkScoreManager.isCallerActiveScorer()
public boolean isCallerActiveScorer(int callingUid) {
NetworkScorerAppData defaultApp = getActiveScorer();
if (defaultApp == null) {
diff --git a/core/java/android/net/ScoredNetwork.java b/core/java/android/net/ScoredNetwork.java
index 7e3dd77..c86c25a 100644
--- a/core/java/android/net/ScoredNetwork.java
+++ b/core/java/android/net/ScoredNetwork.java
@@ -214,12 +214,16 @@
@Override
public String toString() {
- return "ScoredNetwork{" +
+ StringBuilder out = new StringBuilder(
+ "ScoredNetwork{" +
"networkKey=" + networkKey +
", rssiCurve=" + rssiCurve +
- ", meteredHint=" + meteredHint +
- ", attributes=" + attributes +
- '}';
+ ", meteredHint=" + meteredHint);
+ if (attributes != null) {
+ out.append(", attributes=" + attributes);
+ }
+ out.append('}');
+ return out.toString();
}
/**
diff --git a/core/java/android/os/BatteryProperties.java b/core/java/android/os/BatteryProperties.java
index b509d76..af328d0 100644
--- a/core/java/android/os/BatteryProperties.java
+++ b/core/java/android/os/BatteryProperties.java
@@ -30,6 +30,7 @@
public int batteryLevel;
public int batteryVoltage;
public int batteryTemperature;
+ public int batteryFullCharge;
public int batteryChargeCounter;
public String batteryTechnology;
@@ -48,6 +49,7 @@
batteryLevel = other.batteryLevel;
batteryVoltage = other.batteryVoltage;
batteryTemperature = other.batteryTemperature;
+ batteryFullCharge = other.batteryFullCharge;
batteryChargeCounter = other.batteryChargeCounter;
batteryTechnology = other.batteryTechnology;
}
@@ -69,6 +71,7 @@
batteryLevel = p.readInt();
batteryVoltage = p.readInt();
batteryTemperature = p.readInt();
+ batteryFullCharge = p.readInt();
batteryChargeCounter = p.readInt();
batteryTechnology = p.readString();
}
@@ -85,6 +88,7 @@
p.writeInt(batteryLevel);
p.writeInt(batteryVoltage);
p.writeInt(batteryTemperature);
+ p.writeInt(batteryFullCharge);
p.writeInt(batteryChargeCounter);
p.writeString(batteryTechnology);
}
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index 8d73544..013972d 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -24,6 +24,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.function.Predicate;
import android.content.Context;
import android.content.pm.ApplicationInfo;
@@ -1342,9 +1343,11 @@
public static final int EVENT_WAKEUP_AP = 0x0013;
// Event for reporting that a specific partial wake lock has been held for a long duration.
public static final int EVENT_LONG_WAKE_LOCK = 0x0014;
+ // Event reporting the new estimated (learned) capacity of the battery in mAh.
+ public static final int EVENT_ESTIMATED_BATTERY_CAP = 0x0015;
// Number of event types.
- public static final int EVENT_COUNT = 0x0015;
+ public static final int EVENT_COUNT = 0x0016;
// Mask to extract out only the type part of the event.
public static final int EVENT_TYPE_MASK = ~(EVENT_FLAG_START|EVENT_FLAG_FINISH);
@@ -2040,13 +2043,28 @@
public static final String[] HISTORY_EVENT_NAMES = new String[] {
"null", "proc", "fg", "top", "sync", "wake_lock_in", "job", "user", "userfg", "conn",
"active", "pkginst", "pkgunin", "alarm", "stats", "inactive", "active", "tmpwhitelist",
- "screenwake", "wakeupap", "longwake"
+ "screenwake", "wakeupap", "longwake", "est_capacity"
};
public static final String[] HISTORY_EVENT_CHECKIN_NAMES = new String[] {
"Enl", "Epr", "Efg", "Etp", "Esy", "Ewl", "Ejb", "Eur", "Euf", "Ecn",
"Eac", "Epi", "Epu", "Eal", "Est", "Eai", "Eaa", "Etw",
- "Esw", "Ewa", "Elw"
+ "Esw", "Ewa", "Elw", "Eec"
+ };
+
+ @FunctionalInterface
+ public interface IntToString {
+ String applyAsString(int val);
+ }
+
+ private static final IntToString sUidToString = UserHandle::formatUid;
+ private static final IntToString sIntToString = Integer::toString;
+
+ public static final IntToString[] HISTORY_EVENT_INT_FORMATTERS = new IntToString[] {
+ sUidToString, sUidToString, sUidToString, sUidToString, sUidToString, sUidToString,
+ sUidToString, sUidToString, sUidToString, sUidToString, sUidToString, sUidToString,
+ sUidToString, sUidToString, sUidToString, sUidToString, sUidToString, sUidToString,
+ sUidToString, sUidToString, sUidToString, sIntToString
};
/**
@@ -4975,7 +4993,8 @@
if (checkin) {
pw.print(rec.eventTag.poolIdx);
} else {
- UserHandle.formatUid(pw, rec.eventTag.uid);
+ pw.append(HISTORY_EVENT_INT_FORMATTERS[idx]
+ .applyAsString(rec.eventTag.uid));
pw.print(":\"");
pw.print(rec.eventTag.string);
pw.print("\"");
diff --git a/core/java/android/os/HardwarePropertiesManager.java b/core/java/android/os/HardwarePropertiesManager.java
index 2b00ecb..67edefc 100644
--- a/core/java/android/os/HardwarePropertiesManager.java
+++ b/core/java/android/os/HardwarePropertiesManager.java
@@ -109,8 +109,8 @@
* {@link #UNDEFINED_TEMPERATURE} if undefined.
* Empty if platform doesn't provide the queried temperature.
*
- * @throws SecurityException if something other than the profile or device owner, or the
- * current VR service tries to retrieve information provided by this service.
+ * @throws SecurityException if something other than the device owner or the current VR service
+ * tries to retrieve information provided by this service.
*/
public @NonNull float[] getDeviceTemperatures(@DeviceTemperatureType int type,
@TemperatureSource int source) {
@@ -147,8 +147,8 @@
* each unplugged core.
* Empty if CPU usage is not supported on this system.
*
- * @throws SecurityException if something other than the profile or device owner, or the
- * current VR service tries to retrieve information provided by this service.
+ * @throws SecurityException if something other than the device owner or the current VR service
+ * tries to retrieve information provided by this service.
*/
public @NonNull CpuUsageInfo[] getCpuUsages() {
try {
@@ -164,8 +164,8 @@
* @return an array of float fan speeds in RPM. Empty if there are no fans or fan speed is not
* supported on this system.
*
- * @throws SecurityException if something other than the profile or device owner, or the
- * current VR service tries to retrieve information provided by this service.
+ * @throws SecurityException if something other than the device owner or the current VR service
+ * tries to retrieve information provided by this service.
*/
public @NonNull float[] getFanSpeeds() {
try {
diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl
index d443b66..9513854 100644
--- a/core/java/android/os/IUserManager.aidl
+++ b/core/java/android/os/IUserManager.aidl
@@ -40,6 +40,7 @@
in String[] disallowedPackages);
UserInfo createRestrictedProfile(String name, int parentUserHandle);
void setUserEnabled(int userHandle);
+ void evictCredentialEncryptionKey(int userHandle);
boolean removeUser(int userHandle);
void setUserName(int userHandle, String name);
void setUserIcon(int userHandle, in Bitmap icon);
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index 9d04929..dff0a28 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -49,23 +49,23 @@
* <i>These levels are mutually exclusive - you may only specify one of them.</i>
*
* <table>
- * <tr><th>Flag Value</th>
+ * <tr><th>Flag Value</th>
* <th>CPU</th> <th>Screen</th> <th>Keyboard</th></tr>
*
* <tr><td>{@link #PARTIAL_WAKE_LOCK}</td>
- * <td>On*</td> <td>Off</td> <td>Off</td>
+ * <td>On*</td> <td>Off</td> <td>Off</td>
* </tr>
- *
+ *
* <tr><td>{@link #SCREEN_DIM_WAKE_LOCK}</td>
- * <td>On</td> <td>Dim</td> <td>Off</td>
+ * <td>On</td> <td>Dim</td> <td>Off</td>
* </tr>
*
* <tr><td>{@link #SCREEN_BRIGHT_WAKE_LOCK}</td>
- * <td>On</td> <td>Bright</td> <td>Off</td>
+ * <td>On</td> <td>Bright</td> <td>Off</td>
* </tr>
- *
+ *
* <tr><td>{@link #FULL_WAKE_LOCK}</td>
- * <td>On</td> <td>Bright</td> <td>Bright</td>
+ * <td>On</td> <td>Bright</td> <td>Bright</td>
* </tr>
* </table>
* </p><p>
@@ -85,13 +85,13 @@
* the illumination to remain on once it turns on (e.g. from user activity). This flag
* will force the screen and/or keyboard to turn on immediately, when the WakeLock is
* acquired. A typical use would be for notifications which are important for the user to
- * see immediately.</td>
+ * see immediately.</td>
* </tr>
- *
+ *
* <tr><td>{@link #ON_AFTER_RELEASE}</td>
* <td>If this flag is set, the user activity timer will be reset when the WakeLock is
- * released, causing the illumination to remain on a bit longer. This can be used to
- * reduce flicker if you are cycling between wake lock conditions.</td>
+ * released, causing the illumination to remain on a bit longer. This can be used to
+ * reduce flicker if you are cycling between wake lock conditions.</td>
* </tr>
* </table>
* <p>
@@ -479,6 +479,35 @@
}
/**
+ * Gets the minimum supported screen brightness setting for VR Mode.
+ * @hide
+ */
+ public int getMinimumScreenBrightnessForVrSetting() {
+ return mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_screenBrightnessForVrSettingMinimum);
+ }
+
+ /**
+ * Gets the maximum supported screen brightness setting for VR Mode.
+ * The screen may be allowed to become dimmer than this value but
+ * this is the maximum value that can be set by the user.
+ * @hide
+ */
+ public int getMaximumScreenBrightnessForVrSetting() {
+ return mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_screenBrightnessForVrSettingMaximum);
+ }
+
+ /**
+ * Gets the default screen brightness for VR setting.
+ * @hide
+ */
+ public int getDefaultScreenBrightnessForVrSetting() {
+ return mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_screenBrightnessForVrSettingDefault);
+ }
+
+ /**
* Returns true if the twilight service should be used to adjust screen brightness
* policy. This setting is experimental and disabled by default.
* @hide
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index 802b180..3478eaa 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -1641,6 +1641,19 @@
}
/**
+ * Evicts the user's credential encryption key from memory by stopping and restarting the user.
+ *
+ * @hide
+ */
+ public void evictCredentialEncryptionKey(@UserIdInt int userHandle) {
+ try {
+ mService.evictCredentialEncryptionKey(userHandle);
+ } catch (RemoteException re) {
+ throw re.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Return the number of users currently created on the device.
*/
public int getUserCount() {
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index 3fc7dba..03fd8d3 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -52,6 +52,7 @@
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.ref.WeakReference;
@@ -974,10 +975,17 @@
try (final FileInputStream fis = new FileInputStream(path);
final BufferedReader reader = new BufferedReader(new InputStreamReader(fis));) {
return Long.parseLong(reader.readLine());
- } catch (Exception e) {
- Slog.w(TAG, "readLong(): could not read " + path + ": " + e);
+ } catch (FileNotFoundException e) {
+ // This is expected since we are trying to parse multiple paths.
+ Slog.i(TAG, "readLong(): Path doesn't exist: " + path + ": " + e);
return 0;
- }
+ } catch (NumberFormatException e) {
+ Slog.e(TAG, "readLong(): Could not parse " + path + ": " + e);
+ return 0;
+ } catch (Exception e) {
+ Slog.e(TAG, "readLong(): Unknown exception while opening " + path + ": " + e);
+ return 0;
+ }
}
/** @removed */
diff --git a/core/java/android/provider/AlarmClock.java b/core/java/android/provider/AlarmClock.java
index 63ae9a9..23134cd 100644
--- a/core/java/android/provider/AlarmClock.java
+++ b/core/java/android/provider/AlarmClock.java
@@ -153,6 +153,15 @@
public static final String ACTION_SET_TIMER = "android.intent.action.SET_TIMER";
/**
+ * Activity Action: Show the timers.
+ * <p>
+ * This action opens the timers page.
+ * </p>
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_SHOW_TIMERS = "android.intent.action.SHOW_TIMERS";
+
+ /**
* Activity Action: Show the alarms.
* <p>
* This action opens the alarms page.
diff --git a/core/java/android/provider/DocumentsProvider.java b/core/java/android/provider/DocumentsProvider.java
index 584f5fe..8bc03ee 100644
--- a/core/java/android/provider/DocumentsProvider.java
+++ b/core/java/android/provider/DocumentsProvider.java
@@ -52,6 +52,7 @@
import android.net.Uri;
import android.os.Bundle;
import android.os.CancellationSignal;
+import android.os.OperationCanceledException;
import android.os.ParcelFileDescriptor;
import android.os.ParcelFileDescriptor.OnCloseListener;
import android.provider.DocumentsContract.Document;
@@ -416,6 +417,9 @@
* must only return immediate descendants, as additional queries will be
* issued to recursively explore the tree.
* <p>
+ * Apps targeting {@link android.os.Build.VERSION_CODES#O} or higher
+ * should override {@link #queryChildDocuments(String, String[], Bundle)}.
+ * <p>
* If your provider is cloud-based, and you have some data cached or pinned
* locally, you may return the local data immediately, setting
* {@link DocumentsContract#EXTRA_LOADING} on the Cursor to indicate that
@@ -450,10 +454,53 @@
String parentDocumentId, String[] projection, String sortOrder)
throws FileNotFoundException;
+ /**
+ * Override this method to return the children documents contained
+ * in the requested directory. This must return immediate descendants only.
+ *
+ * <p>If your provider is cloud-based, and you have data cached
+ * locally, you may return the local data immediately, setting
+ * {@link DocumentsContract#EXTRA_LOADING} on Cursor extras to indicate that
+ * you are still fetching additional data. Then, when the network data is
+ * available, you can send a change notification to trigger a requery and
+ * return the complete contents. To return a Cursor with extras, you need to
+ * extend and override {@link Cursor#getExtras()}.
+ *
+ * <p>To support change notifications, you must
+ * {@link Cursor#setNotificationUri(ContentResolver, Uri)} with a relevant
+ * Uri, such as
+ * {@link DocumentsContract#buildChildDocumentsUri(String, String)}. Then
+ * you can call {@link ContentResolver#notifyChange(Uri,
+ * android.database.ContentObserver, boolean)} with that Uri to send change
+ * notifications.
+ *
+ * @param parentDocumentId the directory to return children for.
+ * @param projection list of {@link Document} columns to put into the
+ * cursor. If {@code null} all supported columns should be
+ * included.
+ * @param queryArgs Bundle containing sorting information or other
+ * argument useful to the provider. If no sorting
+ * information is available, default sorting
+ * will be used, which may be unordered. See
+ * {@link ContentResolver#QUERY_ARG_SORT_COLUMNS} for
+ * details.
+ *
+ * @see DocumentsContract#EXTRA_LOADING
+ * @see DocumentsContract#EXTRA_INFO
+ * @see DocumentsContract#EXTRA_ERROR
+ */
+ public Cursor queryChildDocuments(
+ String parentDocumentId, @Nullable String[] projection, @Nullable Bundle queryArgs)
+ throws FileNotFoundException {
+
+ return queryChildDocuments(
+ parentDocumentId, projection, getSortClause(queryArgs));
+ }
+
/** {@hide} */
@SuppressWarnings("unused")
public Cursor queryChildDocumentsForManage(
- String parentDocumentId, String[] projection, String sortOrder)
+ String parentDocumentId, @Nullable String[] projection, @Nullable String sortOrder)
throws FileNotFoundException {
throw new UnsupportedOperationException("Manage not supported");
}
@@ -594,6 +641,22 @@
throw new FileNotFoundException("The requested MIME type is not supported.");
}
+ @Override
+ public final Cursor query(Uri uri, String[] projection, String selection,
+ String[] selectionArgs, String sortOrder) {
+ // As of Android-O, ContentProvider#query (w/ bundle arg) is the primary
+ // transport method. We override that, and don't ever delegate to this method.
+ throw new UnsupportedOperationException("Pre-Android-O query format not supported.");
+ }
+
+ @Override
+ public final Cursor query(Uri uri, String[] projection, String selection,
+ String[] selectionArgs, String sortOrder, CancellationSignal cancellationSignal) {
+ // As of Android-O, ContentProvider#query (w/ bundle arg) is the primary
+ // transport method. We override that, and don't ever delegate to this metohd.
+ throw new UnsupportedOperationException("Pre-Android-O query format not supported.");
+ }
+
/**
* Implementation is provided by the parent class. Cannot be overriden.
*
@@ -604,8 +667,8 @@
* @see #querySearchDocuments(String, String, String[])
*/
@Override
- public final Cursor query(Uri uri, String[] projection, String selection,
- String[] selectionArgs, String sortOrder) {
+ public final Cursor query(
+ Uri uri, String[] projection, Bundle queryArgs, CancellationSignal cancellationSignal) {
try {
switch (mMatcher.match(uri)) {
case MATCH_ROOTS:
@@ -623,10 +686,13 @@
case MATCH_CHILDREN_TREE:
enforceTree(uri);
if (DocumentsContract.isManageMode(uri)) {
+ // TODO: Update "ForManage" variant to support query args.
return queryChildDocumentsForManage(
- getDocumentId(uri), projection, sortOrder);
+ getDocumentId(uri),
+ projection,
+ getSortClause(queryArgs));
} else {
- return queryChildDocuments(getDocumentId(uri), projection, sortOrder);
+ return queryChildDocuments(getDocumentId(uri), projection, queryArgs);
}
default:
throw new UnsupportedOperationException("Unsupported Uri " + uri);
@@ -637,6 +703,17 @@
}
}
+ private static @Nullable String getSortClause(@Nullable Bundle queryArgs) {
+ queryArgs = queryArgs != null ? queryArgs : Bundle.EMPTY;
+ String sortClause = queryArgs.getString(ContentResolver.QUERY_ARG_SQL_SORT_ORDER);
+
+ if (sortClause == null && queryArgs.containsKey(ContentResolver.QUERY_ARG_SORT_COLUMNS)) {
+ sortClause = ContentResolver.createSqlSortClause(queryArgs);
+ }
+
+ return sortClause;
+ }
+
/**
* Implementation is provided by the parent class. Cannot be overriden.
*
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 43590c7..2d4a9e9 100755
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -2889,6 +2889,15 @@
new InclusiveIntegerRangeValidator(0, 255);
/**
+ * The screen backlight brightness between 0 and 255.
+ * @hide
+ */
+ public static final String SCREEN_BRIGHTNESS_FOR_VR = "screen_brightness_for_vr";
+
+ private static final Validator SCREEN_BRIGHTNESS_FOR_VR_VALIDATOR =
+ new InclusiveIntegerRangeValidator(0, 255);
+
+ /**
* Control whether to enable automatic brightness mode.
*/
public static final String SCREEN_BRIGHTNESS_MODE = "screen_brightness_mode";
@@ -3882,6 +3891,7 @@
VALIDATORS.put(DIM_SCREEN, DIM_SCREEN_VALIDATOR);
VALIDATORS.put(SCREEN_OFF_TIMEOUT, SCREEN_OFF_TIMEOUT_VALIDATOR);
VALIDATORS.put(SCREEN_BRIGHTNESS, SCREEN_BRIGHTNESS_VALIDATOR);
+ VALIDATORS.put(SCREEN_BRIGHTNESS_FOR_VR, SCREEN_BRIGHTNESS_FOR_VR_VALIDATOR);
VALIDATORS.put(SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_VALIDATOR);
VALIDATORS.put(MODE_RINGER_STREAMS_AFFECTED, MODE_RINGER_STREAMS_AFFECTED_VALIDATOR);
VALIDATORS.put(MUTE_STREAMS_AFFECTED, MUTE_STREAMS_AFFECTED_VALIDATOR);
@@ -6394,13 +6404,6 @@
public static final String ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES =
"enabled_notification_policy_access_packages";
- /** @hide */
- public static final String BAR_SERVICE_COMPONENT = "bar_service_component";
-
- /** @hide */
- public static final String VOLUME_CONTROLLER_SERVICE_COMPONENT
- = "volume_controller_service_component";
-
/**
* Defines whether managed profile ringtones should be synced from it's parent profile
* <p>
@@ -6809,7 +6812,8 @@
QS_TILES,
DOZE_ENABLED,
DOZE_PULSE_ON_PICK_UP,
- DOZE_PULSE_ON_DOUBLE_TAP
+ DOZE_PULSE_ON_DOUBLE_TAP,
+ NFC_PAYMENT_DEFAULT_COMPONENT
};
/**
diff --git a/core/java/android/service/autofill/AutoFillService.java b/core/java/android/service/autofill/AutoFillService.java
index a7941c7..c2e980c 100644
--- a/core/java/android/service/autofill/AutoFillService.java
+++ b/core/java/android/service/autofill/AutoFillService.java
@@ -17,8 +17,8 @@
import static android.service.voice.VoiceInteractionSession.KEY_FLAGS;
import static android.service.voice.VoiceInteractionSession.KEY_STRUCTURE;
-import static android.view.View.ASSIST_FLAG_SANITIZED_TEXT;
-import static android.view.View.ASSIST_FLAG_NON_SANITIZED_TEXT;
+import static android.view.View.AUTO_FILL_FLAG_TYPE_FILL;
+import static android.view.View.AUTO_FILL_FLAG_TYPE_SAVE;
import android.annotation.SdkConstant;
import android.app.Activity;
@@ -32,12 +32,15 @@
import android.os.Message;
import android.os.RemoteException;
import android.util.Log;
+import android.view.autofill.AutoFillId;
+import android.view.autofill.FillResponse;
import com.android.internal.os.HandlerCaller;
import com.android.internal.os.IResultReceiver;
import com.android.internal.os.SomeArgs;
-// TODO(b/33197203): improve javadoc (class and methods)
+// TODO(b/33197203): improve javadoc (of both class and methods); in particular, make sure the
+// life-cycle (and how state could be maintained on server-side) is well documented.
/**
* Top-level service of the current auto-fill service for a given user.
@@ -58,40 +61,50 @@
@SdkConstant(SdkConstant.SdkConstantType.SERVICE_ACTION)
public static final String SERVICE_INTERFACE = "android.service.autofill.AutoFillService";
- // Bundle keys.
- /** @hide */
- public static final String KEY_CALLBACK = "callback";
+ // Internal bundle keys.
+ /** @hide */ public static final String KEY_CALLBACK = "callback";
+ /** @hide */ public static final String KEY_SAVABLE_IDS = "savable_ids";
+
+ // Prefix for public bundle keys.
+ private static final String KEY_PREFIX = "android.service.autofill.extra.";
+
+ /**
+ * Key of the {@link Bundle} passed to methods such as
+ * {@link #onSaveRequest(AssistStructure, Bundle, CancellationSignal, SaveCallback)}
+ * containing the extras set by
+ * {@link android.view.autofill.FillResponse.Builder#setExtras(Bundle)}.
+ */
+ public static final String EXTRA_RESPONSE_EXTRAS = KEY_PREFIX + "RESPONSE_EXTRAS";
+
+ /**
+ * Key of the {@link Bundle} passed to methods such as
+ * {@link #onSaveRequest(AssistStructure, Bundle, CancellationSignal, SaveCallback)}
+ * containing the extras set by
+ * {@link android.view.autofill.Dataset.Builder#setExtras(Bundle)}.
+ */
+ public static final String EXTRA_DATASET_EXTRAS = KEY_PREFIX + "DATASET_EXTRAS";
// Handler messages.
private static final int MSG_CONNECT = 1;
private static final int MSG_AUTO_FILL_ACTIVITY = 2;
private static final int MSG_DISCONNECT = 3;
- private final IResultReceiver mAssistReceiver = new IResultReceiver.Stub() {
- @Override
- public void send(int resultCode, Bundle resultData) throws RemoteException {
- final AssistStructure structure = resultData.getParcelable(KEY_STRUCTURE);
- final IBinder binder = resultData.getBinder(KEY_CALLBACK);
- final int flags = resultData.getInt(KEY_FLAGS, 0);
+ private final IAutoFillService mInterface = new IAutoFillService.Stub() {
+ @Override
+ public void autoFill(AssistStructure structure, IAutoFillServerCallback callback,
+ Bundle extras, int flags) {
mHandlerCaller
- .obtainMessageIOO(MSG_AUTO_FILL_ACTIVITY, flags, structure, binder).sendToTarget();
+ .obtainMessageIOOO(MSG_AUTO_FILL_ACTIVITY, flags, structure, extras, callback)
+ .sendToTarget();
}
- };
-
- private final IAutoFillService mInterface = new IAutoFillService.Stub() {
@Override
public void onConnected() {
mHandlerCaller.sendMessage(mHandlerCaller.obtainMessage(MSG_CONNECT));
}
@Override
- public IResultReceiver getAssistReceiver() {
- return mAssistReceiver;
- }
-
- @Override
public void onDisconnected() {
mHandlerCaller.sendMessage(mHandlerCaller.obtainMessage(MSG_DISCONNECT));
}
@@ -107,10 +120,11 @@
break;
} case MSG_AUTO_FILL_ACTIVITY: {
final SomeArgs args = (SomeArgs) msg.obj;
- final AssistStructure structure = (AssistStructure) args.arg1;
- final IBinder binder = (IBinder) args.arg2;
final int flags = msg.arg1;
- requestAutoFill(structure, flags, binder);
+ final AssistStructure structure = (AssistStructure) args.arg1;
+ final Bundle extras = (Bundle) args.arg2;
+ final IAutoFillServerCallback callback = (IAutoFillServerCallback) args.arg3;
+ requestAutoFill(callback, structure, extras, flags);
break;
} case MSG_DISCONNECT: {
onDisconnected();
@@ -146,7 +160,7 @@
}
/**
- * Called when the Android System connects to service.
+ * Called when the Android system connects to service.
*
* <p>You should generally do initialization here rather than in {@link #onCreate}.
*/
@@ -155,12 +169,19 @@
}
/**
- * Called when user requests service to auto-fill an {@link Activity}.
+ * Called by the Android system do decide if an {@link Activity} can be auto-filled by the
+ * service.
*
- * @param structure {@link Activity}'s view structure .
- * @param data bundle with optional parameters (currently none) which is passed along on
- * subsequent calls (so it can be used by the service to share data).
+ * <p>Service must call one of the {@link FillCallback} methods (like
+ * {@link FillCallback#onSuccess(FillResponse)} or {@link FillCallback#onFailure(CharSequence)})
+ * to notify the result of the request.
+ *
+ * @param structure {@link Activity}'s view structure.
+ * @param data bundle containing additional arguments set by the Android system (currently none)
+ * or data passed by the service on previous calls to fullfill other sections of this activity
+ * (see {@link FillResponse} Javadoc for examples of multiple-sections requests).
* @param cancellationSignal signal for observing cancel requests.
+ * @param callback object used to notify the result of the request.
*/
public abstract void onFillRequest(AssistStructure structure,
Bundle data, CancellationSignal cancellationSignal, FillCallback callback);
@@ -168,29 +189,31 @@
/**
* Called when user requests service to save the fields of an {@link Activity}.
*
+ * <p>Service must call one of the {@link SaveCallback} methods (like
+ * {@link SaveCallback#onSuccess(AutoFillId[])} or {@link SaveCallback#onFailure(CharSequence)})
+ * to notify the result of the request.
+ *
* @param structure {@link Activity}'s view structure.
- * @param data same bundle passed to
- * {@link #onFillRequest(AssistStructure, Bundle, CancellationSignal, FillCallback)};
- * might also contain with optional parameters (currently none).
+ * @param data bundle containing additional arguments set by the Android system (currently none)
+ * or data passed by the service in the {@link FillResponse} that originated this call.
* @param cancellationSignal signal for observing cancel requests.
* @param callback object used to notify the result of the request.
*/
public abstract void onSaveRequest(AssistStructure structure,
Bundle data, CancellationSignal cancellationSignal, SaveCallback callback);
- private void requestAutoFill(AssistStructure structure, int flags, IBinder binder) {
- // TODO(b/33197203): pass the Bundle received from mAssistReceiver instead?
- final Bundle data = new Bundle();
+ private void requestAutoFill(IAutoFillServerCallback callback, AssistStructure structure,
+ Bundle data, int flags) {
switch (flags) {
- case ASSIST_FLAG_SANITIZED_TEXT:
- final FillCallback fillCallback = new FillCallback(binder);
+ case AUTO_FILL_FLAG_TYPE_FILL:
+ final FillCallback fillCallback = new FillCallback(callback);
// TODO(b/33197203): hook up the cancelationSignal
onFillRequest(structure, data, new CancellationSignal(), fillCallback);
break;
- case ASSIST_FLAG_NON_SANITIZED_TEXT:
- final SaveCallback saveCallback = new SaveCallback(binder);
+ case AUTO_FILL_FLAG_TYPE_SAVE:
+ final SaveCallback saveCallback = new SaveCallback(callback);
// TODO(b/33197203): hook up the cancelationSignal
- onSaveRequest(structure, null, new CancellationSignal(), saveCallback);
+ onSaveRequest(structure, data, new CancellationSignal(), saveCallback);
break;
default:
Log.w(TAG, "invalid flag on requestAutoFill(): " + flags);
@@ -198,7 +221,7 @@
}
/**
- * Called when the Android System disconnects from the service.
+ * Called when the Android system disconnects from the service.
*
* <p> At this point this service may no longer be an active {@link AutoFillService}.
*/
diff --git a/core/java/android/service/autofill/FillCallback.java b/core/java/android/service/autofill/FillCallback.java
index 3284b90..5a9a9f6 100644
--- a/core/java/android/service/autofill/FillCallback.java
+++ b/core/java/android/service/autofill/FillCallback.java
@@ -18,19 +18,16 @@
import static android.service.autofill.AutoFillService.DEBUG;
+import android.annotation.Nullable;
import android.app.Activity;
-import android.app.assist.AssistStructure.ViewNode;
+import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
-import android.util.SparseArray;
+import android.view.autofill.FillResponse;
import com.android.internal.util.Preconditions;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
/**
* Handles auto-fill requests from the {@link AutoFillService} into the {@link Activity} being
* auto-filled.
@@ -39,40 +36,50 @@
private static final String TAG = "FillCallback";
- private final IAutoFillCallback mCallback;
+ private final IAutoFillServerCallback mCallback;
+
+ private boolean mReplied = false;
/** @hide */
- FillCallback(IBinder binder) {
- mCallback = IAutoFillCallback.Stub.asInterface(binder);
+ FillCallback(IAutoFillServerCallback callback) {
+ mCallback = callback;
}
/**
- * Auto-fills the {@link Activity}.
+ * Notifies the Android System that an
+ * {@link AutoFillService#onFillRequest(android.app.assist.AssistStructure, Bundle, android.os.CancellationSignal, FillCallback)}
+ * was successfully fulfilled by the service.
*
- * @throws RuntimeException if an error occurred while auto-filling it.
+ * @param response auto-fill information for that activity, or {@code null} when the activity
+ * cannot be auto-filled (for example, if it only contains read-only fields).
+ *
+ * @throws RuntimeException if an error occurred while calling the Android System.
*/
- public void onSuccess(FillData data) {
- if (DEBUG) Log.d(TAG, "onSuccess(): data=" + data);
+ public void onSuccess(@Nullable FillResponse response) {
+ if (DEBUG) Log.d(TAG, "onSuccess(): respose=" + response);
- Preconditions.checkArgument(data != null, "data cannot be null");
+ checkNotRepliedYet();
try {
- mCallback.autofill(data.asList());
+ mCallback.showResponse(response);
} catch (RemoteException e) {
e.rethrowAsRuntimeException();
}
}
/**
- * Notifies the {@link Activity} that the auto-fill request failed.
+ * Notifies the Android System that an
+ * {@link AutoFillService#onFillRequest(android.app.assist.AssistStructure, Bundle, android.os.CancellationSignal, FillCallback)}
+ * could not be fulfilled by the service.
*
- * @param message error message to be displayed.
+ * @param message error message to be displayed to the user.
*
- * @throws RuntimeException if an error occurred while notifying the activity.
+ * @throws RuntimeException if an error occurred while calling the Android System.
*/
public void onFailure(CharSequence message) {
if (DEBUG) Log.d(TAG, "onFailure(): message=" + message);
+ checkNotRepliedYet();
Preconditions.checkArgument(message != null, "message cannot be null");
try {
@@ -82,70 +89,9 @@
}
}
- /**
- * Data used to fill the fields of an {@link Activity}.
- *
- * <p>This class is immutable.
- */
- public static final class FillData {
-
- private final List<FillableInputField> mList;
-
- private FillData(Builder builder) {
- final int size = builder.mFields.size();
- final List<FillableInputField> list = new ArrayList<>(size);
- for (int i = 0; i < size; i++) {
- list.add(builder.mFields.valueAt(i));
- }
- mList = Collections.unmodifiableList(list);
- // TODO: use FastImmutableArraySet or a similar structure instead?
- }
-
- /**
- * Gets the response as a {@code List} so it can be used in a binder call.
- */
- List<FillableInputField> asList() {
- return mList;
- }
-
- @Override
- public String toString() {
- return "[AutoFillResponse: " + mList + "]";
- }
-
- /**
- * Builder for {@link FillData} objects.
- *
- * <p>Typical usage:
- *
- * <pre class="prettyprint">
- * FillCallback.FillData data = new FillCallback.FillData.Builder()
- * .setTextField(id1, "value 1")
- * .setTextField(id2, "value 2")
- * .build()
- * </pre>
- */
- public static class Builder {
- private final SparseArray<FillableInputField> mFields = new SparseArray<>();
-
- /**
- * Auto-fills a text field.
- *
- * @param id view id as returned by {@link ViewNode#getAutoFillId()}.
- * @param text text to be auto-filled.
- * @return same builder so it can be chained.
- */
- public Builder setTextField(int id, String text) {
- mFields.put(id, FillableInputField.forText(id, text));
- return this;
- }
-
- /**
- * Builds a new {@link FillData} instance.
- */
- public FillData build() {
- return new FillData(this);
- }
- }
+ // There can be only one!!
+ private void checkNotRepliedYet() {
+ Preconditions.checkState(!mReplied, "already replied");
+ mReplied = true;
}
}
diff --git a/core/java/android/service/autofill/FillableInputField.java b/core/java/android/service/autofill/FillableInputField.java
deleted file mode 100644
index 62950b4..0000000
--- a/core/java/android/service/autofill/FillableInputField.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.service.autofill;
-
-import android.app.assist.AssistStructure.ViewNode;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-/**
- * Represents a view field that can be auto-filled.
- *
- * <p>Currently only text-fields are supported, so the value of the field can be obtained through
- * {@link #getValue()}.
- *
- * @hide
- */
-public final class FillableInputField implements Parcelable {
-
- private final int mId;
- private final String mValue;
-
- private FillableInputField(int id, String value) {
- mId = id;
- mValue = value;
- }
-
- private FillableInputField(Parcel parcel) {
- mId = parcel.readInt();
- mValue = parcel.readString();
- }
-
- /**
- * Gets the view id as returned by {@link ViewNode#getAutoFillId()}.
- */
- public int getId() {
- return mId;
- }
-
- /**
- * Gets the value of this field.
- */
- public String getValue() {
- return mValue;
-
- }
-
- @Override
- public String toString() {
- return "[AutoFillField: " + mId + "=" + mValue + "]";
- }
-
- /**
- * Creates an {@code AutoFillField} for a text field.
- *
- * @param id view id as returned by {@link ViewNode#getAutoFillId()}.
- * @param text value to be auto-filled.
- */
- public static FillableInputField forText(int id, String text) {
- return new FillableInputField(id, text);
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel parcel, int flags) {
- parcel.writeInt(mId);
- parcel.writeString(mValue);
- }
-
- public static final Parcelable.Creator<FillableInputField> CREATOR =
- new Parcelable.Creator<FillableInputField>() {
- @Override
- public FillableInputField createFromParcel(Parcel source) {
- return new FillableInputField(source);
- }
-
- @Override
- public FillableInputField[] newArray(int size) {
- return new FillableInputField[size];
- }
- };
-}
diff --git a/core/java/android/service/autofill/IAutoFillCallback.aidl b/core/java/android/service/autofill/IAutoFillAppCallback.aidl
similarity index 85%
rename from core/java/android/service/autofill/IAutoFillCallback.aidl
rename to core/java/android/service/autofill/IAutoFillAppCallback.aidl
index d6d4f39..629b1f0 100644
--- a/core/java/android/service/autofill/IAutoFillCallback.aidl
+++ b/core/java/android/service/autofill/IAutoFillAppCallback.aidl
@@ -18,10 +18,11 @@
import java.util.List;
+import android.view.autofill.Dataset;
+
/**
* @hide
*/
-oneway interface IAutoFillCallback {
- void autofill(in List values);
- void showError(String message);
+oneway interface IAutoFillAppCallback {
+ void autoFill(in Dataset dataset);
}
diff --git a/core/java/android/service/autofill/IAutoFillManagerService.aidl b/core/java/android/service/autofill/IAutoFillManagerService.aidl
index f1251c0..f8ae57b 100644
--- a/core/java/android/service/autofill/IAutoFillManagerService.aidl
+++ b/core/java/android/service/autofill/IAutoFillManagerService.aidl
@@ -24,6 +24,5 @@
* {@hide}
*/
oneway interface IAutoFillManagerService {
-
- void requestAutoFill(IBinder activityToken, int userId, int flags);
+ void requestAutoFill(IBinder activityToken, int userId, in Bundle extras, int flags);
}
diff --git a/core/java/android/service/autofill/IAutoFillCallback.aidl b/core/java/android/service/autofill/IAutoFillServerCallback.aidl
similarity index 76%
copy from core/java/android/service/autofill/IAutoFillCallback.aidl
copy to core/java/android/service/autofill/IAutoFillServerCallback.aidl
index d6d4f39..9d58c99 100644
--- a/core/java/android/service/autofill/IAutoFillCallback.aidl
+++ b/core/java/android/service/autofill/IAutoFillServerCallback.aidl
@@ -18,10 +18,14 @@
import java.util.List;
+import android.view.autofill.AutoFillId;
+import android.view.autofill.FillResponse;
+
/**
* @hide
*/
-oneway interface IAutoFillCallback {
- void autofill(in List values);
+oneway interface IAutoFillServerCallback {
+ void showResponse(in FillResponse response);
void showError(String message);
+ void highlightSavedFields(in AutoFillId[] ids);
}
diff --git a/core/java/android/service/autofill/IAutoFillService.aidl b/core/java/android/service/autofill/IAutoFillService.aidl
index bb122e5..a1f22bf 100644
--- a/core/java/android/service/autofill/IAutoFillService.aidl
+++ b/core/java/android/service/autofill/IAutoFillService.aidl
@@ -18,14 +18,15 @@
import android.app.assist.AssistStructure;
import android.os.Bundle;
-import android.service.autofill.IAutoFillCallback;
+import android.service.autofill.IAutoFillServerCallback;
import com.android.internal.os.IResultReceiver;
/**
* @hide
*/
-interface IAutoFillService {
- oneway void onConnected();
- oneway void onDisconnected();
- IResultReceiver getAssistReceiver();
+oneway interface IAutoFillService {
+ void autoFill(in AssistStructure structure, in IAutoFillServerCallback callback,
+ in Bundle extras, int flags);
+ void onConnected();
+ void onDisconnected();
}
diff --git a/core/java/android/service/autofill/SaveCallback.java b/core/java/android/service/autofill/SaveCallback.java
index 4dc7392..627d74c 100644
--- a/core/java/android/service/autofill/SaveCallback.java
+++ b/core/java/android/service/autofill/SaveCallback.java
@@ -20,9 +20,11 @@
import android.app.Activity;
import android.app.assist.AssistStructure.ViewNode;
+import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
+import android.view.autofill.AutoFillId;
import com.android.internal.util.Preconditions;
@@ -34,41 +36,53 @@
private static final String TAG = "SaveCallback";
- private final IAutoFillCallback mCallback;
+ private final IAutoFillServerCallback mCallback;
+
+ private boolean mReplied = false;
/** @hide */
- SaveCallback(IBinder binder) {
- mCallback = IAutoFillCallback.Stub.asInterface(binder);
+ SaveCallback(IAutoFillServerCallback callback) {
+ mCallback = callback;
}
/**
- * Notifies the {@link Activity} that the save request succeeded.
+ * Notifies the Android System that an
+ * {@link AutoFillService#onSaveRequest(android.app.assist.AssistStructure, Bundle, android.os.CancellationSignal, SaveCallback)}
+ * was successfully fulfilled by the service.
*
* @param ids ids ({@link ViewNode#getAutoFillId()}) of the fields that were saved.
*
- * @throws RuntimeException if an error occurred while saving the data.
+ * @throws RuntimeException if an error occurred while calling the Android System.
*/
- public void onSuccess(int[] ids) {
+ public void onSuccess(AutoFillId[] ids) {
+ if (DEBUG) Log.d(TAG, "onSuccess(): ids=" + ((ids == null) ? "null" : ids.length));
+
Preconditions.checkArgument(ids != null, "ids cannot be null");
+ checkNotRepliedYet();
Preconditions.checkArgument(ids.length > 0, "ids cannot be empty");
- if (DEBUG) Log.d(TAG, "onSuccess(): ids=" + ids.length);
-
- // TODO(b/33197203): display which ids were saved
+ try {
+ mCallback.highlightSavedFields(ids);
+ } catch (RemoteException e) {
+ e.rethrowAsRuntimeException();
+ }
}
/**
- * Notifies the {@link Activity} that the save request failed.
+ * Notifies the Android System that an
+ * {@link AutoFillService#onSaveRequest(android.app.assist.AssistStructure, Bundle, android.os.CancellationSignal, SaveCallback)}
+ * could not be fulfilled by the service.
*
- * @param message error message to be displayed.
+ * @param message error message to be displayed to the user.
*
- * @throws RuntimeException if an error occurred while notifying the activity.
+ * @throws RuntimeException if an error occurred while calling the Android System.
*/
public void onFailure(CharSequence message) {
if (DEBUG) Log.d(TAG, "onFailure(): message=" + message);
Preconditions.checkArgument(message != null, "message cannot be null");
+ checkNotRepliedYet();
try {
mCallback.showError(message.toString());
@@ -76,4 +90,10 @@
e.rethrowAsRuntimeException();
}
}
+
+ // There can be only one!!
+ private void checkNotRepliedYet() {
+ Preconditions.checkState(!mReplied, "already replied");
+ mReplied = true;
+ }
}
diff --git a/core/java/android/service/notification/Adjustment.java b/core/java/android/service/notification/Adjustment.java
index 7af93c2..9728fda 100644
--- a/core/java/android/service/notification/Adjustment.java
+++ b/core/java/android/service/notification/Adjustment.java
@@ -41,7 +41,10 @@
*/
public static final String KEY_PEOPLE = "key_people";
/**
- * Parcelable {@code ArrayList} of {@link SnoozeCriterion}.
+ * Parcelable {@code ArrayList} of {@link SnoozeCriterion}. These criteria may be visible to
+ * users. If a user chooses to snooze a notification until one of these criterion, the
+ * assistant will be notified via
+ * {@link NotificationAssistantService#onNotificationSnoozedUntilContext}.
*/
public static final String KEY_SNOOZE_CRITERIA = "key_snooze_criteria";
diff --git a/core/java/android/service/notification/INotificationListener.aidl b/core/java/android/service/notification/INotificationListener.aidl
index f639c0d..01d3391 100644
--- a/core/java/android/service/notification/INotificationListener.aidl
+++ b/core/java/android/service/notification/INotificationListener.aidl
@@ -35,7 +35,5 @@
// rankers only
void onNotificationEnqueued(in IStatusBarNotificationHolder notificationHolder, int importance, boolean user);
- void onNotificationVisibilityChanged(String key, long time, boolean visible);
- void onNotificationClick(String key, long time);
- void onNotificationActionClick(String key, long time, int actionIndex);
+ void onNotificationSnoozedUntilContext(in IStatusBarNotificationHolder notificationHolder, String snoozeCriterionId);
}
diff --git a/core/java/android/service/notification/NotificationAssistantService.java b/core/java/android/service/notification/NotificationAssistantService.java
index cab390f..d7a02a8 100644
--- a/core/java/android/service/notification/NotificationAssistantService.java
+++ b/core/java/android/service/notification/NotificationAssistantService.java
@@ -63,6 +63,17 @@
}
/**
+ * A notification was snoozed until a context. For use with
+ * {@link Adjustment#KEY_SNOOZE_CRITERIA}. When the device reaches the given context, the
+ * assistant should restore the notification with {@link #unsnoozeNotification(String)}.
+ *
+ * @param sbn the notification to snooze
+ * @param snoozeCriterionId the {@link SnoozeCriterion#getId()} representing a device context.
+ */
+ abstract public void onNotificationSnoozedUntilContext(StatusBarNotification sbn,
+ String snoozeCriterionId);
+
+ /**
* A notification was posted by an app. Called before alert.
*
* @param sbn the new notification
@@ -190,10 +201,30 @@
mHandler.obtainMessage(MyHandler.MSG_ON_NOTIFICATION_ENQUEUED,
args).sendToTarget();
}
+
+ @Override
+ public void onNotificationSnoozedUntilContext(
+ IStatusBarNotificationHolder sbnHolder, String snoozeCriterionId)
+ throws RemoteException {
+ StatusBarNotification sbn;
+ try {
+ sbn = sbnHolder.get();
+ } catch (RemoteException e) {
+ Log.w(TAG, "onNotificationSnoozed: Error receiving StatusBarNotification", e);
+ return;
+ }
+
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = sbn;
+ args.arg2 = snoozeCriterionId;
+ mHandler.obtainMessage(MyHandler.MSG_ON_NOTIFICATION_SNOOZED,
+ args).sendToTarget();
+ }
}
private final class MyHandler extends Handler {
public static final int MSG_ON_NOTIFICATION_ENQUEUED = 1;
+ public static final int MSG_ON_NOTIFICATION_SNOOZED = 2;
public MyHandler(Looper looper) {
super(looper, null, false);
@@ -219,7 +250,16 @@
throw ex.rethrowFromSystemServer();
}
}
- } break;
+ break;
+ }
+ case MSG_ON_NOTIFICATION_SNOOZED: {
+ SomeArgs args = (SomeArgs) msg.obj;
+ StatusBarNotification sbn = (StatusBarNotification) args.arg1;
+ String snoozeCriterionId = (String) args.arg2;
+ args.recycle();
+ onNotificationSnoozedUntilContext(sbn, snoozeCriterionId);
+ break;
+ }
}
}
}
diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java
index 1bc605f..694837e 100644
--- a/core/java/android/service/notification/NotificationListenerService.java
+++ b/core/java/android/service/notification/NotificationListenerService.java
@@ -519,7 +519,31 @@
* Inform the notification manager about snoozing a specific notification.
* <p>
* Use this if your listener has a user interface that allows the user to snooze a notification
- * until a given time. It should be called after the user snoozes a single notification using
+ * until a given {@link SnoozeCriterion}. It should be called after the user snoozes a single
+ * notification using your UI; upon being informed, the notification manager will actually
+ * remove the notification and you will get an
+ * {@link #onNotificationRemoved(StatusBarNotification)} callback. When the snoozing period
+ * expires, you will get a {@link #onNotificationPosted(StatusBarNotification, RankingMap)}
+ * callback for the notification.
+ * @param key The key of the notification to snooze
+ * @param snoozeCriterionId The{@link SnoozeCriterion#getId()} of a context to snooze the
+ * notification until.
+ */
+ public final void snoozeNotification(String key, String snoozeCriterionId) {
+ if (!isBound()) return;
+ try {
+ getNotificationInterface().snoozeNotificationUntilContextFromListener(
+ mWrapper, key, snoozeCriterionId);
+ } catch (android.os.RemoteException ex) {
+ Log.v(TAG, "Unable to contact notification manager", ex);
+ }
+ }
+
+ /**
+ * Inform the notification manager about snoozing a specific notification.
+ * <p>
+ * Use this if your listener has a user interface that allows the user to snooze a notification
+ * until a given time. It should be called after the user snoozes a single notification using
* your UI; upon being informed, the notification manager will actually remove the notification
* and you will get an {@link #onNotificationRemoved(StatusBarNotification)} callback. When the
* snoozing period expires, you will get a
@@ -1094,21 +1118,12 @@
}
@Override
- public void onNotificationVisibilityChanged(String key, long time, boolean visible)
+ public void onNotificationSnoozedUntilContext(
+ IStatusBarNotificationHolder notificationHolder, String snoozeCriterionId)
throws RemoteException {
// no-op in the listener
}
- @Override
- public void onNotificationClick(String key, long time) throws RemoteException {
- // no-op in the listener
- }
-
- @Override
- public void onNotificationActionClick(String key, long time, int actionIndex)
- throws RemoteException {
- // no-op in the listener
- }
}
/**
diff --git a/core/java/android/text/DynamicLayout.java b/core/java/android/text/DynamicLayout.java
index 9ac8996..1e9deeb 100644
--- a/core/java/android/text/DynamicLayout.java
+++ b/core/java/android/text/DynamicLayout.java
@@ -85,7 +85,7 @@
this(base, display, paint, width, align, TextDirectionHeuristics.FIRSTSTRONG_LTR,
spacingmult, spacingadd, includepad,
StaticLayout.BREAK_STRATEGY_SIMPLE, StaticLayout.HYPHENATION_FREQUENCY_NONE,
- ellipsize, ellipsizedWidth);
+ false /* justify */, ellipsize, ellipsizedWidth);
}
/**
@@ -102,7 +102,8 @@
int width, Alignment align, TextDirectionHeuristic textDir,
float spacingmult, float spacingadd,
boolean includepad, int breakStrategy, int hyphenationFrequency,
- TextUtils.TruncateAt ellipsize, int ellipsizedWidth) {
+ boolean justify, TextUtils.TruncateAt ellipsize,
+ int ellipsizedWidth) {
super((ellipsize == null)
? display
: (display instanceof Spanned)
@@ -127,6 +128,7 @@
mIncludePad = includepad;
mBreakStrategy = breakStrategy;
+ mJustify = justify;
mHyphenationFrequency = hyphenationFrequency;
/*
@@ -300,7 +302,8 @@
.setEllipsizedWidth(mEllipsizedWidth)
.setEllipsize(mEllipsizeAt)
.setBreakStrategy(mBreakStrategy)
- .setHyphenationFrequency(mHyphenationFrequency);
+ .setHyphenationFrequency(mHyphenationFrequency)
+ .setJustify(mJustify);
reflowed.generate(b, false, true);
int n = reflowed.getLineCount();
// If the new layout has a blank line at the end, but it is not
@@ -808,6 +811,7 @@
private TextUtils.TruncateAt mEllipsizeAt;
private int mBreakStrategy;
private int mHyphenationFrequency;
+ private boolean mJustify;
private PackedIntVector mInts;
private PackedObjectVector<Directions> mObjects;
diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java
index 3cb81b0..2fc12d3 100644
--- a/core/java/android/text/Layout.java
+++ b/core/java/android/text/Layout.java
@@ -218,6 +218,11 @@
mTextDir = textDir;
}
+ /** @hide */
+ protected void setJustify(boolean justify) {
+ mJustify = justify;
+ }
+
/**
* Replace constructor properties of this Layout with new ones. Be careful.
*/
@@ -266,6 +271,99 @@
drawText(canvas, firstLine, lastLine);
}
+ private boolean isJustificationRequired(int lineNum) {
+ if (!mJustify) return false;
+ final int lineEnd = getLineEnd(lineNum);
+ return lineEnd < mText.length() && mText.charAt(lineEnd - 1) != '\n';
+ }
+
+ private float getJustifyWidth(int lineNum) {
+ Alignment paraAlign = mAlignment;
+ TabStops tabStops = null;
+ boolean tabStopsIsInitialized = false;
+
+ int left = 0;
+ int right = mWidth;
+
+ final int dir = getParagraphDirection(lineNum);
+
+ ParagraphStyle[] spans = NO_PARA_SPANS;
+ if (mSpannedText) {
+ Spanned sp = (Spanned) mText;
+ final int start = getLineStart(lineNum);
+
+ final boolean isFirstParaLine = (start == 0 || mText.charAt(start - 1) == '\n');
+
+ if (isFirstParaLine) {
+ final int spanEnd = sp.nextSpanTransition(start, mText.length(),
+ ParagraphStyle.class);
+ spans = getParagraphSpans(sp, start, spanEnd, ParagraphStyle.class);
+
+ for (int n = spans.length - 1; n >= 0; n--) {
+ if (spans[n] instanceof AlignmentSpan) {
+ paraAlign = ((AlignmentSpan) spans[n]).getAlignment();
+ break;
+ }
+ }
+ }
+
+ final int length = spans.length;
+ boolean useFirstLineMargin = isFirstParaLine;
+ for (int n = 0; n < length; n++) {
+ if (spans[n] instanceof LeadingMarginSpan2) {
+ int count = ((LeadingMarginSpan2) spans[n]).getLeadingMarginLineCount();
+ int startLine = getLineForOffset(sp.getSpanStart(spans[n]));
+ if (lineNum < startLine + count) {
+ useFirstLineMargin = true;
+ break;
+ }
+ }
+ }
+ for (int n = 0; n < length; n++) {
+ if (spans[n] instanceof LeadingMarginSpan) {
+ LeadingMarginSpan margin = (LeadingMarginSpan) spans[n];
+ if (dir == DIR_RIGHT_TO_LEFT) {
+ right -= margin.getLeadingMargin(useFirstLineMargin);
+ } else {
+ left += margin.getLeadingMargin(useFirstLineMargin);
+ }
+ }
+ }
+ }
+
+ if (getLineContainsTab(lineNum)) {
+ tabStops = new TabStops(TAB_INCREMENT, spans);
+ }
+
+ final Alignment align;
+ if (paraAlign == Alignment.ALIGN_LEFT) {
+ align = (dir == DIR_LEFT_TO_RIGHT) ? Alignment.ALIGN_NORMAL : Alignment.ALIGN_OPPOSITE;
+ } else if (paraAlign == Alignment.ALIGN_RIGHT) {
+ align = (dir == DIR_LEFT_TO_RIGHT) ? Alignment.ALIGN_OPPOSITE : Alignment.ALIGN_NORMAL;
+ } else {
+ align = paraAlign;
+ }
+
+ final int indentWidth;
+ if (align == Alignment.ALIGN_NORMAL) {
+ if (dir == DIR_LEFT_TO_RIGHT) {
+ indentWidth = getIndentAdjust(lineNum, Alignment.ALIGN_LEFT);
+ } else {
+ indentWidth = -getIndentAdjust(lineNum, Alignment.ALIGN_RIGHT);
+ }
+ } else if (align == Alignment.ALIGN_OPPOSITE) {
+ if (dir == DIR_LEFT_TO_RIGHT) {
+ indentWidth = -getIndentAdjust(lineNum, Alignment.ALIGN_RIGHT);
+ } else {
+ indentWidth = getIndentAdjust(lineNum, Alignment.ALIGN_LEFT);
+ }
+ } else { // Alignment.ALIGN_CENTER
+ indentWidth = getIndentAdjust(lineNum, Alignment.ALIGN_CENTER);
+ }
+
+ return right - left - indentWidth;
+ }
+
/**
* @hide
*/
@@ -274,7 +372,7 @@
int previousLineEnd = getLineStart(firstLine);
ParagraphStyle[] spans = NO_PARA_SPANS;
int spanEnd = 0;
- TextPaint paint = mPaint;
+ final TextPaint paint = mPaint;
CharSequence buf = mText;
Alignment paraAlign = mAlignment;
@@ -288,6 +386,7 @@
for (int lineNum = firstLine; lineNum <= lastLine; lineNum++) {
int start = previousLineEnd;
previousLineEnd = getLineStart(lineNum + 1);
+ final boolean justify = isJustificationRequired(lineNum);
int end = getLineVisibleEnd(lineNum, start, previousLineEnd);
int ltop = previousLineBottom;
@@ -386,34 +485,42 @@
}
int x;
+ final int indentWidth;
if (align == Alignment.ALIGN_NORMAL) {
if (dir == DIR_LEFT_TO_RIGHT) {
- x = left + getIndentAdjust(lineNum, Alignment.ALIGN_LEFT);
+ indentWidth = getIndentAdjust(lineNum, Alignment.ALIGN_LEFT);
+ x = left + indentWidth;
} else {
- x = right + getIndentAdjust(lineNum, Alignment.ALIGN_RIGHT);
+ indentWidth = -getIndentAdjust(lineNum, Alignment.ALIGN_RIGHT);
+ x = right - indentWidth;
}
} else {
int max = (int)getLineExtent(lineNum, tabStops, false);
if (align == Alignment.ALIGN_OPPOSITE) {
if (dir == DIR_LEFT_TO_RIGHT) {
- x = right - max + getIndentAdjust(lineNum, Alignment.ALIGN_RIGHT);
+ indentWidth = -getIndentAdjust(lineNum, Alignment.ALIGN_RIGHT);
+ x = right - max - indentWidth;
} else {
- x = left - max + getIndentAdjust(lineNum, Alignment.ALIGN_LEFT);
+ indentWidth = getIndentAdjust(lineNum, Alignment.ALIGN_LEFT);
+ x = left - max + indentWidth;
}
} else { // Alignment.ALIGN_CENTER
+ indentWidth = getIndentAdjust(lineNum, Alignment.ALIGN_CENTER);
max = max & ~1;
- x = ((right + left - max) >> 1) +
- getIndentAdjust(lineNum, Alignment.ALIGN_CENTER);
+ x = ((right + left - max) >> 1) + indentWidth;
}
}
paint.setHyphenEdit(getHyphen(lineNum));
Directions directions = getLineDirections(lineNum);
- if (directions == DIRS_ALL_LEFT_TO_RIGHT && !mSpannedText && !hasTab) {
+ if (directions == DIRS_ALL_LEFT_TO_RIGHT && !mSpannedText && !hasTab && !justify) {
// XXX: assumes there's nothing additional to be done
canvas.drawText(buf, start, end, x, lbaseline, paint);
} else {
tl.set(paint, buf, start, end, dir, directions, hasTab, tabStops);
+ if (justify) {
+ tl.justify(right - left - indentWidth);
+ }
tl.draw(canvas, x, ltop, lbaseline, lbottom);
}
paint.setHyphenEdit(0);
@@ -1094,6 +1201,9 @@
TextLine tl = TextLine.obtain();
mPaint.setHyphenEdit(getHyphen(line));
tl.set(mPaint, mText, start, end, dir, directions, hasTabs, tabStops);
+ if (isJustificationRequired(line)) {
+ tl.justify(getJustifyWidth(line));
+ }
float width = tl.metrics(null);
mPaint.setHyphenEdit(0);
TextLine.recycle(tl);
@@ -1118,6 +1228,9 @@
TextLine tl = TextLine.obtain();
mPaint.setHyphenEdit(getHyphen(line));
tl.set(mPaint, mText, start, end, dir, directions, hasTabs, tabStops);
+ if (isJustificationRequired(line)) {
+ tl.justify(getJustifyWidth(line));
+ }
float width = tl.metrics(null);
mPaint.setHyphenEdit(0);
TextLine.recycle(tl);
@@ -1303,10 +1416,7 @@
return end - 1;
}
- // Note: keep this in sync with Minikin LineBreaker::isLineEndSpace()
- if (!(ch == ' ' || ch == '\t' || ch == 0x1680 ||
- (0x2000 <= ch && ch <= 0x200A && ch != 0x2007) ||
- ch == 0x205F || ch == 0x3000)) {
+ if (!TextLine.isLineEndSpace(ch)) {
break;
}
@@ -2086,6 +2196,7 @@
private boolean mSpannedText;
private TextDirectionHeuristic mTextDir;
private SpanSet<LineBackgroundSpan> mLineBackgroundSpans;
+ private boolean mJustify;
public static final int DIR_LEFT_TO_RIGHT = 1;
public static final int DIR_RIGHT_TO_LEFT = -1;
diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java
index 081be3a..cb5b073 100644
--- a/core/java/android/text/StaticLayout.java
+++ b/core/java/android/text/StaticLayout.java
@@ -94,6 +94,7 @@
b.mMaxLines = Integer.MAX_VALUE;
b.mBreakStrategy = Layout.BREAK_STRATEGY_SIMPLE;
b.mHyphenationFrequency = Layout.HYPHENATION_FREQUENCY_NONE;
+ b.mJustify = false;
b.mMeasuredText = MeasuredText.obtain();
return b;
@@ -320,6 +321,17 @@
}
/**
+ * Enables or disables paragraph justification. The default value is disabled (false).
+ *
+ * @param justify true for enabling and false for disabling paragraph justification.
+ * @return this builder, useful for chaining.
+ */
+ public Builder setJustify(boolean justify) {
+ mJustify = justify;
+ return this;
+ }
+
+ /**
* Measurement and break iteration is done in native code. The protocol for using
* the native code is as follows.
*
@@ -404,6 +416,7 @@
int mHyphenationFrequency;
int[] mLeftIndents;
int[] mRightIndents;
+ boolean mJustify;
Paint.FontMetricsInt mFontMetricsInt = new Paint.FontMetricsInt();
@@ -557,6 +570,7 @@
mLeftIndents = b.mLeftIndents;
mRightIndents = b.mRightIndents;
+ setJustify(b.mJustify);
generate(b, b.mIncludePad, b.mIncludePad);
}
@@ -676,7 +690,8 @@
nSetupParagraph(b.mNativePtr, chs, paraEnd - paraStart,
firstWidth, firstWidthLineCount, restWidth,
- variableTabStops, TAB_INCREMENT, b.mBreakStrategy, b.mHyphenationFrequency);
+ variableTabStops, TAB_INCREMENT, b.mBreakStrategy, b.mHyphenationFrequency,
+ b.mJustify);
if (mLeftIndents != null || mRightIndents != null) {
// TODO(raph) performance: it would be better to do this once per layout rather
// than once per paragraph, but that would require a change to the native
@@ -1284,7 +1299,8 @@
// Set up paragraph text and settings; done as one big method to minimize jni crossings
private static native void nSetupParagraph(long nativePtr, char[] text, int length,
float firstWidth, int firstWidthLineCount, float restWidth,
- int[] variableTabStops, int defaultTabStop, int breakStrategy, int hyphenationFrequency);
+ int[] variableTabStops, int defaultTabStop, int breakStrategy, int hyphenationFrequency,
+ boolean isJustified);
private static native float nAddStyleRun(long nativePtr, long nativePaint,
long nativeTypeface, int start, int end, boolean isRtl);
diff --git a/core/java/android/text/TextLine.java b/core/java/android/text/TextLine.java
index c411860..fcff9a2 100644
--- a/core/java/android/text/TextLine.java
+++ b/core/java/android/text/TextLine.java
@@ -54,6 +54,10 @@
private char[] mChars;
private boolean mCharsValid;
private Spanned mSpanned;
+
+ // Additional width of whitespace for justification. This value is per whitespace, thus
+ // the line width will increase by mAddedWidth x (number of stretchable whitespaces).
+ private float mAddedWidth;
private final TextPaint mWorkPaint = new TextPaint();
private final SpanSet<MetricAffectingSpan> mMetricAffectingSpanSpanSet =
new SpanSet<MetricAffectingSpan>(MetricAffectingSpan.class);
@@ -177,6 +181,25 @@
}
}
mTabs = tabStops;
+ mAddedWidth = 0;
+ }
+
+ /**
+ * Justify the line to the given width.
+ */
+ void justify(float justifyWidth) {
+ int end = mLen;
+ while (end > 0 && isLineEndSpace(mText.charAt(mStart + end - 1))) {
+ end--;
+ }
+ final int spaces = countStretchableSpaces(0, end);
+ if (spaces == 0) {
+ // There are no stretchable spaces, so we can't help the justification by adding any
+ // width.
+ return;
+ }
+ final float width = Math.abs(measure(end, false, null));
+ mAddedWidth = (justifyWidth - width) / spaces;
}
/**
@@ -595,6 +618,7 @@
TextPaint wp = mWorkPaint;
wp.set(mPaint);
+ wp.setWordSpacing(mAddedWidth);
int spanStart = runStart;
int spanLimit;
@@ -695,6 +719,7 @@
Canvas c, float x, int top, int y, int bottom,
FontMetricsInt fmi, boolean needWidth, int offset) {
+ wp.setWordSpacing(mAddedWidth);
// Get metrics first (even for empty strings or "0" width runs)
if (fmi != null) {
expandMetricsFromPaint(fmi, wp);
@@ -981,5 +1006,34 @@
return TabStops.nextDefaultStop(h, TAB_INCREMENT);
}
+ private boolean isStretchableWhitespace(int ch) {
+ // TODO: Support other stretchable whitespace. (Bug: 34013491)
+ return ch == 0x0020 || ch == 0x00A0;
+ }
+
+ private int nextStretchableSpace(int start, int end) {
+ for (int i = start; i < end; i++) {
+ final char c = mCharsValid ? mChars[i] : mText.charAt(i + mStart);
+ if (isStretchableWhitespace(c)) return i;
+ }
+ return end;
+ }
+
+ /* Return the number of spaces in the text line, for the purpose of justification */
+ private int countStretchableSpaces(int start, int end) {
+ int count = 0;
+ for (int i = start; i < end; i = nextStretchableSpace(i + 1, end)) {
+ count++;
+ }
+ return count;
+ }
+
+ // Note: keep this in sync with Minikin LineBreaker::isLineEndSpace()
+ public static boolean isLineEndSpace(char ch) {
+ return ch == ' ' || ch == '\t' || ch == 0x1680
+ || (0x2000 <= ch && ch <= 0x200A && ch != 0x2007)
+ || ch == 0x205F || ch == 0x3000;
+ }
+
private static final int TAB_INCREMENT = 20;
}
diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java
index 58bc9a7..bb952ab 100644
--- a/core/java/android/text/TextUtils.java
+++ b/core/java/android/text/TextUtils.java
@@ -29,6 +29,8 @@
import android.os.SystemProperties;
import android.provider.Settings;
import android.text.style.AbsoluteSizeSpan;
+import android.text.style.AccessibilityClickableSpan;
+import android.text.style.AccessibilityURLSpan;
import android.text.style.AlignmentSpan;
import android.text.style.BackgroundColorSpan;
import android.text.style.BulletSpan;
@@ -621,7 +623,11 @@
/** @hide */
public static final int TTS_SPAN = 24;
/** @hide */
- public static final int LAST_SPAN = TTS_SPAN;
+ public static final int ACCESSIBILITY_CLICKABLE_SPAN = 25;
+ /** @hide */
+ public static final int ACCESSIBILITY_URL_SPAN = 26;
+ /** @hide */
+ public static final int LAST_SPAN = ACCESSIBILITY_URL_SPAN;
/**
* Flatten a CharSequence and whatever styles can be copied across processes
@@ -803,6 +809,14 @@
readSpan(p, sp, new TtsSpan(p));
break;
+ case ACCESSIBILITY_CLICKABLE_SPAN:
+ readSpan(p, sp, new AccessibilityClickableSpan(p));
+ break;
+
+ case ACCESSIBILITY_URL_SPAN:
+ readSpan(p, sp, new AccessibilityURLSpan(p));
+ break;
+
default:
throw new RuntimeException("bogus span encoding " + kind);
}
diff --git a/core/java/android/text/style/AccessibilityClickableSpan.java b/core/java/android/text/style/AccessibilityClickableSpan.java
new file mode 100644
index 0000000..9c305ff
--- /dev/null
+++ b/core/java/android/text/style/AccessibilityClickableSpan.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2016 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.text.style;
+
+import static android.view.accessibility.AccessibilityNodeInfo.ACTION_ARGUMENT_ACCESSIBLE_CLICKABLE_SPAN;
+
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.ParcelableSpan;
+import android.text.Spanned;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.accessibility.AccessibilityNodeInfo;
+
+import com.android.internal.R;
+
+import java.lang.ref.WeakReference;
+
+
+/**
+ * {@link ClickableSpan} cannot be parceled, but accessibility services need to be able to cause
+ * their callback handlers to be called. This class serves as a parcelable placeholder for the
+ * real spans.
+ *
+ * This span is also passed back to an app's process when an accessibility service tries to click
+ * it. It contains enough information to track down the original clickable span so it can be
+ * called.
+ *
+ * @hide
+ */
+public class AccessibilityClickableSpan extends ClickableSpan
+ implements ParcelableSpan {
+ // The id of the span this one replaces
+ private final int mOriginalClickableSpanId;
+
+ // Only retain a weak reference to the node to avoid referencing cycles that could create memory
+ // leaks.
+ private WeakReference<AccessibilityNodeInfo> mAccessibilityNodeInfoRef;
+
+
+ /**
+ * @param originalClickableSpanId The id of the span this one replaces
+ */
+ public AccessibilityClickableSpan(int originalClickableSpanId) {
+ mOriginalClickableSpanId = originalClickableSpanId;
+ }
+
+ public AccessibilityClickableSpan(Parcel p) {
+ mOriginalClickableSpanId = p.readInt();
+ }
+
+ @Override
+ public int getSpanTypeId() {
+ return getSpanTypeIdInternal();
+ }
+
+ @Override
+ public int getSpanTypeIdInternal() {
+ return TextUtils.ACCESSIBILITY_CLICKABLE_SPAN;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ writeToParcelInternal(dest, flags);
+ }
+
+ @Override
+ public void writeToParcelInternal(Parcel dest, int flags) {
+ dest.writeInt(mOriginalClickableSpanId);
+ }
+
+ /**
+ * Find the ClickableSpan that matches the one used to create this object.
+ *
+ * @param text The text that contains the original ClickableSpan.
+ * @return The ClickableSpan that matches this object, or {@code null} if no such object
+ * can be found.
+ */
+ public ClickableSpan findClickableSpan(CharSequence text) {
+ if (!(text instanceof Spanned)) {
+ return null;
+ }
+ Spanned sp = (Spanned) text;
+ ClickableSpan[] os = sp.getSpans(0, text.length(), ClickableSpan.class);
+ for (int i = 0; i < os.length; i++) {
+ if (os[i].getId() == mOriginalClickableSpanId) {
+ return os[i];
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Set the accessibilityNodeInfo that this placeholder belongs to. This node is not
+ * included in the parceling logic, and must be set to allow the onClick handler to function.
+ *
+ * @param accessibilityNodeInfo The info this span is part of
+ */
+ public void setAccessibilityNodeInfo(AccessibilityNodeInfo accessibilityNodeInfo) {
+ mAccessibilityNodeInfoRef = new WeakReference<>(accessibilityNodeInfo);
+ }
+
+ /**
+ * Perform the click from an accessibility service. Will not work unless
+ * setAccessibilityNodeInfo is called with a properly initialized node.
+ *
+ * @param unused This argument is required by the superclass but is unused. The real view will
+ * be determined by the AccessibilityNodeInfo.
+ */
+ @Override
+ public void onClick(View unused) {
+ if (mAccessibilityNodeInfoRef == null) {
+ return;
+ }
+ AccessibilityNodeInfo info = mAccessibilityNodeInfoRef.get();
+ if (info == null) {
+ return;
+ }
+ Bundle arguments = new Bundle();
+ arguments.putParcelable(ACTION_ARGUMENT_ACCESSIBLE_CLICKABLE_SPAN, this);
+
+ info.performAction(R.id.accessibilityActionClickOnClickableSpan, arguments);
+ }
+
+ public static final Parcelable.Creator<AccessibilityClickableSpan> CREATOR =
+ new Parcelable.Creator<AccessibilityClickableSpan>() {
+ @Override
+ public AccessibilityClickableSpan createFromParcel(Parcel parcel) {
+ return new AccessibilityClickableSpan(parcel);
+ }
+
+ @Override
+ public AccessibilityClickableSpan[] newArray(int size) {
+ return new AccessibilityClickableSpan[size];
+ }
+ };
+}
diff --git a/core/java/android/text/style/AccessibilityURLSpan.java b/core/java/android/text/style/AccessibilityURLSpan.java
new file mode 100644
index 0000000..0147009
--- /dev/null
+++ b/core/java/android/text/style/AccessibilityURLSpan.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2016 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.text.style;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.accessibility.AccessibilityNodeInfo;
+
+/**
+ * URLSpan's onClick method does not work from an accessibility service. This version of it does.
+ * It is used to replace URLSpans in {@link AccessibilityNodeInfo#setText(CharSequence)}
+ * @hide
+ */
+public class AccessibilityURLSpan extends URLSpan implements Parcelable {
+ final AccessibilityClickableSpan mAccessibilityClickableSpan;
+
+ /**
+ * @param spanToReplace The original span
+ */
+ public AccessibilityURLSpan(URLSpan spanToReplace) {
+ super(spanToReplace.getURL());
+ mAccessibilityClickableSpan =
+ new AccessibilityClickableSpan(spanToReplace.getId());
+ }
+
+ public AccessibilityURLSpan(Parcel p) {
+ super(p);
+ mAccessibilityClickableSpan = new AccessibilityClickableSpan(p);
+ }
+
+ @Override
+ public int getSpanTypeId() {
+ return getSpanTypeIdInternal();
+ }
+
+ @Override
+ public int getSpanTypeIdInternal() {
+ return TextUtils.ACCESSIBILITY_URL_SPAN;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ writeToParcelInternal(dest, flags);
+ }
+
+ @Override
+ public void writeToParcelInternal(Parcel dest, int flags) {
+ super.writeToParcelInternal(dest, flags);
+ mAccessibilityClickableSpan.writeToParcel(dest, flags);
+ }
+
+ @Override
+ public void onClick(View unused) {
+ mAccessibilityClickableSpan.onClick(unused);
+ }
+
+ /**
+ * Delegated to AccessibilityClickableSpan
+ * @param accessibilityNodeInfo
+ */
+ public void setAccessibilityNodeInfo(AccessibilityNodeInfo accessibilityNodeInfo) {
+ mAccessibilityClickableSpan.setAccessibilityNodeInfo(accessibilityNodeInfo);
+ }
+}
diff --git a/core/java/android/text/style/ClickableSpan.java b/core/java/android/text/style/ClickableSpan.java
index 989ef54..a183427 100644
--- a/core/java/android/text/style/ClickableSpan.java
+++ b/core/java/android/text/style/ClickableSpan.java
@@ -26,12 +26,15 @@
* be called.
*/
public abstract class ClickableSpan extends CharacterStyle implements UpdateAppearance {
+ private static int sIdCounter = 0;
+
+ private int mId = sIdCounter++;
/**
* Performs the click action associated with this span.
*/
public abstract void onClick(View widget);
-
+
/**
* Makes the text underlined and in the link color.
*/
@@ -40,4 +43,14 @@
ds.setColor(ds.linkColor);
ds.setUnderlineText(true);
}
+
+ /**
+ * Get the unique ID for this span.
+ *
+ * @return The unique ID.
+ * @hide
+ */
+ public int getId() {
+ return mId;
+ }
}
diff --git a/core/java/android/transition/ArcMotion.java b/core/java/android/transition/ArcMotion.java
index 70443ba..da14834 100644
--- a/core/java/android/transition/ArcMotion.java
+++ b/core/java/android/transition/ArcMotion.java
@@ -199,83 +199,77 @@
float ex;
float ey;
- if (startY == endY) {
- ex = (startX + endX) / 2;
- ey = startY + mMinimumHorizontalTangent * Math.abs(endX - startX) / 2;
- } else if (startX == endX) {
- ex = startX + mMinimumVerticalTangent * Math.abs(endY - startY) / 2;
- ey = (startY + endY) / 2;
- } else {
- float deltaX = endX - startX;
- float deltaY = endY - startY;
- // hypotenuse squared.
- float h2 = deltaX * deltaX + deltaY * deltaY;
+ float deltaX = endX - startX;
+ float deltaY = endY - startY;
- // Midpoint between start and end
- float dx = (startX + endX) / 2;
- float dy = (startY + endY) / 2;
+ // hypotenuse squared.
+ float h2 = deltaX * deltaX + deltaY * deltaY;
- // Distance squared between end point and mid point is (1/2 hypotenuse)^2
- float midDist2 = h2 * 0.25f;
+ // Midpoint between start and end
+ float dx = (startX + endX) / 2;
+ float dy = (startY + endY) / 2;
- float minimumArcDist2 = 0;
- boolean isQuadrant1Or3 = (deltaX * deltaY) > 0;
+ // Distance squared between end point and mid point is (1/2 hypotenuse)^2
+ float midDist2 = h2 * 0.25f;
- if ((Math.abs(deltaX) < Math.abs(deltaY))) {
- // Similar triangles bfa and bde mean that (ab/fb = eb/bd)
- // Therefore, eb = ab * bd / fb
- // ab = hypotenuse
- // bd = hypotenuse/2
- // fb = deltaY
- float eDistY = h2 / (2 * deltaY);
- if (isQuadrant1Or3) {
- ey = startY + eDistY;
- ex = startX;
- } else {
- ey = endY - eDistY;
- ex = endX;
- }
+ float minimumArcDist2 = 0;
- minimumArcDist2 = midDist2 * mMinimumVerticalTangent
- * mMinimumVerticalTangent;
+ boolean isMovingUpwards = startY > endY;
+
+ if ((Math.abs(deltaX) < Math.abs(deltaY))) {
+ // Similar triangles bfa and bde mean that (ab/fb = eb/bd)
+ // Therefore, eb = ab * bd / fb
+ // ab = hypotenuse
+ // bd = hypotenuse/2
+ // fb = deltaY
+ float eDistY = Math.abs(h2 / (2 * deltaY));
+ if (isMovingUpwards) {
+ ey = endY + eDistY;
+ ex = endX;
} else {
- // Same as above, but flip X & Y
- float eDistX = h2 / (2 * deltaX);
- if (isQuadrant1Or3) {
- ex = endX - eDistX;
- ey = endY;
- } else {
- ex = startX + eDistX;
- ey = startY;
- }
-
- minimumArcDist2 = midDist2 * mMinimumHorizontalTangent
- * mMinimumHorizontalTangent;
+ ey = startY + eDistY;
+ ex = startX;
}
- float arcDistX = dx - ex;
- float arcDistY = dy - ey;
- float arcDist2 = arcDistX * arcDistX + arcDistY * arcDistY;
- float maximumArcDist2 = midDist2 * mMaximumTangent * mMaximumTangent;
+ minimumArcDist2 = midDist2 * mMinimumVerticalTangent
+ * mMinimumVerticalTangent;
+ } else {
+ // Same as above, but flip X & Y and account for negative eDist
+ float eDistX = h2 / (2 * deltaX);
+ if (isMovingUpwards) {
+ ex = startX + eDistX;
+ ey = startY;
+ } else {
+ ex = endX - eDistX;
+ ey = endY;
+ }
- float newArcDistance2 = 0;
- if (arcDist2 < minimumArcDist2) {
- newArcDistance2 = minimumArcDist2;
- } else if (arcDist2 > maximumArcDist2) {
- newArcDistance2 = maximumArcDist2;
- }
- if (newArcDistance2 != 0) {
- float ratio2 = newArcDistance2 / arcDist2;
- float ratio = (float) Math.sqrt(ratio2);
- ex = dx + (ratio * (ex - dx));
- ey = dy + (ratio * (ey - dy));
- }
+ minimumArcDist2 = midDist2 * mMinimumHorizontalTangent
+ * mMinimumHorizontalTangent;
}
- float controlX1 = (startX + ex) / 2;
- float controlY1 = (startY + ey) / 2;
- float controlX2 = (ex + endX) / 2;
- float controlY2 = (ey + endY) / 2;
- path.cubicTo(controlX1, controlY1, controlX2, controlY2, endX, endY);
+ float arcDistX = dx - ex;
+ float arcDistY = dy - ey;
+ float arcDist2 = arcDistX * arcDistX + arcDistY * arcDistY;
+
+ float maximumArcDist2 = midDist2 * mMaximumTangent * mMaximumTangent;
+
+ float newArcDistance2 = 0;
+ if (arcDist2 < minimumArcDist2) {
+ newArcDistance2 = minimumArcDist2;
+ } else if (arcDist2 > maximumArcDist2) {
+ newArcDistance2 = maximumArcDist2;
+ }
+ if (newArcDistance2 != 0) {
+ float ratio2 = newArcDistance2 / arcDist2;
+ float ratio = (float) Math.sqrt(ratio2);
+ ex = dx + (ratio * (ex - dx));
+ ey = dy + (ratio * (ey - dy));
+ }
+ float control1X = (startX + ex) / 2;
+ float control1Y = (startY + ey) / 2;
+ float control2X = (ex + endX) / 2;
+ float control2Y = (ey + endY) / 2;
+ path.cubicTo(control1X, control1Y, control2X, control2Y, endX, endY);
return path;
}
}
diff --git a/core/java/android/util/EventLog.java b/core/java/android/util/EventLog.java
index 99f6c2a9..79d16fb 100644
--- a/core/java/android/util/EventLog.java
+++ b/core/java/android/util/EventLog.java
@@ -59,7 +59,7 @@
private Exception mLastWtf;
// Layout of event log entry received from Android logger.
- // see system/core/include/log/logger.h
+ // see system/core/include/log/log.h
private static final int LENGTH_OFFSET = 0;
private static final int HEADER_SIZE_OFFSET = 2;
private static final int PROCESS_OFFSET = 4;
diff --git a/core/java/android/view/AccessibilityInteractionController.java b/core/java/android/view/AccessibilityInteractionController.java
index c7b1d03..13ee48e 100644
--- a/core/java/android/view/AccessibilityInteractionController.java
+++ b/core/java/android/view/AccessibilityInteractionController.java
@@ -16,6 +16,8 @@
package android.view;
+import static android.view.accessibility.AccessibilityNodeInfo.ACTION_ARGUMENT_ACCESSIBLE_CLICKABLE_SPAN;
+
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.Region;
@@ -24,8 +26,12 @@
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
+import android.os.Parcelable;
import android.os.Process;
import android.os.RemoteException;
+import android.text.TextUtils;
+import android.text.style.AccessibilityClickableSpan;
+import android.text.style.ClickableSpan;
import android.util.LongSparseArray;
import android.view.View.AttachInfo;
import android.view.accessibility.AccessibilityInteractionClient;
@@ -33,6 +39,7 @@
import android.view.accessibility.AccessibilityNodeProvider;
import android.view.accessibility.IAccessibilityInteractionConnectionCallback;
+import com.android.internal.R;
import com.android.internal.os.SomeArgs;
import com.android.internal.util.Predicate;
@@ -655,17 +662,23 @@
target = mViewRootImpl.mView;
}
if (target != null && isShown(target)) {
- AccessibilityNodeProvider provider = target.getAccessibilityNodeProvider();
- if (provider != null) {
- if (virtualDescendantId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
- succeeded = provider.performAction(virtualDescendantId, action,
- arguments);
- } else {
- succeeded = provider.performAction(AccessibilityNodeProvider.HOST_VIEW_ID,
- action, arguments);
+ if (action == R.id.accessibilityActionClickOnClickableSpan) {
+ // Handle this hidden action separately
+ succeeded = handleClickableSpanActionUiThread(
+ target, virtualDescendantId, arguments);
+ } else {
+ AccessibilityNodeProvider provider = target.getAccessibilityNodeProvider();
+ if (provider != null) {
+ if (virtualDescendantId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
+ succeeded = provider.performAction(virtualDescendantId, action,
+ arguments);
+ } else {
+ succeeded = provider.performAction(
+ AccessibilityNodeProvider.HOST_VIEW_ID, action, arguments);
+ }
+ } else if (virtualDescendantId == AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
+ succeeded = target.performAccessibilityAction(action, arguments);
}
- } else if (virtualDescendantId == AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
- succeeded = target.performAccessibilityAction(action, arguments);
}
}
} finally {
@@ -816,6 +829,37 @@
return (appScale != 1.0f || (spec != null && !spec.isNop()));
}
+ private boolean handleClickableSpanActionUiThread(
+ View view, int virtualDescendantId, Bundle arguments) {
+ Parcelable span = arguments.getParcelable(ACTION_ARGUMENT_ACCESSIBLE_CLICKABLE_SPAN);
+ if (!(span instanceof AccessibilityClickableSpan)) {
+ return false;
+ }
+
+ // Find the original ClickableSpan if it's still on the screen
+ AccessibilityNodeInfo infoWithSpan = null;
+ AccessibilityNodeProvider provider = view.getAccessibilityNodeProvider();
+ if (provider != null) {
+ int idForNode = (virtualDescendantId == AccessibilityNodeInfo.UNDEFINED_ITEM_ID)
+ ? AccessibilityNodeProvider.HOST_VIEW_ID : virtualDescendantId;
+ infoWithSpan = provider.createAccessibilityNodeInfo(idForNode);
+ } else if (virtualDescendantId == AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
+ infoWithSpan = view.createAccessibilityNodeInfo();
+ }
+ if (infoWithSpan == null) {
+ return false;
+ }
+
+ // Click on the corresponding span
+ ClickableSpan clickableSpan = ((AccessibilityClickableSpan) span).findClickableSpan(
+ infoWithSpan.getOriginalText());
+ if (clickableSpan != null) {
+ clickableSpan.onClick(view);
+ return true;
+ }
+ return false;
+ }
+
/**
* This class encapsulates a prefetching strategy for the accessibility APIs for
* querying window content. It is responsible to prefetch a batch of
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index 3beb00f..b37ea8e 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -282,6 +282,15 @@
*/
public static final int STATE_DOZE_SUSPEND = 4;
+ /**
+ * Display state: The display is on and optimized for VR mode.
+ *
+ * @see #getState
+ * @see android.os.PowerManager#isInteractive
+ * @hide
+ */
+ public static final int STATE_VR = 5;
+
/* The color mode constants defined below must be kept in sync with the ones in
* system/graphics.h */
@@ -866,7 +875,8 @@
* Gets the state of the display, such as whether it is on or off.
*
* @return The state of the display: one of {@link #STATE_OFF}, {@link #STATE_ON},
- * {@link #STATE_DOZE}, {@link #STATE_DOZE_SUSPEND}, or {@link #STATE_UNKNOWN}.
+ * {@link #STATE_DOZE}, {@link #STATE_DOZE_SUSPEND}, or
+ * {@link #STATE_UNKNOWN}.
*/
public int getState() {
synchronized (this) {
@@ -982,6 +992,8 @@
return "DOZE";
case STATE_DOZE_SUSPEND:
return "DOZE_SUSPEND";
+ case STATE_VR:
+ return "VR";
default:
return Integer.toString(state);
}
diff --git a/core/java/android/view/FocusFinder.java b/core/java/android/view/FocusFinder.java
index 1a4f0d1..a07a7ef 100644
--- a/core/java/android/view/FocusFinder.java
+++ b/core/java/android/view/FocusFinder.java
@@ -16,8 +16,8 @@
package android.view;
-import static android.view.View.FOCUS_GROUP_CLUSTER;
-import static android.view.View.FOCUS_GROUP_SECTION;
+import static android.view.View.KEYBOARD_NAVIGATION_GROUP_CLUSTER;
+import static android.view.View.KEYBOARD_NAVIGATION_GROUP_SECTION;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -25,7 +25,7 @@
import android.util.ArrayMap;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
-import android.view.View.FocusGroupType;
+import android.view.View.KeyboardNavigationGroupType;
import java.util.ArrayList;
import java.util.Collections;
@@ -110,30 +110,31 @@
}
/**
- * Find the root of the next keyboard navigation cluster after the current one.
- * @param focusGroupType Type of the focus group
+ * Find the root of the next keyboard navigation group after the current one. The group type can
+ * be either a cluster or a section.
+ * @param groupType Type of the keyboard navigation group
* @param root The view tree to look inside. Cannot be null
- * @param currentCluster The starting point of the search. Null means the default cluster
+ * @param currentGroup The starting point of the search. Null means the default group
* @param direction Direction to look
- * @return The next cluster, or null if none exists
+ * @return The next group, or null if none exists
*/
- public View findNextKeyboardNavigationCluster(
- @FocusGroupType int focusGroupType,
+ public View findNextKeyboardNavigationGroup(
+ @KeyboardNavigationGroupType int groupType,
@NonNull View root,
- @Nullable View currentCluster,
+ @Nullable View currentGroup,
int direction) {
View next = null;
- final ArrayList<View> clusters = mTempList;
+ final ArrayList<View> groups = mTempList;
try {
- clusters.clear();
- root.addKeyboardNavigationClusters(focusGroupType, clusters, direction);
- if (!clusters.isEmpty()) {
- next = findNextKeyboardNavigationCluster(
- focusGroupType, root, currentCluster, clusters, direction);
+ groups.clear();
+ root.addKeyboardNavigationGroups(groupType, groups, direction);
+ if (!groups.isEmpty()) {
+ next = findNextKeyboardNavigationGroup(
+ groupType, root, currentGroup, groups, direction);
}
} finally {
- clusters.clear();
+ groups.clear();
}
return next;
}
@@ -206,25 +207,25 @@
}
}
- private View findNextKeyboardNavigationCluster(
- @FocusGroupType int focusGroupType,
+ private View findNextKeyboardNavigationGroup(
+ @KeyboardNavigationGroupType int groupType,
View root,
- View currentCluster,
- List<View> clusters,
+ View currentGroup,
+ List<View> groups,
int direction) {
- final int count = clusters.size();
+ final int count = groups.size();
switch (direction) {
case View.FOCUS_FORWARD:
case View.FOCUS_DOWN:
case View.FOCUS_RIGHT:
- return getNextKeyboardNavigationCluster(
- focusGroupType, root, currentCluster, clusters, count);
+ return getNextKeyboardNavigationGroup(
+ groupType, root, currentGroup, groups, count);
case View.FOCUS_BACKWARD:
case View.FOCUS_UP:
case View.FOCUS_LEFT:
- return getPreviousKeyboardNavigationCluster(
- focusGroupType, root, currentCluster, clusters, count);
+ return getPreviousKeyboardNavigationGroup(
+ groupType, root, currentGroup, groups, count);
default:
throw new IllegalArgumentException("Unknown direction: " + direction);
}
@@ -330,67 +331,69 @@
return null;
}
- private static View getNextKeyboardNavigationCluster(
- @FocusGroupType int focusGroupType,
+ private static View getNextKeyboardNavigationGroup(
+ @KeyboardNavigationGroupType int groupType,
View root,
- View currentCluster,
- List<View> clusters,
+ View currentGroup,
+ List<View> groups,
int count) {
- if (currentCluster == null) {
- // The current cluster is the default one.
- // The next cluster after the default one is the first one.
- // Note that the caller guarantees that 'clusters' is not empty.
- return clusters.get(0);
+ if (currentGroup == null) {
+ // The current group is the default one.
+ // The next group after the default one is the first one.
+ // Note that the caller guarantees that 'group' is not empty.
+ return groups.get(0);
}
- final int position = clusters.lastIndexOf(currentCluster);
+ final int position = groups.lastIndexOf(currentGroup);
if (position >= 0 && position + 1 < count) {
- // Return the next non-default cluster if we can find it.
- return clusters.get(position + 1);
+ // Return the next non-default group if we can find it.
+ return groups.get(position + 1);
}
- switch (focusGroupType) {
- case FOCUS_GROUP_CLUSTER:
+ switch (groupType) {
+ case KEYBOARD_NAVIGATION_GROUP_CLUSTER:
// The current cluster is the last one. The next one is the default one, i.e. the
// root.
return root;
- case FOCUS_GROUP_SECTION:
+ case KEYBOARD_NAVIGATION_GROUP_SECTION:
// There is no "default section", hence returning the first one.
- return clusters.get(0);
+ return groups.get(0);
default:
- throw new IllegalArgumentException("Unknown focus group type: " + focusGroupType);
+ throw new IllegalArgumentException(
+ "Unknown keyboard navigation group type: " + groupType);
}
}
- private static View getPreviousKeyboardNavigationCluster(
- @FocusGroupType int focusGroupType,
+ private static View getPreviousKeyboardNavigationGroup(
+ @KeyboardNavigationGroupType int groupType,
View root,
- View currentCluster,
- List<View> clusters,
+ View currentGroup,
+ List<View> groups,
int count) {
- if (currentCluster == null) {
- // The current cluster is the default one.
- // The previous cluster before the default one is the last one.
- // Note that the caller guarantees that 'clusters' is not empty.
- return clusters.get(count - 1);
+ if (currentGroup == null) {
+ // The current group is the default one.
+ // The previous group before the default one is the last one.
+ // Note that the caller guarantees that 'groups' is not empty.
+ return groups.get(count - 1);
}
- final int position = clusters.indexOf(currentCluster);
+ final int position = groups.indexOf(currentGroup);
if (position > 0) {
- // Return the previous non-default cluster if we can find it.
- return clusters.get(position - 1);
+ // Return the previous non-default group if we can find it.
+ return groups.get(position - 1);
}
- switch (focusGroupType) {
- case FOCUS_GROUP_CLUSTER:
+ switch (groupType) {
+ case KEYBOARD_NAVIGATION_GROUP_CLUSTER:
// The current cluster is the first one. The previous one is the default one, i.e.
// the root.
return root;
- case FOCUS_GROUP_SECTION:
+ case KEYBOARD_NAVIGATION_GROUP_SECTION:
// There is no "default section", hence returning the last one.
- return clusters.get(count - 1);
+ return groups.get(count - 1);
default:
- throw new IllegalArgumentException("Unknown focus group type: " + focusGroupType);
+ throw new IllegalArgumentException(
+ "Unknown keyboard navigation group type: " + groupType);
}
}
diff --git a/core/java/android/view/IApplicationToken.aidl b/core/java/android/view/IApplicationToken.aidl
index 633b40f..b01c0ef 100644
--- a/core/java/android/view/IApplicationToken.aidl
+++ b/core/java/android/view/IApplicationToken.aidl
@@ -20,10 +20,5 @@
/** {@hide} */
interface IApplicationToken
{
- void windowsDrawn();
- void windowsVisible();
- void windowsGone();
- boolean keyDispatchingTimedOut(String reason);
- long getKeyDispatchingTimeout();
}
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index 21875fe..19edb5c 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -48,6 +48,7 @@
import android.view.IInputFilter;
import android.view.AppTransitionAnimationSpec;
import android.view.WindowContentFrameStats;
+import android.view.WindowManager;
/**
* System private interface to the window manager.
@@ -83,41 +84,9 @@
void setOverscan(int displayId, int left, int top, int right, int bottom);
// These can only be called when holding the MANAGE_APP_TOKENS permission.
- void pauseKeyDispatching(IBinder token);
- void resumeKeyDispatching(IBinder token);
void setEventDispatching(boolean enabled);
void addWindowToken(IBinder token, int type, int displayId);
void removeWindowToken(IBinder token, int displayId);
- /**
- * Creates the object representation for the application token in the window manager and adds it
- * to the specified task Id.
- *
- * @param addPos The position to add the token to in the task.
- * @param token The token to add.
- * @param taskId The Id of the task we are adding the token to.
- * @param requestedOrientation Orientation to use.
- * @param fullscreen True if the application token is fullscreen.
- * @param showWhenLocked True if the application token should be shown when locked.
- * @param configChanges Input configuration changes.
- * @param voiceInteraction True if the token is in voice interaction mode.
- * @param launchTaskBehind True if the token is been launched from behind.
- * @param alwaysFocusable True if the app windows are always focusable regardless of the stack
- * they are in.
- * @param targetSdkVersion The application's target SDK version
- */
- void addAppToken(int addPos, IApplicationToken token, int taskId, int requestedOrientation,
- boolean fullscreen, boolean showWhenLocked, int configChanges, boolean voiceInteraction,
- boolean launchTaskBehind, boolean alwaysFocusable, int targetSdkVersion,
- int rotationAnimationHint);
- /**
- * Adds an already existing application token on the window manager side to the input task id.
- *
- * @param token The token we are adding to the input task Id.
- * @param taskId The Id of the task we are adding the token to.
- */
- void addAppToTask(IBinder token, int taskId);
- void setAppOrientation(IApplicationToken token, int requestedOrientation);
- int getAppOrientation(IApplicationToken token);
void setFocusedApp(IBinder token, boolean moveFocusNow);
void prepareAppTransition(int transit, boolean alwaysKeepCurrent);
int getPendingAppTransition();
@@ -154,20 +123,6 @@
boolean scaleUp);
void executeAppTransition();
- /**
- * Called to set the starting window for the input token and returns true if the starting
- * window was set for the token.
- */
- boolean setAppStartingWindow(IBinder token, String pkg, int theme,
- in CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes,
- int icon, int logo, int windowFlags, IBinder transferFrom, boolean createIfNeeded);
- void setAppVisibility(IBinder token, boolean visible);
- void notifyAppResumed(IBinder token, boolean wasStopped, boolean allowSavedSurface);
- void notifyAppStopped(IBinder token);
- void startAppFreezingScreen(IBinder token, int configChanges);
- void stopAppFreezingScreen(IBinder token, boolean force);
- void removeAppToken(IBinder token, int displayId);
-
/** Used by system ui to report that recents has shown itself. */
void endProlongedAnimations();
@@ -236,16 +191,6 @@
void enableSurfaceTrace(in ParcelFileDescriptor fd);
void disableSurfaceTrace();
- /**
- * Cancels the window transitions for the given task.
- */
- void cancelTaskWindowTransition(int taskId);
-
- /**
- * Cancels the thumbnail transitions for the given task.
- */
- void cancelTaskThumbnailTransition(int taskId);
-
// These can only be called with the SET_ORIENTATION permission.
/**
* Update the current screen rotation based on the current state of
@@ -315,15 +260,6 @@
boolean requestAssistScreenshot(IAssistScreenshotReceiver receiver);
/**
- * Create a screenshot of the applications currently displayed.
- *
- * @param frameScale the scale to apply to the frame, only used when width = -1 and
- * height = -1
- */
- Bitmap screenshotApplications(IBinder appToken, int displayId, int maxWidth, int maxHeight,
- float frameScale);
-
- /**
* Called by the status bar to notify Views of changes to System UI visiblity.
*/
oneway void statusBarVisibilityChanged(int visibility);
diff --git a/core/java/android/view/RenderNodeAnimator.java b/core/java/android/view/RenderNodeAnimator.java
index 7747580..9515040 100644
--- a/core/java/android/view/RenderNodeAnimator.java
+++ b/core/java/android/view/RenderNodeAnimator.java
@@ -200,8 +200,7 @@
// in mTransformationInfo instead of in RenderNode, so we need to update
// it with the final value here.
if (mRenderProperty == RenderNodeAnimator.ALPHA) {
- // Don't need null check because ViewPropertyAnimator's
- // ctor calls ensureTransformationInfo()
+ mViewTarget.ensureTransformationInfo();
mViewTarget.mTransformationInfo.mAlpha = mFinalValue;
}
diff --git a/core/java/android/view/SurfaceHolder.java b/core/java/android/view/SurfaceHolder.java
index a3e8312..2fd2e96 100644
--- a/core/java/android/view/SurfaceHolder.java
+++ b/core/java/android/view/SurfaceHolder.java
@@ -116,9 +116,34 @@
* size before it has been correctly drawn that way). This will
* typically be preceeded by a call to {@link #surfaceChanged}.
*
+ * As of O, {@link #surfaceRedrawNeededAsync} may be implemented
+ * to provide a non-blocking implementation. If {@link #surfaceRedrawNeededAsync}
+ * is not implemented, then this will be called instead.
+ *
* @param holder The SurfaceHolder whose surface has changed.
*/
- public void surfaceRedrawNeeded(SurfaceHolder holder);
+ void surfaceRedrawNeeded(SurfaceHolder holder);
+
+ /**
+ * An alternative to surfaceRedrawNeeded where it is not required to block
+ * until the redraw is complete. You should initiate the redraw, and return,
+ * later invoking drawingFinished when your redraw is complete.
+ *
+ * This can be useful to avoid blocking your main application thread on rendering.
+ *
+ * As of O, if this is implemented {@link #surfaceRedrawNeeded} will not be called.
+ * However it is still recommended to implement {@link #surfaceRedrawNeeded} for
+ * compatibility with older versions of the platform.
+ *
+ * @param holder The SurfaceHolder which needs redrawing.
+ * @param drawingFinished A runnable to signal completion. This may be invoked
+ * from any thread.
+ *
+ */
+ default void surfaceRedrawNeededAsync(SurfaceHolder holder, Runnable drawingFinished) {
+ surfaceRedrawNeeded(holder);
+ drawingFinished.run();
+ }
}
/**
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index d46910c..018be86 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -33,6 +33,7 @@
import android.util.Log;
import com.android.internal.view.BaseIWindow;
+import com.android.internal.view.SurfaceCallbackHelper;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
@@ -639,21 +640,13 @@
if (callbacks == null) {
callbacks = getSurfaceCallbacks();
}
- for (SurfaceHolder.Callback c : callbacks) {
- if (c instanceof SurfaceHolder.Callback2) {
- ((SurfaceHolder.Callback2)c).surfaceRedrawNeeded(
- mSurfaceHolder);
- }
- }
+ SurfaceCallbackHelper sch =
+ new SurfaceCallbackHelper(mSession, mWindow);
+ sch.dispatchSurfaceRedrawNeededAsync(mSurfaceHolder, callbacks);
}
}
} finally {
mIsCreating = false;
- if (redrawNeeded) {
- if (DEBUG) Log.i(TAG, System.identityHashCode(this) + " "
- + "finishedDrawing");
- mSession.finishDrawing(mWindow);
- }
mSession.performDeferredDestroy(mWindow);
}
} catch (RemoteException ex) {
@@ -876,7 +869,6 @@
}
private final SurfaceHolder mSurfaceHolder = new SurfaceHolder() {
-
private static final String LOG_TAG = "SurfaceHolder";
@Override
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java
index 5012215..f3ebcb4 100644
--- a/core/java/android/view/ThreadedRenderer.java
+++ b/core/java/android/view/ThreadedRenderer.java
@@ -28,7 +28,6 @@
import android.os.Binder;
import android.os.IBinder;
import android.os.ParcelFileDescriptor;
-import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.Trace;
import android.util.Log;
@@ -72,17 +71,6 @@
private static final String CACHE_PATH_SHADERS = "com.android.opengl.shaders_cache";
/**
- * System property used to enable or disable dirty regions invalidation.
- * This property is only queried if {@link #RENDER_DIRTY_REGIONS} is true.
- * The default value of this property is assumed to be true.
- *
- * Possible values:
- * "true", to enable partial invalidates
- * "false", to disable partial invalidates
- */
- static final String RENDER_DIRTY_REGIONS_PROPERTY = "debug.hwui.render_dirty_regions";
-
- /**
* System property used to enable or disable threaded rendering profiling.
* The default value of this property is assumed to be false.
*
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index aa941b8..9d1af50 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -39,6 +39,7 @@
import android.annotation.Size;
import android.annotation.TestApi;
import android.annotation.UiThread;
+import android.app.Application.OnProvideAssistDataListener;
import android.content.ClipData;
import android.content.Context;
import android.content.ContextWrapper;
@@ -103,6 +104,9 @@
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.Transformation;
+import android.view.autofill.AutoFillType;
+import android.view.autofill.AutoFillValue;
+import android.view.autofill.VirtualViewDelegate;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputMethodManager;
@@ -1250,11 +1254,11 @@
/** @hide */
@IntDef({
- FOCUS_GROUP_CLUSTER,
- FOCUS_GROUP_SECTION
+ KEYBOARD_NAVIGATION_GROUP_CLUSTER,
+ KEYBOARD_NAVIGATION_GROUP_SECTION
})
@Retention(RetentionPolicy.SOURCE)
- public @interface FocusGroupType {}
+ public @interface KeyboardNavigationGroupType {}
/**
* Use with {@link #focusSearch(int)}. Move focus to the previous selectable
@@ -1289,16 +1293,16 @@
public static final int FOCUS_DOWN = 0x00000082;
/**
- * Use with {@link #keyboardNavigationClusterSearch(int, View, int)}. Search for a keyboard
+ * Use with {@link #keyboardNavigationGroupSearch(int, View, int)}. Search for a keyboard
* navigation cluster.
*/
- public static final int FOCUS_GROUP_CLUSTER = 1;
+ public static final int KEYBOARD_NAVIGATION_GROUP_CLUSTER = 1;
/**
- * Use with {@link #keyboardNavigationClusterSearch(int, View, int)}. Search for a keyboard
+ * Use with {@link #keyboardNavigationGroupSearch(int, View, int)}. Search for a keyboard
* navigation section.
*/
- public static final int FOCUS_GROUP_SECTION = 2;
+ public static final int KEYBOARD_NAVIGATION_GROUP_SECTION = 2;
/**
* Bits of {@link #getMeasuredWidthAndState()} and
@@ -2498,7 +2502,8 @@
* 1 PFLAG3_CLUSTER
* 1 PFLAG3_SECTION
* 1 PFLAG3_FINGER_DOWN
- * xxxxx * NO LONGER NEEDED, SHOULD BE REUSED *
+ * 1 PFLAG3_FOCUSED_BY_DEFAULT
+ * xxxx * NO LONGER NEEDED, SHOULD BE REUSED *
* 1 PFLAG3_OVERLAPPING_RENDERING_FORCED_VALUE
* 1 PFLAG3_HAS_OVERLAPPING_RENDERING_FORCED
* 1 PFLAG3_TEMPORARY_DETACH
@@ -2719,6 +2724,14 @@
private static final int PFLAG3_FINGER_DOWN = 0x20000;
/**
+ * Flag indicating that this view is the default-focus view.
+ *
+ * @see #isFocusedByDefault()
+ * @see #setFocusedByDefault(boolean)
+ */
+ private static final int PFLAG3_FOCUSED_BY_DEFAULT = 0x40000;
+
+ /**
* Whether this view has rendered elements that overlap (see {@link
* #hasOverlappingRendering()}, {@link #forceHasOverlappingRendering(boolean)}, and
* {@link #getHasOverlappingRendering()} ). The value in this bit is only valid when
@@ -3313,7 +3326,9 @@
@ViewDebug.FlagToString(mask = PFLAG_DIRTY_MASK, equals = PFLAG_DIRTY_OPAQUE, name = "DIRTY_OPAQUE"),
@ViewDebug.FlagToString(mask = PFLAG_DIRTY_MASK, equals = PFLAG_DIRTY, name = "DIRTY")
}, formatToHexString = true)
- int mPrivateFlags;
+
+ /* @hide */
+ public int mPrivateFlags;
int mPrivateFlags2;
int mPrivateFlags3;
@@ -3394,7 +3409,8 @@
float mTransitionAlpha = 1f;
}
- TransformationInfo mTransformationInfo;
+ /** @hide */
+ public TransformationInfo mTransformationInfo;
/**
* Current clip bounds. to which all drawing of this view are constrained.
@@ -4022,18 +4038,34 @@
/**
- * <p>When setting a {@link android.app.assist.AssistStructure}, its nodes should not contain
- * PII (Personally Identifiable Information).
+ * Set when a request was made to decide if views in an {@link android.app.Activity} can be
+ * auto-filled by an {@link android.service.autofill.AutoFillService}.
+ *
+ * <p>Since this request is made without a explicit user consent, the resulting
+ * {@link android.app.assist.AssistStructure} should not contain any PII
+ * (Personally Identifiable Information).
+ *
+ * <p>Examples:
+ * <ul>
+ * <li>{@link android.widget.TextView} texts should only be included when they were set by
+ * static resources.
+ * <li>{@link android.webkit.WebView} virtual children should be restricted to a subset of
+ * input fields and tags (like {@code id}).
+ * </ul>
*/
- // TODO(b/33197203) (b/33269702): improve documentation: mention all cases, show examples, etc.
- public static final int ASSIST_FLAG_SANITIZED_TEXT = 0x1;
+ // TODO(b/33197203) (b/34078930): improve documentation: mention all cases, show examples, etc.
+ // In particular, be more specific about webview restrictions
+ public static final int AUTO_FILL_FLAG_TYPE_FILL = 0x1;
/**
- * <p>When setting a {@link android.app.assist.AssistStructure}, its nodes should contain all
- * type of data, even sensitive PII (Personally Identifiable Information) like passwords or
- * credit card numbers.
+ * Set when the user explicitly asked a {@link android.service.autofill.AutoFillService} to save
+ * the value of the {@link View}s in an {@link android.app.Activity}.
+ *
+ * <p>The resulting {@link android.app.assist.AssistStructure} can contain any kind of PII
+ * (Personally Identifiable Information). For example, the text of password fields should be
+ * included since that's what's typically saved.
*/
- public static final int ASSIST_FLAG_NON_SANITIZED_TEXT = 0x2;
+ public static final int AUTO_FILL_FLAG_TYPE_SAVE = 0x2;
/**
* Set to true when drawing cache is enabled and cannot be created.
@@ -4742,6 +4774,11 @@
setKeyboardNavigationSection(a.getBoolean(attr, true));
}
break;
+ case R.styleable.View_focusedByDefault:
+ if (a.peekValue(attr) != null) {
+ setFocusedByDefault(a.getBoolean(attr, true));
+ }
+ break;
}
}
@@ -6133,8 +6170,8 @@
if (mParent != null) {
mParent.requestChildFocus(this, this);
- if (!isKeyboardNavigationCluster() && mParent instanceof ViewGroup) {
- ((ViewGroup) mParent).saveFocus();
+ if (mParent instanceof ViewGroup) {
+ ((ViewGroup) mParent).setDefaultFocus(this);
}
}
@@ -6870,35 +6907,32 @@
* {@link android.app.Activity#onProvideAssistData Activity.onProvideAssistData}.
* @param structure Fill in with structured view data. The default implementation
* fills in all data that can be inferred from the view itself.
- *
- * @deprecated As of API O sub-classes should override
- * {@link #onProvideStructure(ViewStructure, int)} instead.
*/
- // TODO(b/33197203): set proper API above
- @Deprecated
public void onProvideStructure(ViewStructure structure) {
- onProvideStructure(structure, 0);
+ onProvideStructureForAssistOrAutoFill(structure, 0);
}
/**
- * Called when assist structure is being retrieved from a view as part of
- * {@link android.app.Activity#onProvideAssistData Activity.onProvideAssistData} or as part
- * of an auto-fill request.
- *
- * <p>The default implementation fills in all data that can be inferred from the view itself.
+ * Called when assist structure is being retrieved from a view as part of an auto-fill request.
*
* <p>The structure must be filled according to the request type, which is set in the
* {@code flags} parameter - see the documentation on each flag for more details.
*
- * @param structure Fill in with structured view data. The default implementation
+ * @param structure Fill in with structured view data. The default implementation
* fills in all data that can be inferred from the view itself.
- * @param flags optional flags (see {@link #ASSIST_FLAG_SANITIZED_TEXT} and
- * {@link #ASSIST_FLAG_NON_SANITIZED_TEXT} for more info).
+ * @param flags optional flags (see {@link #AUTO_FILL_FLAG_TYPE_FILL} and
+ * {@link #AUTO_FILL_FLAG_TYPE_SAVE} for more info).
*/
- public void onProvideStructure(ViewStructure structure, int flags) {
+ public void onProvideAutoFillStructure(ViewStructure structure, int flags) {
+ onProvideStructureForAssistOrAutoFill(structure, flags);
+ }
+
+ private void onProvideStructureForAssistOrAutoFill(ViewStructure structure, int flags) {
+ // NOTE: currently flags are only used for AutoFill; if they're used for Assist as well,
+ // this method should take a boolean with the type of request.
boolean forAutoFill = (flags
- & (View.ASSIST_FLAG_SANITIZED_TEXT
- | View.ASSIST_FLAG_NON_SANITIZED_TEXT)) != 0;
+ & (View.AUTO_FILL_FLAG_TYPE_FILL
+ | View.AUTO_FILL_FLAG_TYPE_SAVE)) != 0;
final int id = mID;
if (id > 0 && (id&0xff000000) != 0 && (id&0x00ff0000) != 0
&& (id&0x0000ffff) != 0) {
@@ -6920,6 +6954,8 @@
// The auto-fill id needs to be unique, but its value doesn't matter, so it's better to
// reuse the accessibility id to save space.
structure.setAutoFillId(getAccessibilityViewId());
+
+ structure.setAutoFillType(getAutoFillType());
}
structure.setDimens(mLeft, mTop, mScrollX, mScrollY, mRight - mLeft, mBottom - mTop);
@@ -6970,40 +7006,33 @@
* uses {@link #getAccessibilityNodeProvider()} to try to generate this from the
* view's virtual accessibility nodes, if any. You can override this for a more
* optimal implementation providing this data.
- *
- * @deprecated As of API O, sub-classes should override
- * {@link #onProvideVirtualStructure(ViewStructure, int)} instead.
*/
- // TODO(b/33197203): set proper API above
- @Deprecated
public void onProvideVirtualStructure(ViewStructure structure) {
- onProvideVirtualStructure(structure, 0);
+ onProvideVirtualStructureForAssistOrAutoFill(structure, 0);
}
/**
- * Called when assist structure is being retrieved from a view as part of
- * {@link android.app.Activity#onProvideAssistData Activity.onProvideAssistData} or as part
- * of an auto-fill request to generate additional virtual structure under this view.
+ * Called when assist structure is being retrieved from a view as part of an auto-fill request
+ * to generate additional virtual structure under this view.
*
* <p>The defaullt implementation uses {@link #getAccessibilityNodeProvider()} to try to
- * generate this from the view's virtual accessibility nodes, if any. You can override this
+ * generate this from the view's virtual accessibility nodes, if any. You can override this
* for a more optimal implementation providing this data.
*
* <p>The structure must be filled according to the request type, which is set in the
* {@code flags} parameter - see the documentation on each flag for more details.
*
* @param structure Fill in with structured view data.
- * @param flags optional flags (see {@link #ASSIST_FLAG_SANITIZED_TEXT} and
- * {@link #ASSIST_FLAG_NON_SANITIZED_TEXT} for more info).
+ * @param flags optional flags (see {@link #AUTO_FILL_FLAG_TYPE_FILL} and
+ * {@link #AUTO_FILL_FLAG_TYPE_SAVE} for more info).
*/
- public void onProvideVirtualStructure(ViewStructure structure, int flags) {
- boolean sanitize = (flags & View.ASSIST_FLAG_SANITIZED_TEXT) != 0;
+ public void onProvideAutoFillVirtualStructure(ViewStructure structure, int flags) {
+ onProvideVirtualStructureForAssistOrAutoFill(structure, flags);
+ }
- if (sanitize) {
- // TODO(b/33197203): change populateVirtualStructure so it sanitizes data in this case.
- return;
- }
-
+ private void onProvideVirtualStructureForAssistOrAutoFill(ViewStructure structure, int flags) {
+ // NOTE: currently flags are only used for AutoFill; if they're used for Assist as well,
+ // this method should take a boolean with the type of request.
AccessibilityNodeProvider provider = getAccessibilityNodeProvider();
if (provider != null) {
AccessibilityNodeInfo info = createAccessibilityNodeInfo();
@@ -7014,8 +7043,66 @@
}
}
+ /**
+ * Gets the {@link VirtualViewDelegate} responsible for auto-filling the virtual children of
+ * this view.
+ *
+ * <p>By default returns {@code null} but should be overridden when view provides a virtual
+ * hierachy on {@link OnProvideAssistDataListener} that takes flags used by the AutoFill
+ * Framework (such as {@link #AUTO_FILL_FLAG_TYPE_FILL} and
+ * {@link #AUTO_FILL_FLAG_TYPE_SAVE}).
+ */
+ @Nullable
+ public VirtualViewDelegate getAutoFillVirtualViewDelegate(
+ @SuppressWarnings("unused") VirtualViewDelegate.Callback callback) {
+ return null;
+ }
+
+ /**
+ * Automatically fills the content of this view with the {@code value}.
+ *
+ * <p>By default does nothing, but views should override it (and {@link #getAutoFillType()} to
+ * support the AutoFill Framework.
+ *
+ * <p>Typically, it is implemented by:
+ *
+ * <ol>
+ * <li>Call the proper getter method on {@link AutoFillValue} to fetch the actual value.
+ * <li>Pass the actual value to the equivalent setter in the view.
+ * <ol>
+ *
+ * <p>For example, a text-field view would call:
+ *
+ * <pre class="prettyprint">
+ * CharSequence text = value.getTextValue();
+ * if (text != null) {
+ * setText(text);
+ * }
+ * </pre>
+ */
+ public void autoFill(@SuppressWarnings("unused") AutoFillValue value) {
+ }
+
+ /**
+ * Describes the auto-fill type that should be used on callas to
+ * {@link #autoFill(AutoFillValue)} and
+ * {@link VirtualViewDelegate#autoFill(int, AutoFillValue)}.
+ *
+ * <p>By default returns {@code null}, but views should override it (and
+ * {@link #autoFill(AutoFillValue)} to support the AutoFill Framework.
+ */
+ @Nullable
+ public AutoFillType getAutoFillType() {
+ return null;
+ }
+
private void populateVirtualStructure(ViewStructure structure,
AccessibilityNodeProvider provider, AccessibilityNodeInfo info, int flags) {
+ // NOTE: currently flags are only used for AutoFill; if they're used for Assist as well,
+ // this method should take a boolean with the type of request.
+
+ final boolean sanitized = (flags & View.AUTO_FILL_FLAG_TYPE_FILL) != 0;
+
structure.setId(AccessibilityNodeInfo.getVirtualDescendantId(info.getSourceNodeId()),
null, null, null);
Rect rect = structure.getTempRect();
@@ -7053,7 +7140,10 @@
CharSequence cname = info.getClassName();
structure.setClassName(cname != null ? cname.toString() : null);
structure.setContentDescription(info.getContentDescription());
- if (info.getText() != null || info.getError() != null) {
+ if (!sanitized && (info.getText() != null || info.getError() != null)) {
+ // TODO(b/33197203) (b/33269702): when sanitized, try to use the Accessibility API to
+ // just set sanitized values (like text coming from resource files), rather than not
+ // setting it at all.
structure.setText(info.getText(), info.getTextSelectionStart(),
info.getTextSelectionEnd());
}
@@ -7074,14 +7164,9 @@
* Dispatch creation of {@link ViewStructure} down the hierarchy. The default
* implementation calls {@link #onProvideStructure} and
* {@link #onProvideVirtualStructure}.
- *
- * @deprecated As of API O, sub-classes should override
- * {@link #dispatchProvideStructure(ViewStructure, int)} instead.
*/
- // TODO(b/33197203): set proper API above
- @Deprecated
public void dispatchProvideStructure(ViewStructure structure) {
- dispatchProvideStructure(structure, 0);
+ dispatchProvideStructureForAssistOrAutoFill(structure, 0);
}
/**
@@ -7090,22 +7175,33 @@
* <p>The structure must be filled according to the request type, which is set in the
* {@code flags} parameter - see the documentation on each flag for more details.
*
- * <p>The default implementation calls {@link #onProvideStructure(ViewStructure, int)} and
- * {@link #onProvideVirtualStructure(ViewStructure, int)}.
+ * <p>The default implementation calls {@link #onProvideAutoFillStructure(ViewStructure, int)}
+ * and {@link #onProvideAutoFillVirtualStructure(ViewStructure, int)}.
*
* @param structure Fill in with structured view data.
- * @param flags optional flags (see {@link #ASSIST_FLAG_SANITIZED_TEXT} and
- * {@link #ASSIST_FLAG_NON_SANITIZED_TEXT} for more info).
+ * @param flags optional flags (see {@link #AUTO_FILL_FLAG_TYPE_FILL} and
+ * {@link #AUTO_FILL_FLAG_TYPE_SAVE} for more info).
*/
- public void dispatchProvideStructure(ViewStructure structure, int flags) {
+ public void dispatchProvideAutoFillStructure(ViewStructure structure, int flags) {
+ dispatchProvideStructureForAssistOrAutoFill(structure, flags);
+ }
+
+ private void dispatchProvideStructureForAssistOrAutoFill(ViewStructure structure, int flags) {
+ // NOTE: currently flags are only used for AutoFill; if they're used for Assist as well,
+ // this method should take a boolean with the type of request.
boolean forAutoFill = (flags
- & (View.ASSIST_FLAG_SANITIZED_TEXT
- | View.ASSIST_FLAG_NON_SANITIZED_TEXT)) != 0;
+ & (View.AUTO_FILL_FLAG_TYPE_FILL
+ | View.AUTO_FILL_FLAG_TYPE_SAVE)) != 0;
boolean blocked = forAutoFill ? isAutoFillBlocked() : isAssistBlocked();
if (!blocked) {
- onProvideStructure(structure, flags);
- onProvideVirtualStructure(structure, flags);
+ if (forAutoFill) {
+ onProvideAutoFillStructure(structure, flags);
+ onProvideAutoFillVirtualStructure(structure, flags);
+ } else {
+ onProvideStructure(structure);
+ onProvideVirtualStructure(structure);
+ }
} else {
structure.setClassName(getAccessibilityClassName().toString());
structure.setAssistBlocked(true);
@@ -9116,45 +9212,108 @@
}
}
- final boolean isFocusGroupOfType(@FocusGroupType int focusGroupType) {
- switch (focusGroupType) {
- case FOCUS_GROUP_CLUSTER:
+ final boolean isKeyboardNavigationGroupOfType(@KeyboardNavigationGroupType int groupType) {
+ switch (groupType) {
+ case KEYBOARD_NAVIGATION_GROUP_CLUSTER:
return isKeyboardNavigationCluster();
- case FOCUS_GROUP_SECTION:
+ case KEYBOARD_NAVIGATION_GROUP_SECTION:
return isKeyboardNavigationSection();
default:
- throw new IllegalArgumentException("Unknown focus group type: " + focusGroupType);
+ throw new IllegalArgumentException(
+ "Unknown keyboard navigation group type: " + groupType);
}
}
/**
- * Find the nearest keyboard navigation cluster in the specified direction.
- * This does not actually give focus to that cluster.
+ * Returns whether this View should receive focus when the focus is restored for the view
+ * hierarchy containing this view.
+ * <p>
+ * Focus gets restored for a view hierarchy when the root of the hierarchy gets added to a
+ * window or serves as a target of cluster or section navigation.
*
- * @param focusGroupType Type of the focus group
- * @param currentCluster The starting point of the search. Null means the current cluster is not
- * found yet
+ * @see #restoreDefaultFocus(int)
+ *
+ * @return {@code true} if this view is the default-focus view, {@code false} otherwise
+ * @attr ref android.R.styleable#View_focusedByDefault
+ */
+ @ViewDebug.ExportedProperty(category = "focusedByDefault")
+ public final boolean isFocusedByDefault() {
+ return (mPrivateFlags3 & PFLAG3_FOCUSED_BY_DEFAULT) != 0;
+ }
+
+ /**
+ * Sets whether this View should receive focus when the focus is restored for the view
+ * hierarchy containing this view.
+ * <p>
+ * Focus gets restored for a view hierarchy when the root of the hierarchy gets added to a
+ * window or serves as a target of cluster or section navigation.
+ *
+ * @param isFocusedByDefault {@code true} to set this view as the default-focus view,
+ * {@code false} otherwise.
+ *
+ * @see #restoreDefaultFocus(int)
+ *
+ * @attr ref android.R.styleable#View_focusedByDefault
+ */
+ public void setFocusedByDefault(boolean isFocusedByDefault) {
+ if (isFocusedByDefault == ((mPrivateFlags3 & PFLAG3_FOCUSED_BY_DEFAULT) != 0)) {
+ return;
+ }
+
+ if (isFocusedByDefault) {
+ mPrivateFlags3 |= PFLAG3_FOCUSED_BY_DEFAULT;
+ } else {
+ mPrivateFlags3 &= ~PFLAG3_FOCUSED_BY_DEFAULT;
+ }
+
+ if (mParent instanceof ViewGroup) {
+ if (isFocusedByDefault) {
+ ((ViewGroup) mParent).setDefaultFocus(this);
+ } else {
+ ((ViewGroup) mParent).cleanDefaultFocus(this);
+ }
+ }
+ }
+
+ /**
+ * Returns whether the view hierarchy with this view as a root contain a default-focus view.
+ *
+ * @return {@code true} if this view has default focus, {@code false} otherwise
+ */
+ boolean hasDefaultFocus() {
+ return isFocusedByDefault();
+ }
+
+ /**
+ * Find the nearest keyboard navigation group in the specified direction. The group type can be
+ * either a cluster or a section.
+ * This does not actually give focus to that group.
+ *
+ * @param groupType Type of the keyboard navigation group
+ * @param currentGroup The starting point of the search. Null means the current group is not
+ * found yet
* @param direction Direction to look
*
- * @return The nearest keyboard navigation cluster in the specified direction, or null if none
+ * @return The nearest keyboard navigation group in the specified direction, or null if none
* can be found
*/
- public View keyboardNavigationClusterSearch(
- @FocusGroupType int focusGroupType, View currentCluster, int direction) {
- if (isFocusGroupOfType(focusGroupType)) {
- currentCluster = this;
+ public View keyboardNavigationGroupSearch(
+ @KeyboardNavigationGroupType int groupType, View currentGroup, int direction) {
+ if (isKeyboardNavigationGroupOfType(groupType)) {
+ currentGroup = this;
}
if (isRootNamespace()
- || focusGroupType == FOCUS_GROUP_SECTION && isKeyboardNavigationCluster()) {
+ || (groupType == KEYBOARD_NAVIGATION_GROUP_SECTION
+ && isKeyboardNavigationCluster())) {
// Root namespace means we should consider ourselves the top of the
- // tree for cluster searching; otherwise we could be focus searching
+ // tree for group searching; otherwise we could be group searching
// into other tabs. see LocalActivityManager and TabHost for more info.
// In addition, a cluster node works as a root for section searches.
- return FocusFinder.getInstance().findNextKeyboardNavigationCluster(
- focusGroupType, this, currentCluster, direction);
+ return FocusFinder.getInstance().findNextKeyboardNavigationGroup(
+ groupType, this, currentGroup, direction);
} else if (mParent != null) {
- return mParent.keyboardNavigationClusterSearch(
- focusGroupType, currentCluster, direction);
+ return mParent.keyboardNavigationGroupSearch(
+ groupType, currentGroup, direction);
}
return null;
}
@@ -9282,18 +9441,19 @@
}
/**
- * Adds any keyboard navigation cluster roots that are descendants of this view (possibly
- * including this view if it is a cluster root itself) to views.
+ * Adds any keyboard navigation group roots that are descendants of this view (possibly
+ * including this view if it is a group root itself) to views. The group type can be either a
+ * cluster or a section.
*
- * @param focusGroupType Type of the focus group
- * @param views Cluster roots found so far
+ * @param groupType Type of the keyboard navigation group
+ * @param views Keyboard navigation group roots found so far
* @param direction Direction to look
*/
- public void addKeyboardNavigationClusters(
- @FocusGroupType int focusGroupType,
+ public void addKeyboardNavigationGroups(
+ @KeyboardNavigationGroupType int groupType,
@NonNull Collection<View> views,
int direction) {
- if (!(isFocusGroupOfType(focusGroupType))) {
+ if (!(isKeyboardNavigationGroupOfType(groupType))) {
return;
}
views.add(this);
@@ -9500,15 +9660,15 @@
}
/**
- * Gives focus to the last focused view in the view hierarchy that has this view as a root.
- * If the last focused view cannot be found, fall back to calling {@link #requestFocus()}.
- * Nested keyboard navigation clusters are excluded from the hierarchy considered for saving the
- * last focus.
+ * Gives focus to the default-focus view in the view hierarchy that has this view as a root.
+ * If the default-focus view cannot be found, falls back to calling {@link #requestFocus(int)}.
+ * Nested keyboard navigation clusters are excluded from the hierarchy.
*
- * @return Whether this view or one of its descendants actually took focus.
+ * @param direction The direction of the focus
+ * @return Whether this view or one of its descendants actually took focus
*/
- public boolean restoreLastFocus() {
- return requestFocus();
+ public boolean restoreDefaultFocus(@FocusDirection int direction) {
+ return requestFocus(direction);
}
/**
@@ -14105,8 +14265,9 @@
* invalidated as well. This is usually true for a full
* invalidate, but may be set to false if the View's contents or
* dimensions have not changed.
+ * @hide
*/
- void invalidate(boolean invalidateCache) {
+ public void invalidate(boolean invalidateCache) {
invalidateInternal(0, 0, mRight - mLeft, mBottom - mTop, invalidateCache, true);
}
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 7835899..1b42a90 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -136,9 +136,9 @@
// The view contained within this ViewGroup that has or contains focus.
private View mFocused;
- // The last view contained within this ViewGroup (excluding nested keyboard navigation clusters)
- // that had or contained focus.
- private View mLastFocused;
+ // The view contained within this ViewGroup (excluding nested keyboard navigation clusters)
+ // that is or contains a default-focus view.
+ private View mDefaultFocus;
/**
* A Transformation used when drawing children, to
@@ -722,7 +722,7 @@
if (mFocused != null) {
mFocused.unFocus(this);
mFocused = null;
- mLastFocused = null;
+ mDefaultFocus = null;
}
super.handleFocusGainInternal(direction, previouslyFocusedRect);
}
@@ -753,17 +753,45 @@
}
/**
- * Saves the current focus as the last focus for this view and all its ancestors.
+ * Sets the specified child view as the default focus for this view and all its ancestors.
* If the view is inside a keyboard navigation cluster, stops at the root of the cluster since
- * the cluster forms a separate keyboard navigation hierarchy from the focus saving point of
+ * the cluster forms a separate keyboard navigation hierarchy from the default focus point of
* view.
*/
- void saveFocus() {
- mLastFocused = mFocused;
-
- if (!isKeyboardNavigationCluster() && mParent instanceof ViewGroup) {
- ((ViewGroup) mParent).saveFocus();
+ void setDefaultFocus(View child) {
+ if (child.isKeyboardNavigationCluster()) {
+ return;
}
+
+ mDefaultFocus = child;
+
+ if (mParent instanceof ViewGroup) {
+ ((ViewGroup) mParent).setDefaultFocus(this);
+ }
+ }
+
+ /**
+ * Destroys the default focus chain.
+ */
+ void cleanDefaultFocus(View child) {
+ if (mDefaultFocus != child) {
+ return;
+ }
+
+ if (child.isKeyboardNavigationCluster()) {
+ return;
+ }
+
+ mDefaultFocus = null;
+
+ if (mParent instanceof ViewGroup) {
+ ((ViewGroup) mParent).cleanDefaultFocus(this);
+ }
+ }
+
+ @Override
+ boolean hasDefaultFocus() {
+ return mDefaultFocus != null || super.hasDefaultFocus();
}
@Override
@@ -1147,14 +1175,14 @@
}
@Override
- public void addKeyboardNavigationClusters(
- @FocusGroupType int focusGroupType, Collection<View> views, int direction) {
+ public void addKeyboardNavigationGroups(
+ @KeyboardNavigationGroupType int groupType, Collection<View> views, int direction) {
final int focusableCount = views.size();
- super.addKeyboardNavigationClusters(focusGroupType, views, direction);
+ super.addKeyboardNavigationGroups(groupType, views, direction);
if (focusableCount != views.size()) {
- // No need to look for clusters inside a cluster.
+ // No need to look for groups inside a group.
return;
}
@@ -1167,13 +1195,14 @@
for (int i = 0; i < count; i++) {
final View child = children[i];
- if (focusGroupType == FOCUS_GROUP_SECTION && child.isKeyboardNavigationCluster()) {
+ if (groupType == KEYBOARD_NAVIGATION_GROUP_SECTION
+ && child.isKeyboardNavigationCluster()) {
// When the current cluster is the default cluster, and we are searching for
// sections, ignore sections inside non-default clusters.
continue;
}
if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE) {
- child.addKeyboardNavigationClusters(focusGroupType, views, direction);
+ child.addKeyboardNavigationGroups(groupType, views, direction);
}
}
}
@@ -3053,14 +3082,14 @@
}
@Override
- public boolean restoreLastFocus() {
- if (mLastFocused != null && !mLastFocused.isKeyboardNavigationCluster()
+ public boolean restoreDefaultFocus(@FocusDirection int direction) {
+ if (mDefaultFocus != null && !mDefaultFocus.isKeyboardNavigationCluster()
&& getDescendantFocusability() != FOCUS_BLOCK_DESCENDANTS
- && (mLastFocused.mViewFlags & VISIBILITY_MASK) == VISIBLE
- && mLastFocused.restoreLastFocus()) {
+ && (mDefaultFocus.mViewFlags & VISIBILITY_MASK) == VISIBLE
+ && mDefaultFocus.restoreDefaultFocus(direction)) {
return true;
}
- return super.restoreLastFocus();
+ return super.restoreDefaultFocus(direction);
}
/**
@@ -3155,18 +3184,34 @@
}
/**
+ * Dispatch creation of {@link ViewStructure} down the hierarchy. This implementation
+ * adds in all child views of the view group, in addition to calling the default View
+ * implementation.
+ */
+ @Override
+ public void dispatchProvideStructure(ViewStructure structure) {
+ super.dispatchProvideStructure(structure);
+ dispatchProvideStructureForAssistOrAutoFill(structure, 0);
+ }
+
+ /**
* {@inheritDoc}
*
* <p>This implementation adds in all child views of the view group, in addition to calling the
* default {@link View} implementation.
*/
@Override
- public void dispatchProvideStructure(ViewStructure structure, int flags) {
- super.dispatchProvideStructure(structure, flags);
+ public void dispatchProvideAutoFillStructure(ViewStructure structure, int flags) {
+ super.dispatchProvideAutoFillStructure(structure, flags);
+ dispatchProvideStructureForAssistOrAutoFill(structure, flags);
+ }
+ private void dispatchProvideStructureForAssistOrAutoFill(ViewStructure structure, int flags) {
+ // NOTE: currently flags are only used for AutoFill; if they're used for Assist as well,
+ // this method should take a boolean with the type of request.
boolean forAutoFill = (flags
- & (View.ASSIST_FLAG_SANITIZED_TEXT
- | View.ASSIST_FLAG_NON_SANITIZED_TEXT)) != 0;
+ & (View.AUTO_FILL_FLAG_TYPE_FILL
+ | View.AUTO_FILL_FLAG_TYPE_SAVE)) != 0;
boolean blocked = forAutoFill ? isAutoFillBlocked() : isAssistBlocked();
@@ -3232,12 +3277,11 @@
preorderedList, children, childIndex);
final ViewStructure cstructure = structure.newChild(i);
- // Must explicitly check which recursive method to call because child might
- // not be overriding the new, flags-based version
- if (flags == 0) {
- child.dispatchProvideStructure(cstructure);
+ // Must explicitly check which recursive method to call.
+ if (forAutoFill) {
+ child.dispatchProvideAutoFillStructure(cstructure, flags);
} else {
- child.dispatchProvideStructure(cstructure, flags);
+ child.dispatchProvideStructure(cstructure);
}
}
if (preorderedList != null) preorderedList.clear();
@@ -4704,6 +4748,12 @@
if (mCurrentDragStartEvent != null && child.getVisibility() == VISIBLE) {
notifyChildOfDragStart(child);
}
+
+ if (child.hasDefaultFocus()) {
+ // When adding a child that contains default focus, either during inflation or while
+ // manually assembling the hierarchy, update the ancestor default-focus chain.
+ setDefaultFocus(child);
+ }
}
private void addInArray(View child, int index) {
@@ -4915,8 +4965,8 @@
view.unFocus(null);
clearChildFocus = true;
}
- if (view == mLastFocused) {
- mLastFocused = null;
+ if (view == mDefaultFocus) {
+ mDefaultFocus = null;
}
view.clearAccessibilityFocus();
@@ -5028,8 +5078,8 @@
view.unFocus(null);
clearChildFocus = true;
}
- if (view == mLastFocused) {
- mLastFocused = null;
+ if (view == mDefaultFocus) {
+ mDefaultFocus = null;
}
view.clearAccessibilityFocus();
@@ -5104,7 +5154,7 @@
boolean clearChildFocus = false;
needGlobalAttributesUpdate(false);
- mLastFocused = null;
+ mDefaultFocus = null;
for (int i = count - 1; i >= 0; i--) {
final View view = children[i];
@@ -5176,8 +5226,8 @@
if (child == mFocused) {
child.clearFocus();
}
- if (child == mLastFocused) {
- mLastFocused = null;
+ if (child == mDefaultFocus) {
+ mDefaultFocus = null;
}
child.clearAccessibilityFocus();
@@ -5339,11 +5389,96 @@
}
/**
+ * HW-only, Rect-ignoring invalidation path.
+ *
+ * Returns false if this path was unable to complete successfully. This means
+ * it hit a ViewParent it doesn't recognize and needs to fall back to calculating
+ * damage area.
+ *
+ * Hardware acceleration ignores damage rectangles, since native computes damage for everything
+ * drawn by HWUI (and SW layer / drawing cache doesn't keep track of damage area).
+ *
+ * Ignores opaque dirty optimizations, always using the full PFLAG_DIRTY flag.
+ *
+ * Ignores FLAG_OPTIMIZE_INVALIDATE, since we're not computing a rect,
+ * so no point in optimizing that.
+ * @hide
+ */
+ public boolean tryInvalidateChildHardware(View child) {
+ final AttachInfo attachInfo = mAttachInfo;
+ if (attachInfo == null || !attachInfo.mHardwareAccelerated) {
+ return false;
+ }
+
+ // verify it's ViewGroups up to a ViewRootImpl
+ ViewRootImpl viewRoot = null;
+ ViewParent parent = getParent();
+ while (parent != null) {
+ if (parent instanceof ViewGroup) {
+ parent = parent.getParent();
+ } else if (parent instanceof ViewRootImpl) {
+ viewRoot = (ViewRootImpl) parent;
+ break;
+ } else {
+ // unknown parent type, abort
+ return false;
+ }
+ }
+ if (viewRoot == null) {
+ // unable to find ViewRoot
+ return false;
+ }
+
+ final boolean drawAnimation = (child.mPrivateFlags & PFLAG_DRAW_ANIMATION) != 0;
+
+ if (child.mLayerType != LAYER_TYPE_NONE) {
+ mPrivateFlags |= PFLAG_INVALIDATED;
+ }
+
+ parent = this;
+ do {
+ if (parent != viewRoot) {
+ // Note: we cast here without checking isinstance, to avoid cost of isinstance again
+ ViewGroup viewGroup = (ViewGroup) parent;
+ if (drawAnimation) {
+ viewGroup.mPrivateFlags |= PFLAG_DRAW_ANIMATION;
+ }
+
+ // We lazily use PFLAG_DIRTY, since computing opaque isn't worth the potential
+ // optimization in provides in a DisplayList world.
+ viewGroup.mPrivateFlags =
+ (viewGroup.mPrivateFlags & ~PFLAG_DIRTY_MASK) | PFLAG_DIRTY;
+
+ // simplified invalidateChildInParent behavior: clear cache validity to be safe,
+ // and mark inval if in layer
+ viewGroup.mPrivateFlags &= ~PFLAG_DRAWING_CACHE_VALID;
+ if (viewGroup.mLayerType != LAYER_TYPE_NONE) {
+ viewGroup.mPrivateFlags |= PFLAG_INVALIDATED;
+ }
+ } else {
+ if (drawAnimation) {
+ viewRoot.mIsAnimating = true;
+ }
+ ((ViewRootImpl) parent).invalidate();
+ return true;
+ }
+
+ parent = parent.getParent();
+ } while (parent != null);
+ return true;
+ }
+
+
+ /**
* Don't call or override this method. It is used for the implementation of
* the view hierarchy.
*/
@Override
public final void invalidateChild(View child, final Rect dirty) {
+ if (tryInvalidateChildHardware(child)) {
+ return;
+ }
+
ViewParent parent = this;
final AttachInfo attachInfo = mAttachInfo;
@@ -5351,8 +5486,7 @@
// If the child is drawing an animation, we want to copy this flag onto
// ourselves and the parent to make sure the invalidate request goes
// through
- final boolean drawAnimation = (child.mPrivateFlags & PFLAG_DRAW_ANIMATION)
- == PFLAG_DRAW_ANIMATION;
+ final boolean drawAnimation = (child.mPrivateFlags & PFLAG_DRAW_ANIMATION) != 0;
// Check whether the child that requests the invalidate is fully opaque
// Views being animated or transformed are not considered opaque because we may
@@ -5453,10 +5587,10 @@
*/
@Override
public ViewParent invalidateChildInParent(final int[] location, final Rect dirty) {
- if ((mPrivateFlags & PFLAG_DRAWN) == PFLAG_DRAWN ||
- (mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) == PFLAG_DRAWING_CACHE_VALID) {
- if ((mGroupFlags & (FLAG_OPTIMIZE_INVALIDATE | FLAG_ANIMATION_DONE)) !=
- FLAG_OPTIMIZE_INVALIDATE) {
+ if ((mPrivateFlags & (PFLAG_DRAWN | PFLAG_DRAWING_CACHE_VALID)) != 0) {
+ // either DRAWN, or DRAWING_CACHE_VALID
+ if ((mGroupFlags & (FLAG_OPTIMIZE_INVALIDATE | FLAG_ANIMATION_DONE))
+ != FLAG_OPTIMIZE_INVALIDATE) {
dirty.offset(location[CHILD_LEFT_INDEX] - mScrollX,
location[CHILD_TOP_INDEX] - mScrollY);
if ((mGroupFlags & FLAG_CLIP_CHILDREN) == 0) {
@@ -5471,35 +5605,28 @@
dirty.setEmpty();
}
}
- mPrivateFlags &= ~PFLAG_DRAWING_CACHE_VALID;
location[CHILD_LEFT_INDEX] = left;
location[CHILD_TOP_INDEX] = top;
-
- if (mLayerType != LAYER_TYPE_NONE) {
- mPrivateFlags |= PFLAG_INVALIDATED;
- }
-
- return mParent;
-
} else {
- mPrivateFlags &= ~PFLAG_DRAWN & ~PFLAG_DRAWING_CACHE_VALID;
- location[CHILD_LEFT_INDEX] = mLeft;
- location[CHILD_TOP_INDEX] = mTop;
if ((mGroupFlags & FLAG_CLIP_CHILDREN) == FLAG_CLIP_CHILDREN) {
dirty.set(0, 0, mRight - mLeft, mBottom - mTop);
} else {
// in case the dirty rect extends outside the bounds of this container
dirty.union(0, 0, mRight - mLeft, mBottom - mTop);
}
+ location[CHILD_LEFT_INDEX] = mLeft;
+ location[CHILD_TOP_INDEX] = mTop;
- if (mLayerType != LAYER_TYPE_NONE) {
- mPrivateFlags |= PFLAG_INVALIDATED;
- }
-
- return mParent;
+ mPrivateFlags &= ~PFLAG_DRAWN;
}
+ mPrivateFlags &= ~PFLAG_DRAWING_CACHE_VALID;
+ if (mLayerType != LAYER_TYPE_NONE) {
+ mPrivateFlags |= PFLAG_INVALIDATED;
+ }
+
+ return mParent;
}
return null;
@@ -5512,7 +5639,7 @@
* damage area
* @hide
*/
- public boolean damageChildDeferred(View child) {
+ public boolean damageChildDeferred() {
ViewParent parent = getParent();
while (parent != null) {
if (parent instanceof ViewGroup) {
@@ -5535,7 +5662,7 @@
* @hide
*/
public void damageChild(View child, final Rect dirty) {
- if (damageChildDeferred(child)) {
+ if (damageChildDeferred()) {
return;
}
@@ -6183,11 +6310,11 @@
Log.d(VIEW_LOG_TAG, output);
mFocused.debug(depth + 1);
}
- if (mLastFocused != null) {
+ if (mDefaultFocus != null) {
output = debugIndent(depth);
- output += "mLastFocused";
+ output += "mDefaultFocus";
Log.d(VIEW_LOG_TAG, output);
- mLastFocused.debug(depth + 1);
+ mDefaultFocus.debug(depth + 1);
}
if (mChildrenCount != 0) {
output = debugIndent(depth);
diff --git a/core/java/android/view/ViewOverlay.java b/core/java/android/view/ViewOverlay.java
index b770bd5..61cf0c7 100644
--- a/core/java/android/view/ViewOverlay.java
+++ b/core/java/android/view/ViewOverlay.java
@@ -283,8 +283,9 @@
}
}
+ /** @hide */
@Override
- void invalidate(boolean invalidateCache) {
+ public void invalidate(boolean invalidateCache) {
super.invalidate(invalidateCache);
if (mHostView != null) {
mHostView.invalidate(invalidateCache);
diff --git a/core/java/android/view/ViewParent.java b/core/java/android/view/ViewParent.java
index c5414e9..c9277ca 100644
--- a/core/java/android/view/ViewParent.java
+++ b/core/java/android/view/ViewParent.java
@@ -18,7 +18,7 @@
import android.graphics.Rect;
import android.os.Bundle;
-import android.view.View.FocusGroupType;
+import android.view.View.KeyboardNavigationGroupType;
import android.view.accessibility.AccessibilityEvent;
/**
@@ -148,19 +148,20 @@
public View focusSearch(View v, int direction);
/**
- * Find the nearest keyboard navigation cluster in the specified direction.
- * This does not actually give focus to that cluster.
+ * Find the nearest keyboard navigation group in the specified direction. The group type can be
+ * either a cluster or a section.
+ * This does not actually give focus to that group.
*
- * @param focusGroupType Type of the focus group
- * @param currentCluster The starting point of the search. Null means the current cluster is not
- * found yet
+ * @param groupType Type of the keyboard navigation group
+ * @param currentGroup The starting point of the search. Null means the current group is not
+ * found yet
* @param direction Direction to look
*
- * @return The nearest keyboard navigation cluster in the specified direction, or null if none
+ * @return The nearest keyboard navigation group in the specified direction, or null if none
* can be found
*/
- View keyboardNavigationClusterSearch(
- @FocusGroupType int focusGroupType, View currentCluster, int direction);
+ View keyboardNavigationGroupSearch(
+ @KeyboardNavigationGroupType int groupType, View currentGroup, int direction);
/**
* Change the z order of the child so it's on top of all other children.
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 75ebbb7..9ddbbf2 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -16,8 +16,8 @@
package android.view;
-import static android.view.View.FOCUS_GROUP_CLUSTER;
-import static android.view.View.FOCUS_GROUP_SECTION;
+import static android.view.View.KEYBOARD_NAVIGATION_GROUP_CLUSTER;
+import static android.view.View.KEYBOARD_NAVIGATION_GROUP_SECTION;
import static android.view.WindowCallbacks.RESIZE_MODE_DOCKED_DIVIDER;
import static android.view.WindowCallbacks.RESIZE_MODE_FREEFORM;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_DECOR_VIEW_VISIBILITY;
@@ -73,7 +73,7 @@
import android.util.TypedValue;
import android.view.Surface.OutOfResourcesException;
import android.view.View.AttachInfo;
-import android.view.View.FocusGroupType;
+import android.view.View.KeyboardNavigationGroupType;
import android.view.View.MeasureSpec;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
@@ -96,6 +96,7 @@
import com.android.internal.policy.PhoneFallbackEventHandler;
import com.android.internal.view.BaseSurfaceHolder;
import com.android.internal.view.RootViewSurfaceTaker;
+import com.android.internal.view.SurfaceCallbackHelper;
import java.io.FileDescriptor;
import java.io.IOException;
@@ -240,7 +241,7 @@
int mWidth;
int mHeight;
Rect mDirty;
- boolean mIsAnimating;
+ public boolean mIsAnimating;
private boolean mDragResizing;
private boolean mInvalidateRootRequested;
@@ -261,7 +262,7 @@
final Rect mTempRect; // used in the transaction to not thrash the heap.
final Rect mVisRect; // used to retrieve visible rect of focused view.
- boolean mTraversalScheduled;
+ public boolean mTraversalScheduled;
int mTraversalBarrier;
boolean mWillDrawSoon;
/** Set to true while in performTraversals for detecting when die(true) is called from internal
@@ -528,11 +529,17 @@
*/
public void notifyChildRebuilt() {
if (mView instanceof RootViewSurfaceTaker) {
+ if (mSurfaceHolderCallback != null) {
+ mSurfaceHolder.removeCallback(mSurfaceHolderCallback);
+ }
+
mSurfaceHolderCallback =
((RootViewSurfaceTaker)mView).willYouTakeTheSurface();
+
if (mSurfaceHolderCallback != null) {
mSurfaceHolder = new TakenSurfaceHolder();
mSurfaceHolder.setFormat(PixelFormat.UNKNOWN);
+ mSurfaceHolder.addCallback(mSurfaceHolderCallback);
} else {
mSurfaceHolder = null;
}
@@ -581,6 +588,7 @@
if (mSurfaceHolderCallback != null) {
mSurfaceHolder = new TakenSurfaceHolder();
mSurfaceHolder.setFormat(PixelFormat.UNKNOWN);
+ mSurfaceHolder.addCallback(mSurfaceHolderCallback);
}
}
@@ -1957,7 +1965,6 @@
mSurfaceHolder.ungetCallbacks();
mIsCreating = true;
- mSurfaceHolderCallback.surfaceCreated(mSurfaceHolder);
SurfaceHolder.Callback callbacks[] = mSurfaceHolder.getCallbacks();
if (callbacks != null) {
for (SurfaceHolder.Callback c : callbacks) {
@@ -1967,8 +1974,6 @@
surfaceChanged = true;
}
if (surfaceChanged || surfaceGenerationId != mSurface.getGenerationId()) {
- mSurfaceHolderCallback.surfaceChanged(mSurfaceHolder,
- lp.format, mWidth, mHeight);
SurfaceHolder.Callback callbacks[] = mSurfaceHolder.getCallbacks();
if (callbacks != null) {
for (SurfaceHolder.Callback c : callbacks) {
@@ -1981,7 +1986,6 @@
} else if (hadSurface) {
mSurfaceHolder.ungetCallbacks();
SurfaceHolder.Callback callbacks[] = mSurfaceHolder.getCallbacks();
- mSurfaceHolderCallback.surfaceDestroyed(mSurfaceHolder);
if (callbacks != null) {
for (SurfaceHolder.Callback c : callbacks) {
c.surfaceDestroyed(mSurfaceHolder);
@@ -2151,7 +2155,7 @@
+ mView.hasFocus());
if (mView != null) {
if (!mView.hasFocus()) {
- mView.requestFocus(View.FOCUS_FORWARD);
+ mView.restoreDefaultFocus(View.FOCUS_FORWARD);
if (DEBUG_INPUT_RESIZE) Log.v(mTag, "First: requested focused view="
+ mView.findFocus());
} else {
@@ -2646,21 +2650,18 @@
if (LOCAL_LOGV) {
Log.v(mTag, "FINISHED DRAWING: " + mWindowAttributes.getTitle());
}
+
if (mSurfaceHolder != null && mSurface.isValid()) {
- mSurfaceHolderCallback.surfaceRedrawNeeded(mSurfaceHolder);
+ SurfaceCallbackHelper sch = new SurfaceCallbackHelper(mWindowSession, mWindow);
SurfaceHolder.Callback callbacks[] = mSurfaceHolder.getCallbacks();
- if (callbacks != null) {
- for (SurfaceHolder.Callback c : callbacks) {
- if (c instanceof SurfaceHolder.Callback2) {
- ((SurfaceHolder.Callback2)c).surfaceRedrawNeeded(mSurfaceHolder);
- }
- }
+
+ sch.dispatchSurfaceRedrawNeededAsync(mSurfaceHolder, callbacks);
+ } else {
+ try {
+ mWindowSession.finishDrawing(mWindow);
+ } catch (RemoteException e) {
}
}
- try {
- mWindowSession.finishDrawing(mWindow);
- } catch (RemoteException e) {
- }
}
}
@@ -4395,14 +4396,14 @@
return false;
}
- private boolean performClusterNavigation(
- @FocusGroupType int focusGroupType, int direction) {
+ private boolean performKeyboardGroupNavigation(
+ @KeyboardNavigationGroupType int groupType, int direction) {
final View focused = mView.findFocus();
- final View cluster = focused != null
- ? focused.keyboardNavigationClusterSearch(focusGroupType, null, direction)
- : keyboardNavigationClusterSearch(focusGroupType, null, direction);
+ final View group = focused != null
+ ? focused.keyboardNavigationGroupSearch(groupType, null, direction)
+ : keyboardNavigationGroupSearch(groupType, null, direction);
- if (cluster != null && cluster.restoreLastFocus()) {
+ if (group != null && group.restoreDefaultFocus(View.FOCUS_DOWN)) {
return true;
}
@@ -4421,20 +4422,20 @@
return FINISH_NOT_HANDLED;
}
- int clusterNavigationDirection = 0;
- @FocusGroupType int focusGroupType = 0;
+ int groupNavigationDirection = 0;
+ @KeyboardNavigationGroupType int groupType = 0;
if (event.getAction() == KeyEvent.ACTION_DOWN && event.isCtrlPressed()) {
final int character =
event.getUnicodeChar(event.getMetaState() & ~KeyEvent.META_CTRL_MASK);
if (character == '+') {
- focusGroupType = FOCUS_GROUP_CLUSTER;
- clusterNavigationDirection = View.FOCUS_FORWARD;
+ groupType = KEYBOARD_NAVIGATION_GROUP_CLUSTER;
+ groupNavigationDirection = View.FOCUS_FORWARD;
}
if (character == '_') {
- focusGroupType = FOCUS_GROUP_CLUSTER;
- clusterNavigationDirection = View.FOCUS_BACKWARD;
+ groupType = KEYBOARD_NAVIGATION_GROUP_CLUSTER;
+ groupNavigationDirection = View.FOCUS_BACKWARD;
}
}
@@ -4442,13 +4443,13 @@
final int character =
event.getUnicodeChar(event.getMetaState() & ~KeyEvent.META_ALT_MASK);
if (character == '+') {
- focusGroupType = FOCUS_GROUP_SECTION;
- clusterNavigationDirection = View.FOCUS_FORWARD;
+ groupType = KEYBOARD_NAVIGATION_GROUP_SECTION;
+ groupNavigationDirection = View.FOCUS_FORWARD;
}
if (character == '_') {
- focusGroupType = FOCUS_GROUP_SECTION;
- clusterNavigationDirection = View.FOCUS_BACKWARD;
+ groupType = KEYBOARD_NAVIGATION_GROUP_SECTION;
+ groupNavigationDirection = View.FOCUS_BACKWARD;
}
}
@@ -4457,7 +4458,7 @@
&& event.isCtrlPressed()
&& event.getRepeatCount() == 0
&& !KeyEvent.isModifierKey(event.getKeyCode())
- && clusterNavigationDirection == 0) {
+ && groupNavigationDirection == 0) {
if (mView.dispatchKeyShortcutEvent(event)) {
return FINISH_HANDLED;
}
@@ -4476,8 +4477,8 @@
// Handle automatic focus changes.
if (event.getAction() == KeyEvent.ACTION_DOWN) {
- if (clusterNavigationDirection != 0) {
- if (performClusterNavigation(focusGroupType, clusterNavigationDirection)) {
+ if (groupNavigationDirection != 0) {
+ if (performKeyboardGroupNavigation(groupType, groupNavigationDirection)) {
return FINISH_HANDLED;
}
} else {
@@ -5908,11 +5909,11 @@
* {@inheritDoc}
*/
@Override
- public View keyboardNavigationClusterSearch(
- @FocusGroupType int focusGroupType, View currentCluster, int direction) {
+ public View keyboardNavigationGroupSearch(
+ @KeyboardNavigationGroupType int groupType, View currentGroup, int direction) {
checkThread();
- return FocusFinder.getInstance().findNextKeyboardNavigationCluster(focusGroupType,
- mView, currentCluster, direction);
+ return FocusFinder.getInstance().findNextKeyboardNavigationGroup(groupType,
+ mView, currentGroup, direction);
}
public void debug() {
diff --git a/core/java/android/view/ViewStructure.java b/core/java/android/view/ViewStructure.java
index e9ff9d0..839e11c 100644
--- a/core/java/android/view/ViewStructure.java
+++ b/core/java/android/view/ViewStructure.java
@@ -19,6 +19,10 @@
import android.graphics.Matrix;
import android.graphics.Rect;
import android.os.Bundle;
+import android.view.autofill.AutoFillId;
+import android.view.autofill.AutoFillType;
+import android.view.autofill.AutoFillValue;
+import android.view.autofill.VirtualViewDelegate;
/**
* Container for storing additional per-view data generated by {@link View#onProvideStructure
@@ -258,6 +262,12 @@
public abstract ViewStructure newChild(int index);
/**
+ * Like {@link #newChild(int)}, but providing a {@code virtualId} to the child so it can be
+ * auto-filled by {@link VirtualViewDelegate#autoFill(int, AutoFillValue)}.
+ */
+ public abstract ViewStructure newChild(int index, int virtualId);
+
+ /**
* Like {@link #newChild}, but allows the caller to asynchronously populate the returned
* child. It can transfer the returned {@link ViewStructure} to another thread for it
* to build its content (and children etc). Once done, some thread must call
@@ -268,6 +278,17 @@
public abstract ViewStructure asyncNewChild(int index);
/**
+ * Like {@link #asyncNewChild(int)}, but providing a {@code virtualId} to the child so it can be
+ * auto-filled by {@link VirtualViewDelegate#autoFill(int, AutoFillValue)}.
+ */
+ public abstract ViewStructure asyncNewChild(int index, int virtualId);
+
+ /**
+ * Sets the {@link AutoFillType} that can be used to auto-fill this node.
+ */
+ public abstract void setAutoFillType(AutoFillType info);
+
+ /**
* Call when done populating a {@link ViewStructure} returned by
* {@link #asyncNewChild}.
*/
@@ -277,5 +298,8 @@
public abstract Rect getTempRect();
/** @hide */
- public abstract void setAutoFillId(int autoFillId);
+ public abstract void setAutoFillId(int viewId);
+
+ /** @hide */
+ public abstract AutoFillId getAutoFillId();
}
diff --git a/core/java/android/view/WindowManager.aidl b/core/java/android/view/WindowManager.aidl
index 556dc72..1363f05 100644
--- a/core/java/android/view/WindowManager.aidl
+++ b/core/java/android/view/WindowManager.aidl
@@ -18,4 +18,5 @@
package android.view;
parcelable WindowManager.LayoutParams;
-
+/** @hide */
+parcelable WindowManager.TaskSnapshot;
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index aa7631d..e5a6ebd 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -22,6 +22,7 @@
import android.app.Presentation;
import android.content.Context;
import android.content.pm.ActivityInfo;
+import android.graphics.GraphicBuffer;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.os.IBinder;
@@ -1319,6 +1320,17 @@
public static final int PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE = 0x00040000;
/**
+ * Flag to indicate that this window is used as a task snapshot window. A task snapshot
+ * window is a starting window that gets shown with a screenshot from the previous state
+ * that is active until the app has drawn its first frame.
+ *
+ * <p>If this flag is set, SystemUI flags are ignored such that the real window behind can
+ * set the SystemUI flags.
+ * @hide
+ */
+ public static final int PRIVATE_FLAG_TASK_SNAPSHOT = 0x00080000;
+
+ /**
* Control flags that are private to the platform.
* @hide
*/
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index caa09cc..3748134 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -437,6 +437,20 @@
}
/**
+ * Holds the contents of a starting window. {@link #addSplashScreen} needs to wrap the
+ * contents of the starting window into an class implementing this interface, which then will be
+ * held by WM and released with {@link #remove} when no longer needed.
+ */
+ interface StartingSurface {
+
+ /**
+ * Removes the starting window surface. Do not hold the window manager lock when calling
+ * this method!
+ */
+ void remove();
+ }
+
+ /**
* Interface for calling back in to the window manager that is private
* between it and the policy.
*/
@@ -737,33 +751,12 @@
* @param overrideConfig override configuration to consider when generating
* context to for resources.
*
- * @return Optionally you can return the View that was used to create the
- * window, for easy removal in removeStartingWindow.
+ * @return The starting surface.
*
- * @see #removeStartingWindow
*/
- public View addStartingWindow(IBinder appToken, String packageName,
- int theme, CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel,
- int labelRes, int icon, int logo, int windowFlags, Configuration overrideConfig);
-
- /**
- * Called when the first window of an application has been displayed, while
- * {@link #addStartingWindow} has created a temporary initial window for
- * that application. You should at this point remove the window from the
- * window manager. This is called without the window manager locked so
- * that you can call back into it.
- *
- * <p>Note: due to the nature of these functions not being called with the
- * window manager locked, you must be prepared for this function to be
- * called multiple times and/or an initial time with a null View window
- * even if you previously returned one.
- *
- * @param appToken Token of the application that has started.
- * @param window Window View that was returned by createStartingWindow.
- *
- * @see #addStartingWindow
- */
- public void removeStartingWindow(IBinder appToken, View window);
+ public StartingSurface addSplashScreen(IBinder appToken, String packageName, int theme,
+ CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, int icon,
+ int logo, int windowFlags, Configuration overrideConfig);
/**
* Prepare for a window being added to the window manager. You can throw an
diff --git a/core/java/android/view/accessibility/AccessibilityCache.java b/core/java/android/view/accessibility/AccessibilityCache.java
index 9bc4bc7..db2ea48 100644
--- a/core/java/android/view/accessibility/AccessibilityCache.java
+++ b/core/java/android/view/accessibility/AccessibilityCache.java
@@ -370,6 +370,9 @@
mIsAllWindowsCached = false;
}
+ /**
+ * Clears nodes for the window with the given id
+ */
private void clearNodesForWindowLocked(int windowId) {
if (DEBUG) {
Log.i(LOG_TAG, "clearNodesForWindowLocked(" + windowId + ")");
diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java
index 13d5b85..7f940f1 100644
--- a/core/java/android/view/accessibility/AccessibilityManager.java
+++ b/core/java/android/view/accessibility/AccessibilityManager.java
@@ -16,6 +16,8 @@
package android.view.accessibility;
+import static android.accessibilityservice.AccessibilityServiceInfo.FLAG_ENABLE_ACCESSIBILITY_VOLUME;
+
import android.Manifest;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.annotation.NonNull;
@@ -118,6 +120,8 @@
private final CopyOnWriteArrayList<HighTextContrastChangeListener>
mHighTextContrastStateChangeListeners = new CopyOnWriteArrayList<>();
+ private final CopyOnWriteArrayList<AccessibilityServicesStateChangeListener>
+ mServicesStateChangeListeners = new CopyOnWriteArrayList<>();
/**
* Listener for the system accessibility state. To listen for changes to the
* accessibility state on the device, implement this interface and register
@@ -130,7 +134,7 @@
*
* @param enabled Whether accessibility is enabled.
*/
- public void onAccessibilityStateChanged(boolean enabled);
+ void onAccessibilityStateChanged(boolean enabled);
}
/**
@@ -146,7 +150,20 @@
*
* @param enabled Whether touch exploration is enabled.
*/
- public void onTouchExplorationStateChanged(boolean enabled);
+ void onTouchExplorationStateChanged(boolean enabled);
+ }
+
+ /**
+ * Listener for changes to the state of accessibility services. Changes include services being
+ * enabled or disabled, or changes to the {@link AccessibilityServiceInfo} of a running service.
+ * {@see #addAccessibilityServicesStateChangeListener}.
+ */
+ public interface AccessibilityServicesStateChangeListener {
+
+ /**
+ * Called when the state of accessibility services changes.
+ */
+ void onAccessibilityServicesStateChanged();
}
/**
@@ -164,11 +181,12 @@
*
* @param enabled Whether high text contrast is enabled.
*/
- public void onHighTextContrastStateChanged(boolean enabled);
+ void onHighTextContrastStateChanged(boolean enabled);
}
private final IAccessibilityManagerClient.Stub mClient =
new IAccessibilityManagerClient.Stub() {
+ @Override
public void setState(int state) {
// We do not want to change this immediately as the application may
// have already checked that accessibility is on and fired an event,
@@ -178,6 +196,11 @@
// events when accessibility is off.
mHandler.obtainMessage(MyHandler.MSG_SET_STATE, state, 0).sendToTarget();
}
+
+ @Override
+ public void notifyServicesStateChanged() {
+ mHandler.obtainMessage(MyHandler.MSG_NOTIFY_SERVICES_STATE_CHANGED).sendToTarget();
+ }
};
/**
@@ -519,6 +542,30 @@
}
/**
+ * Registers a {@link AccessibilityServicesStateChangeListener}.
+ *
+ * @param listener The listener.
+ * @return True if successfully registered.
+ */
+ public boolean addAccessibilityServicesStateChangeListener(
+ @NonNull AccessibilityServicesStateChangeListener listener) {
+ // Final CopyOnWriteArrayList - no lock needed.
+ return mServicesStateChangeListeners.add(listener);
+ }
+
+ /**
+ * Unregisters a {@link AccessibilityServicesStateChangeListener}.
+ *
+ * @param listener The listener.
+ * @return True if successfully unregistered.
+ */
+ public boolean removeAccessibilityServicesStateChangeListener(
+ @NonNull AccessibilityServicesStateChangeListener listener) {
+ // Final CopyOnWriteArrayList - no lock needed.
+ return mServicesStateChangeListeners.remove(listener);
+ }
+
+ /**
* Registers a {@link HighTextContrastChangeListener} for changes in
* the global high text contrast state of the system.
*
@@ -548,6 +595,24 @@
}
/**
+ * Check if the accessibility volume stream is active.
+ *
+ * @return True if accessibility volume is active (i.e. some service has requested it). False
+ * otherwise.
+ * @hide
+ */
+ public boolean isAccessibilityVolumeStreamActive() {
+ List<AccessibilityServiceInfo> serviceInfos =
+ getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_ALL_MASK);
+ for (int i = 0; i < serviceInfos.size(); i++) {
+ if ((serviceInfos.get(i).flags & FLAG_ENABLE_ACCESSIBILITY_VOLUME) != 0) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
* Sets the current state and notifies listeners, if necessary.
*
* @param stateFlags The state flags.
@@ -662,7 +727,7 @@
isEnabled = mIsEnabled;
}
// Listeners are a final CopyOnWriteArrayList, hence no lock needed.
- for (AccessibilityStateChangeListener listener :mAccessibilityStateChangeListeners) {
+ for (AccessibilityStateChangeListener listener : mAccessibilityStateChangeListeners) {
listener.onAccessibilityStateChanged(isEnabled);
}
}
@@ -695,11 +760,22 @@
}
}
+ /**
+ * Notifies the registered {@link AccessibilityServicesStateChangeListener}s.
+ */
+ private void handleNotifyServicesStateChanged() {
+ // Listeners are a final CopyOnWriteArrayList, hence no lock needed.
+ for (AccessibilityServicesStateChangeListener listener : mServicesStateChangeListeners) {
+ listener.onAccessibilityServicesStateChanged();
+ }
+ }
+
private final class MyHandler extends Handler {
public static final int MSG_NOTIFY_ACCESSIBILITY_STATE_CHANGED = 1;
public static final int MSG_NOTIFY_EXPLORATION_STATE_CHANGED = 2;
public static final int MSG_NOTIFY_HIGH_TEXT_CONTRAST_STATE_CHANGED = 3;
public static final int MSG_SET_STATE = 4;
+ public static final int MSG_NOTIFY_SERVICES_STATE_CHANGED = 5;
public MyHandler(Looper looper) {
super(looper, null, false);
@@ -720,6 +796,10 @@
handleNotifyHighTextContrastStateChanged();
} break;
+ case MSG_NOTIFY_SERVICES_STATE_CHANGED: {
+ handleNotifyServicesStateChanged();
+ } break;
+
case MSG_SET_STATE: {
// See comment at mClient
final int state = message.arg1;
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
index 9127861..91468da 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -25,7 +25,13 @@
import android.os.Parcel;
import android.os.Parcelable;
import android.text.InputType;
+import android.text.Spannable;
+import android.text.Spanned;
import android.text.TextUtils;
+import android.text.style.AccessibilityClickableSpan;
+import android.text.style.AccessibilityURLSpan;
+import android.text.style.ClickableSpan;
+import android.text.style.URLSpan;
import android.util.ArraySet;
import android.util.LongArray;
import android.util.Pools.SynchronizedPool;
@@ -464,6 +470,14 @@
public static final String ACTION_ARGUMENT_PROGRESS_VALUE =
"android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
+ /**
+ * Argument to pass the {@link AccessibilityClickableSpan}.
+ * For use with R.id.accessibilityActionClickOnClickableSpan
+ * @hide
+ */
+ public static final String ACTION_ARGUMENT_ACCESSIBLE_CLICKABLE_SPAN =
+ "android.view.accessibility.action.ACTION_ARGUMENT_ACCESSIBLE_CLICKABLE_SPAN";
+
// Focus types
/**
@@ -628,6 +642,8 @@
private CharSequence mPackageName;
private CharSequence mClassName;
+ // Hidden, unparceled value used to hold the original value passed to setText
+ private CharSequence mOriginalText;
private CharSequence mText;
private CharSequence mError;
private CharSequence mContentDescription;
@@ -2213,14 +2229,49 @@
/**
* Gets the text of this node.
+ * <p>
+ * <strong>Note:</strong> If the text contains {@link ClickableSpan}s or {@link URLSpan}s,
+ * these spans will have been replaced with ones whose {@link ClickableSpan#onClick(View)}
+ * can be called from an {@link AccessibilityService}. When called from a service, the
+ * {@link View} argument is ignored and the corresponding span will be found on the view that
+ * this {@code AccessibilityNodeInfo} represents and called with that view as its argument.
+ * <p>
+ * This treatment of {@link ClickableSpan}s means that the text returned from this method may
+ * different slightly one passed to {@link #setText(CharSequence)}, although they will be
+ * equivalent according to {@link TextUtils#equals(CharSequence, CharSequence)}. The
+ * {@link ClickableSpan#onClick(View)} of any spans, however, will generally not work outside
+ * of an accessibility service.
+ * </p>
*
* @return The text.
*/
public CharSequence getText() {
+ // Attach this node to any spans that need it
+ if (mText instanceof Spanned) {
+ Spanned spanned = (Spanned) mText;
+ AccessibilityClickableSpan[] clickableSpans =
+ spanned.getSpans(0, mText.length(), AccessibilityClickableSpan.class);
+ for (int i = 0; i < clickableSpans.length; i++) {
+ clickableSpans[i].setAccessibilityNodeInfo(this);
+ }
+ AccessibilityURLSpan[] urlSpans =
+ spanned.getSpans(0, mText.length(), AccessibilityURLSpan.class);
+ for (int i = 0; i < urlSpans.length; i++) {
+ urlSpans[i].setAccessibilityNodeInfo(this);
+ }
+ }
return mText;
}
/**
+ * Get the text passed to setText before any changes to the spans.
+ * @hide
+ */
+ public CharSequence getOriginalText() {
+ return mOriginalText;
+ }
+
+ /**
* Sets the text of this node.
* <p>
* <strong>Note:</strong> Cannot be called from an
@@ -2234,6 +2285,34 @@
*/
public void setText(CharSequence text) {
enforceNotSealed();
+ mOriginalText = text;
+ // Replace any ClickableSpans in mText with placeholders
+ if (text instanceof Spanned) {
+ ClickableSpan[] spans =
+ ((Spanned) text).getSpans(0, text.length(), ClickableSpan.class);
+ if (spans.length > 0) {
+ Spannable spannable = Spannable.Factory.getInstance().newSpannable(text);
+ for (int i = 0; i < spans.length; i++) {
+ ClickableSpan span = spans[i];
+ if ((span instanceof AccessibilityClickableSpan)
+ || (span instanceof AccessibilityURLSpan)) {
+ // We've already done enough
+ break;
+ }
+ int spanToReplaceStart = spannable.getSpanStart(span);
+ int spanToReplaceEnd = spannable.getSpanEnd(span);
+ int spanToReplaceFlags = spannable.getSpanFlags(span);
+ spannable.removeSpan(span);
+ ClickableSpan replacementSpan = (span instanceof URLSpan)
+ ? new AccessibilityURLSpan((URLSpan) span)
+ : new AccessibilityClickableSpan(span.getId());
+ spannable.setSpan(replacementSpan, spanToReplaceStart, spanToReplaceEnd,
+ spanToReplaceFlags);
+ }
+ mText = spannable;
+ return;
+ }
+ }
mText = (text == null) ? null : text.subSequence(0, text.length());
}
diff --git a/core/java/android/view/accessibility/IAccessibilityManagerClient.aidl b/core/java/android/view/accessibility/IAccessibilityManagerClient.aidl
index 5e7e813..045ac91 100644
--- a/core/java/android/view/accessibility/IAccessibilityManagerClient.aidl
+++ b/core/java/android/view/accessibility/IAccessibilityManagerClient.aidl
@@ -25,4 +25,5 @@
oneway interface IAccessibilityManagerClient {
void setState(int stateFlags);
+ void notifyServicesStateChanged();
}
diff --git a/core/java/android/view/animation/AnimationSet.java b/core/java/android/view/animation/AnimationSet.java
index 09d4dfc..767024e 100644
--- a/core/java/android/view/animation/AnimationSet.java
+++ b/core/java/android/view/animation/AnimationSet.java
@@ -237,7 +237,7 @@
mDuration = a.getStartOffset() + a.getDuration();
mLastEnd = mStartOffset + mDuration;
} else {
- mLastEnd = Math.max(mLastEnd, a.getStartOffset() + a.getDuration());
+ mLastEnd = Math.max(mLastEnd, mStartOffset + a.getStartOffset() + a.getDuration());
mDuration = mLastEnd - mStartOffset;
}
}
diff --git a/core/java/android/view/GraphicBuffer.aidl b/core/java/android/view/autofill/AutoFillId.aidl
similarity index 75%
copy from core/java/android/view/GraphicBuffer.aidl
copy to core/java/android/view/autofill/AutoFillId.aidl
index 6dc6bed..56f0338 100644
--- a/core/java/android/view/GraphicBuffer.aidl
+++ b/core/java/android/view/autofill/AutoFillId.aidl
@@ -1,11 +1,11 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
+/**
+ * Copyright (c) 2017, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * 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,
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-package android.view;
+package android.view.autofill;
-parcelable GraphicBuffer;
+parcelable AutoFillId;
\ No newline at end of file
diff --git a/core/java/android/view/autofill/AutoFillId.java b/core/java/android/view/autofill/AutoFillId.java
new file mode 100644
index 0000000..b7b694d
--- /dev/null
+++ b/core/java/android/view/autofill/AutoFillId.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2016 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.view.autofill;
+
+import static android.view.autofill.Helper.DEBUG;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * A unique identifier for an auto-fill node inside an {@link android.app.Activity}.
+ */
+public final class AutoFillId implements Parcelable {
+
+ private int mViewId;
+ private boolean mVirtual;
+ private int mVirtualId;
+
+ /** @hide */
+ public AutoFillId(int id) {
+ mVirtual = false;
+ mViewId = id;
+ }
+
+ /** @hide */
+ public AutoFillId(AutoFillId parent, int virtualChildId) {
+ mVirtual = true;
+ mViewId = parent.mViewId;
+ mVirtualId = virtualChildId;
+ }
+
+ /** @hide */
+ public int getViewId() {
+ return mViewId;
+ }
+
+ /** @hide */
+ public int getVirtualChildId() {
+ return mVirtualId;
+ }
+
+ /** @hide */
+ public boolean isVirtual() {
+ return mVirtual;
+ }
+
+ /////////////////////////////////
+ // Object "contract" methods. //
+ /////////////////////////////////
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + mViewId;
+ result = prime * result + mVirtualId;
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) return true;
+ if (obj == null) return false;
+ if (getClass() != obj.getClass()) return false;
+ final AutoFillId other = (AutoFillId) obj;
+ if (mViewId != other.mViewId) return false;
+ if (mVirtualId != other.mVirtualId) return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ if (!DEBUG) return super.toString();
+
+ final StringBuilder builder = new StringBuilder("FieldId [viewId=").append(mViewId);
+ if (mVirtual) {
+ builder.append(", virtualId=").append(mVirtualId);
+ }
+ return builder.append(']').toString();
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel parcel, int flags) {
+ parcel.writeInt(mViewId);
+ parcel.writeInt(mVirtual ? 1 : 0);
+ parcel.writeInt(mVirtualId);
+ }
+
+ private AutoFillId(Parcel parcel) {
+ mViewId = parcel.readInt();
+ mVirtual = parcel.readInt() == 1;
+ mVirtualId = parcel.readInt();
+ }
+
+ public static final Parcelable.Creator<AutoFillId> CREATOR =
+ new Parcelable.Creator<AutoFillId>() {
+ @Override
+ public AutoFillId createFromParcel(Parcel source) {
+ return new AutoFillId(source);
+ }
+
+ @Override
+ public AutoFillId[] newArray(int size) {
+ return new AutoFillId[size];
+ }
+ };
+}
diff --git a/core/java/android/view/GraphicBuffer.aidl b/core/java/android/view/autofill/AutoFillType.aidl
similarity index 75%
copy from core/java/android/view/GraphicBuffer.aidl
copy to core/java/android/view/autofill/AutoFillType.aidl
index 6dc6bed..a63d7c5 100644
--- a/core/java/android/view/GraphicBuffer.aidl
+++ b/core/java/android/view/autofill/AutoFillType.aidl
@@ -1,11 +1,11 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
+/**
+ * Copyright (c) 2016, 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
+ * 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,
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-package android.view;
+package android.view.autofill;
-parcelable GraphicBuffer;
+parcelable AutoFillType;
\ No newline at end of file
diff --git a/core/java/android/view/autofill/AutoFillType.java b/core/java/android/view/autofill/AutoFillType.java
new file mode 100644
index 0000000..017f7f8
--- /dev/null
+++ b/core/java/android/view/autofill/AutoFillType.java
@@ -0,0 +1,211 @@
+/*
+ * Copyright (C) 2016 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.view.autofill;
+
+import static android.view.autofill.Helper.DEBUG;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.view.View;
+import android.widget.TextView;
+
+/**
+ * Defines the type of a object that can be used to auto-fill a {@link View} so the
+ * {@link android.service.autofill.AutoFillService} can use the proper {@link AutoFillValue} to
+ * fill it.
+ *
+ * <p>Some {@link AutoFillType}s can have an optional {@code sub-type}: the
+ * main {@code type} defines the view's UI control category (like a text field), while the optional
+ * {@code sub-type} define its semantics (like a postal address).
+ */
+public final class AutoFillType implements Parcelable {
+
+ // Cached instance for types that don't have subtype; it uses the "lazy initialization holder
+ // class idiom" (Effective Java, Item 71) to avoid memory utilization when auto-fill is not
+ // enabled.
+ private static class DefaultTypesHolder {
+ static final AutoFillType TOGGLE = new AutoFillType(TYPE_TOGGLE, 0);
+ static final AutoFillType LIST = new AutoFillType(TYPE_LIST, 0);
+ }
+
+ private static final int TYPE_TEXT = 1;
+ private static final int TYPE_TOGGLE = 2;
+ // TODO(b/33197203): make sure it works with Spinners and/or add a new type for them
+ // (since they're often used for credit card selection)
+ private static final int TYPE_LIST = 3;
+
+ // TODO(b/33197203): add others, like date picker? That would be trick, because they're set as:
+ // updateDate(int year, int month, int dayOfMonth)
+ // So, we would have to either use a long representing the Date.time(), or a custom long
+ // representing:
+ // year * 10000 + month * 100 + day
+ // Then a custom getDatePickerValue(Bundle) that returns an immutable object with these 3 fields
+
+ private final int mType;
+ private final int mSubType;
+
+ private AutoFillType(int type, int subType) {
+ mType = type;
+ mSubType = subType;
+ }
+
+ /**
+ * Checks if this is a type for a text field, which is filled by a {@link CharSequence}.
+ *
+ * <p>{@link AutoFillValue} instances for auto-filling a {@link View} can be obtained through
+ * {@link AutoFillValue#forText(CharSequence)}, and the value of a bundle passed to auto-fill a
+ * {@link View} can be fetched through {@link AutoFillValue#getTextValue()}.
+ *
+ * <p>Sub-type for this type is the value defined by {@link TextView#getInputType()}.
+ */
+ public boolean isText() {
+ return mType == TYPE_TEXT;
+ }
+
+ /**
+ * Checks if this is a a type for a togglable field, which is filled by a {@code boolean}.
+ *
+ * <p>{@link AutoFillValue} instances for auto-filling a {@link View} can be obtained through
+ * {@link AutoFillValue#forToggle(boolean)}, and the value of a bundle passed to auto-fill a
+ * {@link View} can be fetched through {@link AutoFillValue#getToggleValue()}.
+ *
+ * <p>This type has no sub-types.
+ */
+ public boolean isToggle() {
+ return mType == TYPE_TOGGLE;
+ }
+
+ /**
+ * Checks if this is a type for a selection list field, which is filled by a {@code integer}
+ * representing the element index inside the list (starting at {@code 0}.
+ *
+ * <p>{@link AutoFillValue} instances for auto-filling a {@link View} can be obtained through
+ * {@link AutoFillValue#forList(int)}, and the value of a bundle passed to auto-fill a
+ * {@link View} can be fetched through {@link AutoFillValue#getListValue()}.
+ *
+ * <p>This type has no sub-types.
+ */
+ public boolean isList() {
+ return mType == TYPE_LIST;
+ }
+
+
+ /**
+ * Gets the optional sub-type, representing the {@link View}'s semantic.
+ *
+ * @return {@code 0} if type does not support sub-types.
+ */
+ public int getSubType() {
+ return mSubType;
+ }
+
+ /////////////////////////////////////
+ // Object "contract" methods. //
+ /////////////////////////////////////
+
+ @Override
+ public String toString() {
+ if (!DEBUG) return super.toString();
+
+ return "AutoFillType [type=" + mType + ", subType=" + mSubType + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + mSubType;
+ result = prime * result + mType;
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) return true;
+ if (obj == null) return false;
+ if (getClass() != obj.getClass()) return false;
+ final AutoFillType other = (AutoFillType) obj;
+ if (mSubType != other.mSubType) return false;
+ if (mType != other.mType) return false;
+ return true;
+ }
+
+ /////////////////////////////////////
+ // Parcelable "contract" methods. //
+ /////////////////////////////////////
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel parcel, int flags) {
+ parcel.writeInt(mType);
+ parcel.writeInt(mSubType);
+ }
+
+ private AutoFillType(Parcel parcel) {
+ mType = parcel.readInt();
+ mSubType = parcel.readInt();
+ }
+
+ public static final Parcelable.Creator<AutoFillType> CREATOR =
+ new Parcelable.Creator<AutoFillType>() {
+ @Override
+ public AutoFillType createFromParcel(Parcel source) {
+ return new AutoFillType(source);
+ }
+
+ @Override
+ public AutoFillType[] newArray(int size) {
+ return new AutoFillType[size];
+ }
+ };
+
+ ////////////////////
+ // Factory methods //
+ ////////////////////
+
+ /**
+ * Creates a text field type, which is filled by a {@link CharSequence}.
+ *
+ * <p>See {@link #isText()} for more info.
+ */
+ public static AutoFillType forText(int inputType) {
+ return new AutoFillType(TYPE_TEXT, inputType);
+ }
+
+ /**
+ * Creates a type that can be toggled which is filled by a {@code boolean}.
+ *
+ * <p>See {@link #isToggle()} for more info.
+ */
+ public static AutoFillType forToggle() {
+ return DefaultTypesHolder.TOGGLE;
+ }
+
+ /**
+ * Creates a selection list, which is filled by a {@code integer} representing the element index
+ * inside the list (starting at {@code 0}.
+ *
+ * <p>See {@link #isList()} for more info.
+ */
+ public static AutoFillType forList() {
+ return DefaultTypesHolder.LIST;
+ }
+}
diff --git a/core/java/android/view/GraphicBuffer.aidl b/core/java/android/view/autofill/AutoFillValue.aidl
similarity index 75%
copy from core/java/android/view/GraphicBuffer.aidl
copy to core/java/android/view/autofill/AutoFillValue.aidl
index 6dc6bed..3b284b9 100644
--- a/core/java/android/view/GraphicBuffer.aidl
+++ b/core/java/android/view/autofill/AutoFillValue.aidl
@@ -1,11 +1,11 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
+/**
+ * Copyright (c) 2016, 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
+ * 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,
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-package android.view;
+package android.view.autofill;
-parcelable GraphicBuffer;
+parcelable AutoFillValue;
\ No newline at end of file
diff --git a/core/java/android/view/autofill/AutoFillValue.java b/core/java/android/view/autofill/AutoFillValue.java
new file mode 100644
index 0000000..c39f26b
--- /dev/null
+++ b/core/java/android/view/autofill/AutoFillValue.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.view.autofill;
+
+import static android.view.autofill.Helper.DEBUG;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.view.View;
+
+/**
+ * Abstracts how a {@link View} can be auto-filled by an
+ * {@link android.service.autofill.AutoFillService}.
+ *
+ * <p>Each {@link AutoFillValue} has a {@code type} and optionally a {@code sub-type}: the
+ * {@code type} defines the view's UI control category (like a text field), while the optional
+ * {@code sub-type} define its semantics (like a postal address).
+ */
+public final class AutoFillValue implements Parcelable {
+
+ private final CharSequence mText;
+ private final int mListIndex;
+ private final boolean mToggle;
+
+ private AutoFillValue(CharSequence text, int listIndex, boolean toggle) {
+ mText = text;
+ mListIndex = listIndex;
+ mToggle = toggle;
+ }
+
+ /**
+ * Gets the value to auto-fill a text field.
+ *
+ * <p>See {@link AutoFillType#isText()} for more info.
+ */
+ public CharSequence getTextValue() {
+ return mText;
+ }
+
+ /**
+ * Gets the value to auto-fill a toggable field.
+ *
+ * <p>See {@link AutoFillType#isToggle()} for more info.
+ */
+ public boolean getToggleValue() {
+ return mToggle;
+ }
+
+ /**
+ * Gets the value to auto-fill a selection list field.
+ *
+ * <p>See {@link AutoFillType#isList()} for more info.
+ */
+ public int getListValue() {
+ return mListIndex;
+ }
+
+ /////////////////////////////////////
+ // Object "contract" methods. //
+ /////////////////////////////////////
+
+ @Override
+ public String toString() {
+ if (!DEBUG) return super.toString();
+
+ return "AutoFillValue[text=" + mText + ", listIndex=" + mListIndex + ", toggle=" + mToggle
+ + "]";
+ }
+
+ /////////////////////////////////////
+ // Parcelable "contract" methods. //
+ /////////////////////////////////////
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel parcel, int flags) {
+ parcel.writeCharSequence(mText);
+ parcel.writeInt(mListIndex);
+ parcel.writeInt(mToggle ? 1 : 0);
+ }
+
+ private AutoFillValue(Parcel parcel) {
+ mText = parcel.readCharSequence();
+ mListIndex = parcel.readInt();
+ mToggle = parcel.readInt() == 1;
+ }
+
+ public static final Parcelable.Creator<AutoFillValue> CREATOR =
+ new Parcelable.Creator<AutoFillValue>() {
+ @Override
+ public AutoFillValue createFromParcel(Parcel source) {
+ return new AutoFillValue(source);
+ }
+
+ @Override
+ public AutoFillValue[] newArray(int size) {
+ return new AutoFillValue[size];
+ }
+ };
+
+ ////////////////////
+ // Factory methods //
+ ////////////////////
+
+ // TODO(b/33197203): add unit tests for each supported type (new / get should return same value)
+ /**
+ * Creates a new {@link AutoFillValue} to auto-fill a text field.
+ *
+ * <p>See {@link AutoFillType#isText()} for more info.
+ */
+ public static AutoFillValue forText(CharSequence value) {
+ return new AutoFillValue(value, 0, false);
+ }
+
+ /**
+ * Creates a new {@link AutoFillValue} to auto-fill a toggable field.
+ *
+ * <p>See {@link AutoFillType#isToggle()} for more info.
+ */
+ public static AutoFillValue forToggle(boolean value) {
+ return new AutoFillValue(null, 0, value);
+ }
+
+ /**
+ * Creates a new {@link AutoFillValue} to auto-fill a selection list field.
+ *
+ * <p>See {@link AutoFillType#isList()} for more info.
+ */
+ public static AutoFillValue forList(int value) {
+ return new AutoFillValue(null, value, false);
+ }
+}
diff --git a/core/java/android/view/GraphicBuffer.aidl b/core/java/android/view/autofill/Dataset.aidl
similarity index 75%
copy from core/java/android/view/GraphicBuffer.aidl
copy to core/java/android/view/autofill/Dataset.aidl
index 6dc6bed..2a8e67c 100644
--- a/core/java/android/view/GraphicBuffer.aidl
+++ b/core/java/android/view/autofill/Dataset.aidl
@@ -1,11 +1,11 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
+/**
+ * Copyright (c) 2016, 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
+ * 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,
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-package android.view;
+package android.view.autofill;
-parcelable GraphicBuffer;
+parcelable Dataset;
\ No newline at end of file
diff --git a/core/java/android/view/autofill/Dataset.java b/core/java/android/view/autofill/Dataset.java
new file mode 100644
index 0000000..a73eb774
--- /dev/null
+++ b/core/java/android/view/autofill/Dataset.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2016 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.view.autofill;
+
+import static android.view.autofill.Helper.DEBUG;
+import static android.view.autofill.Helper.append;
+
+import android.app.Activity;
+import android.app.assist.AssistStructure.ViewNode;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.service.autofill.AutoFillService;
+
+import com.android.internal.util.Preconditions;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * A set of data that can be used to auto-fill an {@link Activity}.
+ *
+ * <p>It contains:
+ *
+ * <ol>
+ * <li>A name used to identify the dataset in the UI.
+ * <li>A list of id/value pairs for the fields that can be auto-filled.
+ * <li>An optional {@link Bundle} with extras (used only by the service creating it).
+ * </ol>
+ *
+ * See {@link FillResponse} for examples.
+ */
+public final class Dataset implements Parcelable {
+
+ private final CharSequence mName;
+ private final ArrayList<DatasetField> mFields;
+ private final Bundle mExtras;
+
+ private Dataset(Dataset.Builder builder) {
+ mName = builder.mName;
+ // TODO(b/33197203): make an immutable copy of mFields?
+ mFields = builder.mFields;
+ mExtras = builder.mExtras;
+ }
+
+ /** @hide */
+ public CharSequence getName() {
+ return mName;
+ }
+
+ /** @hide */
+ public List<DatasetField> getFields() {
+ return mFields;
+ }
+
+ /** @hide */
+ public Bundle getExtras() {
+ return mExtras;
+ }
+
+ @Override
+ public String toString() {
+ if (!DEBUG) return super.toString();
+
+ final StringBuilder builder = new StringBuilder("Dataset [name=").append(mName)
+ .append(", fields=").append(mFields).append(", extras=");
+ append(builder, mExtras);
+ return builder.append(']').toString();
+ }
+
+ /**
+ * A builder for {@link Dataset} objects.
+ */
+ public static final class Builder {
+ private CharSequence mName;
+ private final ArrayList<DatasetField> mFields = new ArrayList<>();
+ private Bundle mExtras;
+
+ /**
+ * Creates a new builder.
+ *
+ * @param name Name used to identify the dataset in the UI. Typically it's the same value as
+ * the first field in the dataset (like username or email address) or an user-provided name
+ * (like "My Work Address").
+ */
+ public Builder(CharSequence name) {
+ mName = Preconditions.checkStringNotEmpty(name, "name cannot be empty or null");
+ }
+
+ /**
+ * Sets the value of a field.
+ *
+ * @param id id returned by {@link ViewNode#getAutoFillId()}.
+ * @param value value to be auto filled.
+ */
+ public Dataset.Builder setValue(AutoFillId id, AutoFillValue value) {
+ putField(new DatasetField(id, value));
+ return this;
+ }
+
+ /**
+ * Creates a new {@link Dataset} instance.
+ */
+ public Dataset build() {
+ return new Dataset(this);
+ }
+
+ /**
+ * Sets a {@link Bundle} that will be passed to subsequent calls to {@link AutoFillService}
+ * methods such as
+ * {@link AutoFillService#onSaveRequest(android.app.assist.AssistStructure, Bundle,
+ * android.os.CancellationSignal, android.service.autofill.SaveCallback)}, using
+ * {@link AutoFillService#EXTRA_DATASET_EXTRAS} as the key.
+ *
+ * <p>It can be used to keep service state in between calls.
+ */
+ public Builder setExtras(Bundle extras) {
+ mExtras = Objects.requireNonNull(extras, "extras cannot be null");
+ return this;
+ }
+
+ /**
+ * Emulates {@code Map.put()} by adding a new field to the list if its id is not the yet,
+ * or replacing the existing one.
+ */
+ private void putField(DatasetField field) {
+ // TODO(b/33197203): check if already exists and replaces it if so
+ mFields.add(field);
+ }
+ }
+
+ /////////////////////////////////////
+ // Parcelable "contract" methods. //
+ /////////////////////////////////////
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel parcel, int flags) {
+ parcel.writeCharSequence(mName);
+ parcel.writeList(mFields);
+ parcel.writeBundle(mExtras);
+ }
+
+ @SuppressWarnings("unchecked")
+ private Dataset(Parcel parcel) {
+ mName = parcel.readCharSequence();
+ mFields = parcel.readArrayList(null);
+ mExtras = parcel.readBundle();
+ }
+
+ public static final Parcelable.Creator<Dataset> CREATOR = new Parcelable.Creator<Dataset>() {
+ @Override
+ public Dataset createFromParcel(Parcel source) {
+ return new Dataset(source);
+ }
+
+ @Override
+ public Dataset[] newArray(int size) {
+ return new Dataset[size];
+ }
+ };
+}
diff --git a/core/java/android/view/autofill/DatasetField.java b/core/java/android/view/autofill/DatasetField.java
new file mode 100644
index 0000000..c6b92ac
--- /dev/null
+++ b/core/java/android/view/autofill/DatasetField.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2016 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.view.autofill;
+
+import static android.view.autofill.Helper.DEBUG;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/** @hide */
+public final class DatasetField implements Parcelable {
+
+ private final AutoFillId mId;
+ private final AutoFillValue mValue;
+
+ DatasetField(AutoFillId id, AutoFillValue value) {
+ mId = id;
+ mValue = value;
+ }
+
+ public AutoFillId getId() {
+ return mId;
+ }
+
+ public AutoFillValue getValue() {
+ return mValue;
+ }
+
+ /////////////////////////////////
+ // Object "contract" methods. //
+ /////////////////////////////////
+
+ @Override
+ public String toString() {
+ if (!DEBUG) return super.toString();
+
+ return "DatasetField [id=" + mId + ", value=" + mValue + "]";
+ }
+
+ /////////////////////////////////////
+ // Parcelable "contract" methods. //
+ /////////////////////////////////////
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel parcel, int flags) {
+ parcel.writeParcelable(mId, 0);
+ parcel.writeParcelable(mValue, 0);
+ }
+
+ private DatasetField(Parcel parcel) {
+ mId = parcel.readParcelable(null);
+ mValue = parcel.readParcelable(null);
+ }
+
+ public static final Parcelable.Creator<DatasetField> CREATOR =
+ new Parcelable.Creator<DatasetField>() {
+ @Override
+ public DatasetField createFromParcel(Parcel source) {
+ return new DatasetField(source);
+ }
+
+ @Override
+ public DatasetField[] newArray(int size) {
+ return new DatasetField[size];
+ }
+ };
+}
diff --git a/core/java/android/view/GraphicBuffer.aidl b/core/java/android/view/autofill/FieldId.aidl
similarity index 75%
copy from core/java/android/view/GraphicBuffer.aidl
copy to core/java/android/view/autofill/FieldId.aidl
index 6dc6bed..35af645 100644
--- a/core/java/android/view/GraphicBuffer.aidl
+++ b/core/java/android/view/autofill/FieldId.aidl
@@ -1,11 +1,11 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
+/**
+ * Copyright (c) 2016, 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
+ * 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,
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-package android.view;
+package android.view.autofill;
-parcelable GraphicBuffer;
+parcelable FieldId;
\ No newline at end of file
diff --git a/core/java/android/view/GraphicBuffer.aidl b/core/java/android/view/autofill/FillResponse.aidl
similarity index 75%
copy from core/java/android/view/GraphicBuffer.aidl
copy to core/java/android/view/autofill/FillResponse.aidl
index 6dc6bed..b018f15 100644
--- a/core/java/android/view/GraphicBuffer.aidl
+++ b/core/java/android/view/autofill/FillResponse.aidl
@@ -1,11 +1,11 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
+/**
+ * Copyright (c) 2016, 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
+ * 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,
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-package android.view;
+package android.view.autofill;
-parcelable GraphicBuffer;
+parcelable FillResponse;
\ No newline at end of file
diff --git a/core/java/android/view/autofill/FillResponse.java b/core/java/android/view/autofill/FillResponse.java
new file mode 100644
index 0000000..3a14767
--- /dev/null
+++ b/core/java/android/view/autofill/FillResponse.java
@@ -0,0 +1,288 @@
+/*
+ * Copyright (C) 2016 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.view.autofill;
+
+import static android.view.autofill.Helper.DEBUG;
+import static android.view.autofill.Helper.append;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.service.autofill.AutoFillService;
+
+import com.android.internal.util.Preconditions;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+
+/**
+ * Response for a
+ * {@link AutoFillService#onFillRequest(android.app.assist.AssistStructure, Bundle,
+ * android.os.CancellationSignal, android.service.autofill.FillCallback)}
+ * request.
+ *
+ * <p>The response typically contains one or more {@link Dataset}s, each representing a set of
+ * fields that can be auto-filled together. For example, for a login page with username/password
+ * where the user only have one account in the service, the response could be:
+ *
+ * <pre class="prettyprint">
+ * new FillResponse.Builder()
+ * .add(new Dataset.Builder("homer")
+ * .setTextFieldValue(id1, "homer")
+ * .setTextFieldValue(id2, "D'OH!")
+ * .build())
+ * .build();
+ * </pre>
+ *
+ * <p>If the user had 2 accounts, each with its own user-provided names, the response could be:
+ *
+ * <pre class="prettyprint">
+ * new FillResponse.Builder()
+ * .add(new Dataset.Builder("Homer's Account")
+ * .setTextFieldValue(id1, "homer")
+ * .setTextFieldValue(id2, "D'OH!")
+ * .build())
+ * .add(new Dataset.Builder("Bart's Account")
+ * .setTextFieldValue(id1, "elbarto")
+ * .setTextFieldValue(id2, "cowabonga")
+ * .build())
+ * .build();
+ * </pre>
+ *
+ * <p>If the user does not have any data associated with this {@link Activity} but the service
+ * wants to offer the user the option to save the data that was entered, then the service could
+ * populate the response with {@code savableIds} instead of {@link Dataset}s:
+ *
+ * <pre class="prettyprint">
+ * new FillResponse.Builder()
+ * .addSavableFields(id1, id2)
+ * .build();
+ * </pre>
+ *
+ * <p>Similarly, there might be cases where the user data on the service is enough to populate some
+ * fields but not all, and the service would still be interested on saving the other fields. In this
+ * scenario, the service could populate the response with both {@link Dataset}s and
+ * {@code savableIds}:
+ *
+ * <pre class="prettyprint">
+ * new FillResponse.Builder()
+ * .add(new Dataset.Builder("Homer")
+ * .setTextFieldValue(id1, "Homer") // first name
+ * .setTextFieldValue(id2, "Simpson") // last name
+ * .setTextFieldValue(id3, "742 Evergreen Terrace") // street
+ * .setTextFieldValue(id4, "Springfield") // city
+ * .build())
+ * .addSavableFields(id5, id6) // state and zipcode
+ * .build();
+ *
+ * </pre>
+ *
+ * <p>Notice that the ids that are part of a dataset (ids 1 to 4, in this example) are automatically
+ * added to the {@code savableIds} list.
+ *
+ * <p>If the service has multiple {@link Dataset}s with multiple options for some fields on each
+ * dataset (for example, multiple accounts with both a home and work address), then it should
+ * "partition" the {@link Activity} in sections and populate the response with just a subset of the
+ * data that would fulfill the first section; then once the user fills the first section and taps
+ * a field from the next section, the Android system would issue another request for that section,
+ * and so on. For example, the first response could be:
+ *
+ * <pre class="prettyprint">
+ * new FillResponse.Builder()
+ * .add(new Dataset.Builder("Homer")
+ * .setTextFieldValue(id1, "Homer")
+ * .setTextFieldValue(id2, "Simpson")
+ * .build())
+ * .add(new Dataset.Builder("Bart")
+ * .setTextFieldValue(id1, "Bart")
+ * .setTextFieldValue(id2, "Simpson")
+ * .build())
+ * .build();
+ * </pre>
+ *
+ * <p>Then after the user picks the {@code Homer} dataset and taps the {@code Street} field to
+ * trigger another auto-fill request, the second response could be:
+ *
+ * <pre class="prettyprint">
+ * new FillResponse.Builder()
+ * .add(new Dataset.Builder("Home")
+ * .setTextFieldValue(id3, "742 Evergreen Terrace")
+ * .setTextFieldValue(id4, "Springfield")
+ * .build())
+ * .add(new Dataset.Builder("Work")
+ * .setTextFieldValue(id3, "Springfield Nuclear Power Plant")
+ * .setTextFieldValue(id4, "Springfield")
+ * .build())
+ * .build();
+ * </pre>
+ *
+ * <p>Finally, the service can use the {@link FillResponse.Builder#setExtras(Bundle)} and/or
+ * {@link Dataset.Builder#setExtras(Bundle)} methods to pass
+ * a {@link Bundle} with service-specific data use to identify this response on future calls (like
+ * {@link AutoFillService#onSaveRequest(android.app.assist.AssistStructure, Bundle,
+ * android.os.CancellationSignal, android.service.autofill.SaveCallback)}) - such bundle will be
+ * available as the {@link AutoFillService#EXTRA_RESPONSE_EXTRAS} extra in
+ * that method's {@code extras} argument.
+ */
+public final class FillResponse implements Parcelable {
+
+ private final List<Dataset> mDatasets;
+ private final AutoFillId[] mSavableIds;
+ private final Bundle mExtras;
+
+ private FillResponse(Builder builder) {
+ // TODO(b/33197203): make it immutable?
+ mDatasets = builder.mDatasets;
+ final int size = builder.mSavableIds.size();
+ mSavableIds = new AutoFillId[size];
+ int i = 0;
+ for (AutoFillId id : builder.mSavableIds) {
+ mSavableIds[i++] = id;
+ }
+ mExtras = builder.mExtras;
+ }
+
+ /** @hide */
+ public List<Dataset> getDatasets() {
+ return mDatasets;
+ }
+
+ /** @hide */
+ public AutoFillId[] getSavableIds() {
+ return mSavableIds;
+ }
+
+ /** @hide */
+ public Bundle getExtras() {
+ return mExtras;
+ }
+
+ /**
+ * Builder for {@link FillResponse} objects.
+ */
+ public static final class Builder {
+ private final List<Dataset> mDatasets = new ArrayList<>();
+ private final Set<AutoFillId> mSavableIds = new HashSet<>();
+ private Bundle mExtras;
+
+ /**
+ * Adds a new {@link Dataset} to this response.
+ *
+ * @throws IllegalArgumentException if a dataset with same {@code name} already exists.
+ */
+ public Builder addDataset(Dataset dataset) {
+ Preconditions.checkNotNull(dataset, "dataset cannot be null");
+ // TODO(b/33197203): check if name already exists
+ // TODO(b/33197203): check if authId already exists (and update javadoc)
+ mDatasets.add(dataset);
+ for (DatasetField field : dataset.getFields()) {
+ mSavableIds.add(field.getId());
+ }
+ return this;
+ }
+
+ /**
+ * Adds ids of additional fields that the service would be interested to save (through
+ * {@link AutoFillService#onSaveRequest(android.app.assist.AssistStructure, Bundle,
+ * android.os.CancellationSignal, android.service.autofill.SaveCallback)}) but were not
+ * indirectly set through {@link #addDataset(Dataset)}.
+ *
+ * <p>See {@link FillResponse} for examples.
+ */
+ public Builder addSavableFields(AutoFillId...ids) {
+ for (AutoFillId id : ids) {
+ mSavableIds.add(id);
+ }
+ return this;
+ }
+
+ /**
+ * Sets a {@link Bundle} that will be passed to subsequent calls to {@link AutoFillService}
+ * methods such as
+ * {@link AutoFillService#onSaveRequest(android.app.assist.AssistStructure, Bundle,
+ * android.os.CancellationSignal, android.service.autofill.SaveCallback)}, using
+ * {@link AutoFillService#EXTRA_RESPONSE_EXTRAS} as the key.
+ *
+ * <p>It can be used when to keep service state in between calls.
+ */
+ public Builder setExtras(Bundle extras) {
+ mExtras = Objects.requireNonNull(extras, "extras cannot be null");
+ return this;
+ }
+
+ /**
+ * Builds a new {@link FillResponse} instance.
+ */
+ public FillResponse build() {
+ return new FillResponse(this);
+ }
+ }
+
+ /////////////////////////////////////
+ // Object "contract" methods. //
+ /////////////////////////////////////
+ @Override
+ public String toString() {
+ if (!DEBUG) return super.toString();
+
+ final StringBuilder builder = new StringBuilder("FillResponse: [datasets=")
+ .append(mDatasets).append(", savableIds=").append(Arrays.toString(mSavableIds))
+ .append(", extras=");
+ append(builder, mExtras);
+ return builder.append(']').toString();
+ }
+
+ /////////////////////////////////////
+ // Parcelable "contract" methods. //
+ /////////////////////////////////////
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel parcel, int flags) {
+ parcel.writeList(mDatasets);
+ parcel.writeParcelableArray(mSavableIds, 0);
+ parcel.writeBundle(mExtras);
+ }
+
+ private FillResponse(Parcel parcel) {
+ mDatasets = new ArrayList<>();
+ parcel.readList(mDatasets, null);
+ mSavableIds = parcel.readParcelableArray(null, AutoFillId.class);
+ mExtras = parcel.readBundle();
+ }
+
+ public static final Parcelable.Creator<FillResponse> CREATOR =
+ new Parcelable.Creator<FillResponse>() {
+ @Override
+ public FillResponse createFromParcel(Parcel source) {
+ return new FillResponse(source);
+ }
+
+ @Override
+ public FillResponse[] newArray(int size) {
+ return new FillResponse[size];
+ }
+ };
+}
diff --git a/core/java/android/view/autofill/Helper.java b/core/java/android/view/autofill/Helper.java
new file mode 100644
index 0000000..772710e
--- /dev/null
+++ b/core/java/android/view/autofill/Helper.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2016 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.view.autofill;
+
+import android.os.Bundle;
+
+import java.util.Set;
+
+/** @hide */
+public final class Helper {
+
+ // TODO(b/33197203): set to false when stable
+ static final boolean DEBUG = true;
+ static final String REDACTED = "[REDACTED]";
+
+ static void append(StringBuilder builder, Bundle bundle) {
+ if (bundle == null) {
+ builder.append("N/A");
+ } else if (!DEBUG) {
+ builder.append(REDACTED);
+ } else {
+ final Set<String> keySet = bundle.keySet();
+ builder.append("[bundle with ").append(keySet.size()).append(" extras:");
+ for (String key : keySet) {
+ builder.append(' ').append(key).append('=').append(bundle.get(key)).append(',');
+ }
+ builder.append(']');
+ }
+ }
+
+ private Helper() {
+ throw new UnsupportedOperationException("contains static members only");
+ }
+}
diff --git a/core/java/android/view/autofill/VirtualViewDelegate.java b/core/java/android/view/autofill/VirtualViewDelegate.java
new file mode 100644
index 0000000..a19b4e5
--- /dev/null
+++ b/core/java/android/view/autofill/VirtualViewDelegate.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2016 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.view.autofill;
+
+import android.util.Log;
+import android.view.View;
+import android.view.ViewStructure;
+
+/**
+ * This class is the contract a client should implement to enable support of a
+ * virtual view hierarchy rooted at a given view for auto-fill purposes.
+ *
+ * <p>The view hierarchy is typically created through the
+ * {@link View#onProvideAutoFillVirtualStructure(android.view.ViewStructure, int)} call and client
+ * add virtual children by calling {@link ViewStructure#newChild(int, int)} or
+ * {@link ViewStructure#asyncNewChild(int, int)}, where the client provides the {@code virtualId}
+ * of the children - the same {@code virtualId} is used in the methods of this class.
+ *
+ * <p>Objects of this class are typically created by overriding
+ * {@link View#getAutoFillVirtualViewDelegate(Callback)} and saving the passed callback, which must
+ * be notified upon changes on the hierarchy.
+ *
+ * <p>The main use case of these API is to enable custom views that draws its content - such as
+ * {@link android.webkit.WebView} providers - to support the AutoFill Framework:
+ *
+ * <ol>
+ * <li>Client populates the virtual hierarchy on
+ * {@link View#onProvideAutoFillVirtualStructure(android.view.ViewStructure, int)}
+ * <li>Android System generates the proper {@link AutoFillId} - encapsulating the view and the
+ * virtual node ids - and pass it to the {@link android.service.autofill.AutoFillService}.
+ * <li>The service uses the {@link AutoFillId} to populate the auto-fill {@link Dataset}s and pass
+ * it back to the Android System.
+ * <li>Android System uses the {@link AutoFillId} to find the proper custom view and calls
+ * {@link #autoFill(int, AutoFillValue)} on that view passing the virtual id.
+ * <li>This provider than finds the node in the hierarchy and auto-fills it.
+ * </ol>
+ *
+ */
+public abstract class VirtualViewDelegate {
+
+ // TODO(b/33197203): set to false once stable
+ private static final boolean DEBUG = true;
+
+ private static final String TAG = "VirtualViewDelegate";
+
+ /**
+ * Auto-fills a virtual view with the {@code value}.
+ *
+ * @param virtualId id identifying the virtual node inside the custom view.
+ * @param value value to be auto-filled.
+ */
+ public abstract void autoFill(int virtualId, AutoFillValue value);
+
+ /**
+ * Callback used to notify the AutoFill Framework of changes made on the view hierarchy while
+ * an {@link android.app.Activity} is being auto filled.
+ */
+ public abstract static class Callback {
+
+ /**
+ * Sent when the focus inside the hierarchy changed.
+ *
+ * <p>Typically callled twice - for the nodes that lost and gained focus.
+ *
+ * <p>This method should only be called when the change was not caused by the AutoFill
+ * Framework itselft (i.e, through {@link VirtualViewDelegate#autoFill(int, AutoFillValue)},
+ * but by external causes (for example, when the user changed the value through the view's
+ * UI).
+ *
+ * @param virtualId id of the node whose focus changed.
+ * @param hasFocus {@code true} when focus was gained, {@code false} when it was lost.
+ */
+ public void onFocusChanged(int virtualId, boolean hasFocus) {
+ if (DEBUG) Log.d(TAG, "onFocusChanged() for " + virtualId + ": " + hasFocus);
+ }
+
+ /**
+ * Sent when the value of a node was changed.
+ *
+ * <p>This method should only be called when the change was not caused by the AutoFill
+ * Framework itselft (i.e, through {@link VirtualViewDelegate#autoFill(int, AutoFillValue)},
+ * but by external causes (for example, when the user changed the value through the view's
+ * UI).
+ *
+ * @param virtualId id of the node whose value changed.
+ */
+ public void onValueChanged(int virtualId) {
+ if (DEBUG) Log.d(TAG, "onValueChanged() for" + virtualId);
+ }
+
+ /**
+ * Sent when nodes were removed (or had their ids changed) after the hierarchy has been
+ * committed to
+ * {@link View#onProvideAutoFillVirtualStructure(android.view.ViewStructure, int)}.
+ *
+ * <p>For example, when the view is rendering an {@code HTML} page, it should call this
+ * method when:
+ * <ul>
+ * <li>User navigated to another page and some (or all) nodes are gone.
+ * <li>The page's {@code DOM} was changed by {@code JavaScript} and some nodes moved (and
+ * are now identified by different ids).
+ * </ul>
+ *
+ * @param virtualIds id of the nodes that were removed.
+ */
+ public void onNodeRemoved(int... virtualIds) {
+ if (DEBUG) Log.d(TAG, "onNodeRemoved(): " + virtualIds);
+ }
+ }
+}
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 8ecc42d..f98c099 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -2515,8 +2515,8 @@
}
@Override
- public void onProvideVirtualStructure(ViewStructure structure, int flags) {
- mProvider.getViewDelegate().onProvideVirtualStructure(structure, flags);
+ public void onProvideAutoFillVirtualStructure(ViewStructure structure, int flags) {
+ mProvider.getViewDelegate().onProvideAutoFillVirtualStructure(structure, flags);
}
/** @hide */
diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java
index eb0c44c..d7a49e4 100644
--- a/core/java/android/webkit/WebViewFactory.java
+++ b/core/java/android/webkit/WebViewFactory.java
@@ -59,8 +59,8 @@
// visible for WebViewZygoteInit to look up the class by reflection and call preloadInZygote.
/** @hide */
- public static final String CHROMIUM_WEBVIEW_FACTORY =
- "com.android.webview.chromium.WebViewChromiumFactoryProvider";
+ private static final String CHROMIUM_WEBVIEW_FACTORY =
+ "com.android.webview.chromium.WebViewChromiumFactoryProviderForO";
private static final String CHROMIUM_WEBVIEW_FACTORY_METHOD = "create";
@@ -143,6 +143,23 @@
}
/**
+ * @hide
+ */
+ public static Class<WebViewFactoryProvider> getWebViewProviderClass( ClassLoader clazzLoader)
+ throws ClassNotFoundException{
+ try {
+ return (Class<WebViewFactoryProvider>) Class.forName(CHROMIUM_WEBVIEW_FACTORY,
+ true, clazzLoader);
+ } catch (ClassNotFoundException e) {
+ // TODO: This loads the provider which is not built for O, should be removed
+ // before the release.
+ return (Class<WebViewFactoryProvider>) Class.forName(
+ "com.android.webview.chromium.WebViewChromiumFactoryProvider",
+ true, clazzLoader);
+ }
+ }
+
+ /**
* Load the native library for the given package name iff that package
* name is the same as the one providing the webview.
*/
@@ -366,9 +383,9 @@
Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "Class.forName()");
try {
- return (Class<WebViewFactoryProvider>) Class.forName(CHROMIUM_WEBVIEW_FACTORY,
- true, clazzLoader);
- } finally {
+ return getWebViewProviderClass(clazzLoader);
+ }
+ finally {
Trace.traceEnd(Trace.TRACE_TAG_WEBVIEW);
}
} catch (ClassNotFoundException e) {
diff --git a/core/java/android/webkit/WebViewProvider.java b/core/java/android/webkit/WebViewProvider.java
index 7b95180..dd1b0d2 100644
--- a/core/java/android/webkit/WebViewProvider.java
+++ b/core/java/android/webkit/WebViewProvider.java
@@ -312,7 +312,7 @@
public void onProvideVirtualStructure(android.view.ViewStructure structure);
@SuppressWarnings("unused")
- public default void onProvideVirtualStructure(android.view.ViewStructure structure,
+ public default void onProvideAutoFillVirtualStructure(android.view.ViewStructure structure,
int flags) {
}
diff --git a/core/java/android/widget/CompoundButton.java b/core/java/android/widget/CompoundButton.java
index dd63fef..718070d 100644
--- a/core/java/android/widget/CompoundButton.java
+++ b/core/java/android/widget/CompoundButton.java
@@ -34,6 +34,8 @@
import android.view.ViewHierarchyEncoder;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.autofill.AutoFillType;
+import android.view.autofill.AutoFillValue;
import com.android.internal.R;
@@ -52,6 +54,7 @@
* </p>
*/
public abstract class CompoundButton extends Button implements Checkable {
+
private boolean mChecked;
private boolean mBroadcasting;
@@ -111,6 +114,7 @@
applyButtonTint();
}
+ @Override
public void toggle() {
setChecked(!mChecked);
}
@@ -130,6 +134,7 @@
}
@ViewDebug.ExportedProperty
+ @Override
public boolean isChecked() {
return mChecked;
}
@@ -139,6 +144,7 @@
*
* @param checked true to check the button, false to uncheck it
*/
+ @Override
public void setChecked(boolean checked) {
if (mChecked != checked) {
mChecked = checked;
@@ -169,7 +175,7 @@
*
* @param listener the callback to call on checked state change
*/
- public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
+ public void setOnCheckedChangeListener(@Nullable OnCheckedChangeListener listener) {
mOnCheckedChangeListener = listener;
}
@@ -514,12 +520,15 @@
+ " checked=" + checked + "}";
}
- public static final Parcelable.Creator<SavedState> CREATOR
- = new Parcelable.Creator<SavedState>() {
+ @SuppressWarnings("hiding")
+ public static final Parcelable.Creator<SavedState> CREATOR =
+ new Parcelable.Creator<SavedState>() {
+ @Override
public SavedState createFromParcel(Parcel in) {
return new SavedState(in);
}
+ @Override
public SavedState[] newArray(int size) {
return new SavedState[size];
}
@@ -551,4 +560,16 @@
super.encodeProperties(stream);
stream.addProperty("checked", isChecked());
}
+
+ // TODO(b/33197203): add unit/CTS tests for auto-fill methods
+
+ @Override
+ public void autoFill(AutoFillValue value) {
+ setChecked(value.getToggleValue());
+ }
+
+ @Override
+ public AutoFillType getAutoFillType() {
+ return AutoFillType.forToggle();
+ }
}
diff --git a/core/java/android/widget/EditText.java b/core/java/android/widget/EditText.java
index 043eb34..af5c842 100644
--- a/core/java/android/widget/EditText.java
+++ b/core/java/android/widget/EditText.java
@@ -24,8 +24,10 @@
import android.text.method.ArrowKeyMovementMethod;
import android.text.method.MovementMethod;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.accessibility.AccessibilityNodeInfo;
-
+import android.view.autofill.AutoFillType;
+import android.view.autofill.AutoFillValue;
/*
* This is supposed to be a *very* thin veneer over TextView.
@@ -154,4 +156,26 @@
info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SET_TEXT);
}
}
+
+ // TODO(b/33197203): add unit/CTS tests for auto-fill methods
+
+ @Override
+ public void autoFill(AutoFillValue value) {
+ final CharSequence text = value.getTextValue();
+
+ if (text == null) {
+ Log.w(VIEW_LOG_TAG, "EditText.autoFill(): no text on AutoFillValue");
+ return;
+ }
+ // TODO(b/33197203): once auto-fill is triggered by the IME, we'll need a new setText()
+ // or setAutoFillText() method on TextView to avoid re-triggering it.
+ setText(text);
+ }
+
+ @Override
+ public AutoFillType getAutoFillType() {
+ // TODO(b/33197203): ideally it should return a constant, but value returned by
+ // getInputType() can change.
+ return AutoFillType.forText(getInputType());
+ }
}
diff --git a/core/java/android/widget/RadioGroup.java b/core/java/android/widget/RadioGroup.java
index 54b5763..45fd9e6 100644
--- a/core/java/android/widget/RadioGroup.java
+++ b/core/java/android/widget/RadioGroup.java
@@ -16,12 +16,16 @@
package android.widget;
+
import android.annotation.IdRes;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
+import android.view.autofill.AutoFillType;
+import android.view.autofill.AutoFillValue;
import com.android.internal.R;
@@ -51,6 +55,7 @@
*
*/
public class RadioGroup extends LinearLayout {
+
// holds the checked id; the selection is empty by default
private int mCheckedId = -1;
// tracks children radio buttons checked state
@@ -335,6 +340,7 @@
}
private class CheckedStateTracker implements CompoundButton.OnCheckedChangeListener {
+ @Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// prevents from infinite recursion
if (mProtectFromCheckedChange) {
@@ -364,6 +370,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public void onChildViewAdded(View parent, View child) {
if (parent == RadioGroup.this && child instanceof RadioButton) {
int id = child.getId();
@@ -384,6 +391,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public void onChildViewRemoved(View parent, View child) {
if (parent == RadioGroup.this && child instanceof RadioButton) {
((RadioButton) child).setOnCheckedChangeWidgetListener(null);
@@ -394,4 +402,22 @@
}
}
}
+
+ // TODO(b/33197203): add unit/CTS tests for auto-fill methods
+
+ @Override
+ public void autoFill(AutoFillValue value) {
+ final int index = value.getListValue();
+ final View child = getChildAt(index);
+ if (child == null) {
+ Log.w(VIEW_LOG_TAG, "RadioGroup.autoFill(): no child with index " + index);
+ return;
+ }
+ check(child.getId());
+ }
+
+ @Override
+ public AutoFillType getAutoFillType() {
+ return AutoFillType.forList();
+ }
}
diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java
index e629df9..a9257e6 100644
--- a/core/java/android/widget/Switch.java
+++ b/core/java/android/widget/Switch.java
@@ -1404,10 +1404,19 @@
}
@Override
- public void onProvideStructure(ViewStructure structure, int flags) {
- super.onProvideStructure(structure, flags);
+ public void onProvideStructure(ViewStructure structure) {
+ super.onProvideStructure(structure);
+ onProvideAutoFillStructureForAssistOrAutoFill(structure);
+ }
- // NOTE: current there is no difference for Assist (flags=0) or AutoFill (flags>0);
+ @Override
+ public void onProvideAutoFillStructure(ViewStructure structure, int flags) {
+ super.onProvideAutoFillStructure(structure, flags);
+ onProvideAutoFillStructureForAssistOrAutoFill(structure);
+ }
+
+ // NOTE: currently there is no difference for Assist or AutoFill, so it doesn't take flags
+ private void onProvideAutoFillStructureForAssistOrAutoFill(ViewStructure structure) {
CharSequence switchText = isChecked() ? mTextOn : mTextOff;
if (!TextUtils.isEmpty(switchText)) {
CharSequence oldText = structure.getText();
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 1961bf6..4b48501 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -596,6 +596,7 @@
private int mBreakStrategy;
private int mHyphenationFrequency;
+ private boolean mJustify;
private int mMaximum = Integer.MAX_VALUE;
private int mMaxMode = LINES;
@@ -769,6 +770,7 @@
String fontFeatureSettings = null;
mBreakStrategy = Layout.BREAK_STRATEGY_SIMPLE;
mHyphenationFrequency = Layout.HYPHENATION_FREQUENCY_NONE;
+ mJustify = false;
final Resources.Theme theme = context.getTheme();
@@ -3242,6 +3244,20 @@
}
/**
+ * Returns the font variation settings.
+ *
+ * @return the currently set font variation settings. Returns null if no variation is
+ * specified.
+ *
+ * @see #setFontVariationSettings(String)
+ * @see Paint#setFontVariationSettings(String) Paint.setFontVariationSettings(String)
+ */
+ @Nullable
+ public String getFontVariationSettings() {
+ return mTextPaint.getFontVariationSettings();
+ }
+
+ /**
* Sets the break strategy for breaking paragraphs into lines. The default value for
* TextView is {@link Layout#BREAK_STRATEGY_HIGH_QUALITY}, and the default value for
* EditText is {@link Layout#BREAK_STRATEGY_SIMPLE}, the latter to avoid the
@@ -3298,6 +3314,29 @@
}
/**
+ * Enables or disables full justification. The default value is false.
+ *
+ * @see #getJustify()
+ */
+ public void setJustify(boolean justify) {
+ mJustify = justify;
+ if (mLayout != null) {
+ nullLayouts();
+ requestLayout();
+ invalidate();
+ }
+ }
+
+ /**
+ * @return true if currently paragraph justification is enabled.
+ *
+ * @see #setJustify(boolean)
+ */
+ public boolean getJustify() {
+ return mJustify;
+ }
+
+ /**
* Sets font feature settings. The format is the same as the CSS
* font-feature-settings attribute:
* <a href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
@@ -3325,6 +3364,41 @@
/**
+ * Sets TrueType or OpenType font variation settings. The settings string is constructed from
+ * multiple pairs of axis tag and style values. The axis tag must contain four ASCII characters
+ * and must be wrapped with single quotes (U+0027) or double quotes (U+0022). Axis strings that
+ * are longer or shorter than four characters, or contain characters outside of U+0020..U+007E
+ * are invalid. If a specified axis name is not defined in the font, the settings will be
+ * ignored.
+ *
+ * <pre>
+ * textView.setFontVariationSettings("'wdth' 1.0");
+ * textView.setFontVariationSettings("'AX ' 1.8, 'FB ' 2.0");
+ * </pre>
+ *
+ * @param fontVariationSettings font variation settings. You can pass null or empty string as
+ * no variation settings.
+ *
+ * @see #getFontVariationSettings()
+ * @see Paint#getFontVariationSettings() Paint.getFontVariationSettings()
+ */
+ public void setFontVariationSettings(@Nullable String fontVariationSettings) {
+ final String existingSettings = mTextPaint.getFontVariationSettings();
+ if (fontVariationSettings == existingSettings
+ || (fontVariationSettings != null
+ && fontVariationSettings.equals(existingSettings))) {
+ return;
+ }
+ mTextPaint.setFontVariationSettings(fontVariationSettings);
+
+ if (mLayout != null) {
+ nullLayouts();
+ requestLayout();
+ invalidate();
+ }
+ }
+
+ /**
* Sets the text color for all the states (normal, selected,
* focused) to be this color.
*
@@ -7170,6 +7244,7 @@
.setIncludePad(mIncludePad)
.setBreakStrategy(mBreakStrategy)
.setHyphenationFrequency(mHyphenationFrequency)
+ .setJustify(mJustify)
.setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE);
if (shouldEllipsize) {
builder.setEllipsize(mEllipsize)
@@ -7211,7 +7286,7 @@
if (mText instanceof Spannable) {
result = new DynamicLayout(mText, mTransformed, mTextPaint, wantWidth,
alignment, mTextDir, mSpacingMult, mSpacingAdd, mIncludePad,
- mBreakStrategy, mHyphenationFrequency,
+ mBreakStrategy, mHyphenationFrequency, mJustify,
getKeyListener() == null ? effectiveEllipsize : null, ellipsisWidth);
} else {
if (boring == UNKNOWN_BORING) {
@@ -7261,6 +7336,7 @@
.setIncludePad(mIncludePad)
.setBreakStrategy(mBreakStrategy)
.setHyphenationFrequency(mHyphenationFrequency)
+ .setJustify(mJustify)
.setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE);
if (shouldEllipsize) {
builder.setEllipsize(effectiveEllipsize)
@@ -9391,11 +9467,23 @@
}
@Override
- public void onProvideStructure(ViewStructure structure, int flags) {
- super.onProvideStructure(structure, flags);
+ public void onProvideStructure(ViewStructure structure) {
+ super.onProvideStructure(structure);
+ onProvideAutoStructureForAssistOrAutoFill(structure, 0);
+ }
+ @Override
+ public void onProvideAutoFillStructure(ViewStructure structure, int flags) {
+ super.onProvideAutoFillStructure(structure, flags);
+ onProvideAutoStructureForAssistOrAutoFill(structure, flags);
+ }
+
+ private void onProvideAutoStructureForAssistOrAutoFill(ViewStructure structure, int flags) {
+ // NOTE: currently flags are only used for AutoFill; if they're used for Assist as well,
+ // this method should take a boolean with the type of request.
final boolean forAutoFillSave =
- (flags & ASSIST_FLAG_NON_SANITIZED_TEXT) != 0;
+ (flags & AUTO_FILL_FLAG_TYPE_SAVE) != 0;
+
final boolean isPassword = hasPasswordTransformationMethod()
|| isPasswordInputType(getInputType());
if (!isPassword || forAutoFillSave) {
diff --git a/core/java/android/widget/Toolbar.java b/core/java/android/widget/Toolbar.java
index 44b2b59..2eb50e0 100644
--- a/core/java/android/widget/Toolbar.java
+++ b/core/java/android/widget/Toolbar.java
@@ -42,6 +42,7 @@
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
+import android.view.ViewParent;
import com.android.internal.R;
import com.android.internal.view.menu.MenuBuilder;
@@ -331,6 +332,23 @@
a.recycle();
}
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+
+ // If the container is a cluster, unmark itself as a cluster to avoid having nested
+ // clusters.
+ ViewParent parent = getParent();
+ while (parent != null && parent instanceof ViewGroup) {
+ final ViewGroup vgParent = (ViewGroup) parent;
+ if (vgParent.isKeyboardNavigationCluster()) {
+ setKeyboardNavigationCluster(false);
+ break;
+ }
+ parent = vgParent.getParent();
+ }
+ }
+
/**
* Specifies the theme to use when inflating popup menus. By default, uses
* the same theme as the toolbar itself.
diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
index 5623a2c..99a25fd 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -125,7 +125,7 @@
void noteNetworkStatsEnabled();
void noteDeviceIdleMode(int mode, String activeReason, int activeUid);
void setBatteryState(int status, int health, int plugType, int level, int temp, int volt,
- int chargeUAh);
+ int chargeUAh, int chargeFullUAh);
long getAwakeTimeBattery();
long getAwakeTimePlugged();
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index 23c1969..282d3e9 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -106,6 +106,8 @@
private final ArrayList<Intent> mIntents = new ArrayList<>();
private PickTargetOptionRequest mPickOptionRequest;
private String mReferrerPackage;
+ private CharSequence mTitle;
+ private int mDefaultTitleResId;
protected ResolverDrawerLayout mResolverDrawerLayout;
protected String mContentType;
@@ -261,14 +263,17 @@
mPackageMonitor.register(this, getMainLooper(), false);
mRegistered = true;
mReferrerPackage = getReferrerPackageName();
+ mAlwaysUseOption = alwaysUseOption;
final ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
mIconDpi = am.getLauncherLargeIconDensity();
// Add our initial intent as the first item, regardless of what else has already been added.
mIntents.add(0, new Intent(intent));
+ mTitle = title;
+ mDefaultTitleResId = defaultTitleRes;
- if (configureContentView(mIntents, initialIntents, rList, alwaysUseOption)) {
+ if (configureContentView(mIntents, initialIntents, rList)) {
return;
}
@@ -286,56 +291,6 @@
mResolverDrawerLayout = rdl;
}
- if (title == null) {
- title = getTitleForAction(intent.getAction(), defaultTitleRes);
- }
- if (!TextUtils.isEmpty(title)) {
- final TextView titleView = (TextView) findViewById(R.id.title);
- if (titleView != null) {
- titleView.setText(title);
- }
- setTitle(title);
-
- // Try to initialize the title icon if we have a view for it and a title to match
- final ImageView titleIcon = (ImageView) findViewById(R.id.title_icon);
- if (titleIcon != null) {
- ApplicationInfo ai = null;
- try {
- if (!TextUtils.isEmpty(mReferrerPackage)) {
- ai = mPm.getApplicationInfo(mReferrerPackage, 0);
- }
- } catch (NameNotFoundException e) {
- Log.e(TAG, "Could not find referrer package " + mReferrerPackage);
- }
-
- if (ai != null) {
- titleIcon.setImageDrawable(ai.loadIcon(mPm));
- }
- }
- }
-
- final ImageView iconView = (ImageView) findViewById(R.id.icon);
- final DisplayResolveInfo iconInfo = mAdapter.getFilteredItem();
- if (iconView != null && iconInfo != null) {
- new LoadIconIntoViewTask(iconInfo, iconView).execute();
- }
-
- if (alwaysUseOption || mAdapter.hasFilteredItem()) {
- final ViewGroup buttonLayout = (ViewGroup) findViewById(R.id.button_bar);
- if (buttonLayout != null) {
- buttonLayout.setVisibility(View.VISIBLE);
- mAlwaysButton = (Button) buttonLayout.findViewById(R.id.button_always);
- mOnceButton = (Button) buttonLayout.findViewById(R.id.button_once);
- } else {
- mAlwaysUseOption = false;
- }
- }
-
- if (mAdapter.hasFilteredItem()) {
- setAlwaysButtonEnabled(true, mAdapter.getFilteredPosition(), false);
- mOnceButton.setEnabled(true);
- }
-
mProfileView = findViewById(R.id.profile_button);
if (mProfileView != null) {
mProfileView.setOnClickListener(new View.OnClickListener() {
@@ -893,23 +848,22 @@
* Returns true if the activity is finishing and creation should halt
*/
public boolean configureContentView(List<Intent> payloadIntents, Intent[] initialIntents,
- List<ResolveInfo> rList, boolean alwaysUseOption) {
+ List<ResolveInfo> rList) {
// The last argument of createAdapter is whether to do special handling
// of the last used choice to highlight it in the list. We need to always
// turn this off when running under voice interaction, since it results in
// a more complicated UI that the current voice interaction flow is not able
// to handle.
mAdapter = createAdapter(this, payloadIntents, initialIntents, rList,
- mLaunchedFromUid, alwaysUseOption && !isVoiceInteraction());
+ mLaunchedFromUid, mAlwaysUseOption && !isVoiceInteraction());
boolean rebuildCompleted = mAdapter.rebuildList();
if (mAdapter.hasFilteredItem()) {
mLayoutId = R.layout.resolver_list_with_default;
- alwaysUseOption = false;
+ mAlwaysUseOption = false;
} else {
mLayoutId = getLayoutResource();
}
- mAlwaysUseOption = alwaysUseOption;
int count = mAdapter.getUnfilteredCount();
@@ -929,13 +883,11 @@
}
}
+ setContentView(mLayoutId);
if (count > 0 || !rebuildCompleted) {
- setContentView(mLayoutId);
mAdapterView = (AbsListView) findViewById(R.id.resolver_list);
onPrepareAdapterView(mAdapterView, mAdapter, mAlwaysUseOption);
} else {
- setContentView(R.layout.resolver_list);
-
final TextView empty = (TextView) findViewById(R.id.empty);
empty.setVisibility(View.VISIBLE);
@@ -960,12 +912,67 @@
listView.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
}
- if (useHeader && listView != null) {
+ // In case this method is called again (due to activity recreation), avoid adding a new
+ // header if one is already present.
+ if (useHeader && listView != null && listView.getHeaderViewsCount() == 0) {
listView.addHeaderView(LayoutInflater.from(this).inflate(
R.layout.resolver_different_item_header, listView, false));
}
}
+ public void setTitleAndIcon() {
+ if (mTitle == null) {
+ mTitle = getTitleForAction(getTargetIntent().getAction(), mDefaultTitleResId);
+ }
+
+ if (!TextUtils.isEmpty(mTitle)) {
+ final TextView titleView = (TextView) findViewById(R.id.title);
+ if (titleView != null) {
+ titleView.setText(mTitle);
+ }
+ setTitle(mTitle);
+
+ // Try to initialize the title icon if we have a view for it and a title to match
+ final ImageView titleIcon = (ImageView) findViewById(R.id.title_icon);
+ if (titleIcon != null) {
+ ApplicationInfo ai = null;
+ try {
+ if (!TextUtils.isEmpty(mReferrerPackage)) {
+ ai = mPm.getApplicationInfo(mReferrerPackage, 0);
+ }
+ } catch (NameNotFoundException e) {
+ Log.e(TAG, "Could not find referrer package " + mReferrerPackage);
+ }
+
+ if (ai != null) {
+ titleIcon.setImageDrawable(ai.loadIcon(mPm));
+ }
+ }
+ }
+
+ final ImageView iconView = (ImageView) findViewById(R.id.icon);
+ final DisplayResolveInfo iconInfo = mAdapter.getFilteredItem();
+ if (iconView != null && iconInfo != null) {
+ new LoadIconIntoViewTask(iconInfo, iconView).execute();
+ }
+ }
+
+ public void resetAlwaysOrOnceButtonBar() {
+ if (mAlwaysUseOption || mAdapter.mLastChosen != null) {
+ final ViewGroup buttonLayout = (ViewGroup) findViewById(R.id.button_bar);
+ if (buttonLayout != null) {
+ buttonLayout.setVisibility(View.VISIBLE);
+ mAlwaysButton = (Button) buttonLayout.findViewById(R.id.button_always);
+ mOnceButton = (Button) buttonLayout.findViewById(R.id.button_once);
+ }
+ }
+
+ if (mAdapter.hasFilteredItem()) {
+ setAlwaysButtonEnabled(true, mAdapter.getFilteredPosition(), false);
+ mOnceButton.setEnabled(true);
+ }
+ }
+
/**
* Check a simple match for the component of two ResolveInfos.
*/
@@ -1227,7 +1234,7 @@
private final List<Intent> mIntents;
private final Intent[] mInitialIntents;
private final List<ResolveInfo> mBaseResolveList;
- private ResolveInfo mLastChosen;
+ protected ResolveInfo mLastChosen;
private DisplayResolveInfo mOtherProfile;
private boolean mHasExtendedInfo;
private ResolverListController mResolverListController;
@@ -1282,7 +1289,7 @@
}
public boolean hasFilteredItem() {
- return mFilterLastUsed && mLastChosenPosition >= 0;
+ return mFilterLastUsed && mLastChosen != null;
}
public float getScore(DisplayResolveInfo target) {
@@ -1307,7 +1314,7 @@
primaryIntent, primaryIntent.resolveTypeIfNeeded(getContentResolver()),
PackageManager.MATCH_DEFAULT_ONLY);
} catch (RemoteException re) {
- Log.d(TAG, "Error calling setLastChosenActivity\n" + re);
+ Log.d(TAG, "Error calling getLastChosenActivity\n" + re);
}
// Clear the value of mOtherProfile from previous call.
@@ -1319,7 +1326,7 @@
getTargetIntent(),
mBaseResolveList);
} else {
- currentResolveList =
+ currentResolveList = mUnfilteredResolveList =
mResolverListController.getResolversForIntent(shouldGetResolvedFilter(),
shouldGetActivityMetadata(),
mIntents);
@@ -1456,6 +1463,9 @@
// Process last group
processGroup(sortedComponents, start, (N - 1), rci0, r0Label);
}
+
+ setTitleAndIcon();
+ resetAlwaysOrOnceButtonBar();
disableLastChosenIfNeeded();
onListRebuilt();
}
diff --git a/core/java/com/android/internal/app/ToolbarActionBar.java b/core/java/com/android/internal/app/ToolbarActionBar.java
index 575ef02..74424f6 100644
--- a/core/java/com/android/internal/app/ToolbarActionBar.java
+++ b/core/java/com/android/internal/app/ToolbarActionBar.java
@@ -17,6 +17,11 @@
package com.android.internal.app;
+import com.android.internal.view.menu.MenuBuilder;
+import com.android.internal.view.menu.MenuPresenter;
+import com.android.internal.widget.DecorToolbar;
+import com.android.internal.widget.ToolbarWidgetWrapper;
+
import android.annotation.Nullable;
import android.app.ActionBar;
import android.content.Context;
@@ -29,19 +34,11 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
-import android.view.View.OnFocusChangeListener;
-import android.view.ViewGroup;
-import android.view.ViewParent;
import android.view.Window;
import android.view.WindowCallbackWrapper;
import android.widget.SpinnerAdapter;
import android.widget.Toolbar;
-import com.android.internal.view.menu.MenuBuilder;
-import com.android.internal.view.menu.MenuPresenter;
-import com.android.internal.widget.DecorToolbar;
-import com.android.internal.widget.ToolbarWidgetWrapper;
-
import java.util.ArrayList;
public class ToolbarActionBar extends ActionBar {
@@ -509,12 +506,6 @@
}
}
- /** @hide */
- @Override
- public boolean requestFocus() {
- return requestFocus(mDecorToolbar.getViewGroup());
- }
-
private class ToolbarCallbackWrapper extends WindowCallbackWrapper {
public ToolbarCallbackWrapper(Window.Callback wrapped) {
super(wrapped);
diff --git a/core/java/com/android/internal/app/WindowDecorActionBar.java b/core/java/com/android/internal/app/WindowDecorActionBar.java
index 1376d0a..1b3faf5 100644
--- a/core/java/com/android/internal/app/WindowDecorActionBar.java
+++ b/core/java/com/android/internal/app/WindowDecorActionBar.java
@@ -16,13 +16,6 @@
package com.android.internal.app;
-import android.animation.ValueAnimator;
-import android.content.res.TypedArray;
-import android.view.View.OnFocusChangeListener;
-import android.view.ViewGroup;
-import android.view.ViewParent;
-import android.widget.Toolbar;
-
import com.android.internal.R;
import com.android.internal.view.ActionBarPolicy;
import com.android.internal.view.menu.MenuBuilder;
@@ -39,6 +32,7 @@
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
+import android.animation.ValueAnimator;
import android.app.ActionBar;
import android.app.Activity;
import android.app.Dialog;
@@ -46,6 +40,7 @@
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
+import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.util.TypedValue;
import android.view.ActionMode;
@@ -55,10 +50,12 @@
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
+import android.view.ViewParent;
import android.view.Window;
import android.view.accessibility.AccessibilityEvent;
import android.view.animation.AnimationUtils;
import android.widget.SpinnerAdapter;
+import android.widget.Toolbar;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
@@ -970,12 +967,6 @@
return false;
}
- /** @hide */
- @Override
- public boolean requestFocus() {
- return requestFocus(mDecorToolbar.getViewGroup());
- }
-
/**
* @hide
*/
diff --git a/core/java/com/android/internal/logging/EventLogTags.logtags b/core/java/com/android/internal/logging/EventLogTags.logtags
index 4364cc3..93d5a03 100644
--- a/core/java/com/android/internal/logging/EventLogTags.logtags
+++ b/core/java/com/android/internal/logging/EventLogTags.logtags
@@ -5,5 +5,6 @@
# interaction logs
524287 sysui_view_visibility (category|1|5),(visible|1|6)
524288 sysui_action (category|1|5),(pkg|3)
+524292 sysui_multi_action (content|4)
524290 sysui_count (name|3),(increment|1)
524291 sysui_histogram (name|3),(bucket|1)
diff --git a/core/java/com/android/internal/logging/LogBuilder.java b/core/java/com/android/internal/logging/LogBuilder.java
new file mode 100644
index 0000000..8e2e114
--- /dev/null
+++ b/core/java/com/android/internal/logging/LogBuilder.java
@@ -0,0 +1,68 @@
+package com.android.internal.logging;
+
+import android.util.EventLog;
+import android.util.SparseArray;
+import android.view.View;
+
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+
+
+/**
+ * Helper class to assemble more complex logs.
+ *
+ * @hide
+ */
+
+public class LogBuilder {
+
+ private SparseArray<Object> entries = new SparseArray();
+
+ public LogBuilder(int mainCategory) {
+ setCategory(mainCategory);
+ }
+
+ public LogBuilder setView(View view) {
+ entries.put(MetricsEvent.RESERVED_FOR_LOGBUILDER_VIEW, view.getId());
+ return this;
+ }
+
+ public LogBuilder setCategory(int category) {
+ entries.put(MetricsEvent.RESERVED_FOR_LOGBUILDER_CATEGORY, category);
+ return this;
+ }
+
+ public LogBuilder setType(int type) {
+ entries.put(MetricsEvent.RESERVED_FOR_LOGBUILDER_TYPE, type);
+ return this;
+ }
+
+ /**
+ * @param tag From your MetricsEvent enum.
+ * @param value One of Integer, Long, Float, String
+ * @return
+ */
+ public LogBuilder addTaggedData(int tag, Object value) {
+ if (!(value instanceof Integer ||
+ value instanceof String ||
+ value instanceof Long ||
+ value instanceof Float)) {
+ throw new IllegalArgumentException(
+ "Value must be loggable type - int, long, float, String");
+ }
+ entries.put(tag, value);
+ return this;
+ }
+
+ /**
+ * Assemble logs into structure suitable for EventLog.
+ */
+ public Object[] serialize() {
+ Object[] out = new Object[entries.size() * 2];
+ for (int i = 0; i < entries.size(); i++) {
+ out[i * 2] = entries.keyAt(i);
+ out[i * 2 + 1] = entries.valueAt(i);
+ }
+ return out;
+ }
+}
+
diff --git a/core/java/com/android/internal/logging/MetricsLogger.java b/core/java/com/android/internal/logging/MetricsLogger.java
index a94f308..5eb39ae 100644
--- a/core/java/com/android/internal/logging/MetricsLogger.java
+++ b/core/java/com/android/internal/logging/MetricsLogger.java
@@ -17,10 +17,12 @@
import android.content.Context;
import android.os.Build;
+import android.util.EventLog;
import android.view.View;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+
/**
* Log all the things.
*
@@ -71,6 +73,14 @@
action(context, category, Boolean.toString(value));
}
+ public static void action(LogBuilder content) {
+ //EventLog.writeEvent(524292, content.serialize());
+ // Below would be the *right* way to do this, using the generated
+ // EventLogTags method, but that doesn't work.
+ EventLogTags.writeSysuiMultiAction(content.serialize());
+ }
+
+
public static void action(Context context, int category, String pkg) {
if (Build.IS_DEBUGGABLE && category == VIEW_UNKNOWN) {
throw new IllegalArgumentException("Must define metric category");
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 5d49d12..5fd68e6 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -559,6 +559,10 @@
private int mEstimatedBatteryCapacity = -1;
+ // Last learned capacity reported by BatteryService in
+ // setBatteryState().
+ private int mLastChargeFullUAh = 0;
+
private final NetworkStats.Entry mTmpNetworkStatsEntry = new NetworkStats.Entry();
private PowerProfile mPowerProfile;
@@ -9818,7 +9822,7 @@
public static final int BATTERY_PLUGGED_NONE = 0;
public void setBatteryStateLocked(int status, int health, int plugType, int level,
- int temp, int volt, int chargeUAh) {
+ int temp, int volt, int chargeUAh, int chargeFullUAh) {
final boolean onBattery = plugType == BATTERY_PLUGGED_NONE;
final long uptime = mClocks.uptimeMillis();
final long elapsedRealtime = mClocks.elapsedRealtime();
@@ -9980,6 +9984,16 @@
// The next time we are unplugged, history will be cleared.
mRecordingHistory = DEBUG;
}
+
+ if (differsByMoreThan(chargeFullUAh, mLastChargeFullUAh, 100)) {
+ mLastChargeFullUAh = chargeFullUAh;
+ addHistoryEventLocked(elapsedRealtime, uptime, HistoryItem.EVENT_ESTIMATED_BATTERY_CAP,
+ "", chargeFullUAh / 1000);
+ }
+ }
+
+ private static boolean differsByMoreThan(int left, int right, int diff) {
+ return Math.abs(left - right) > diff;
}
public long getAwakeTimeBattery() {
diff --git a/core/java/com/android/internal/os/WebViewZygoteInit.java b/core/java/com/android/internal/os/WebViewZygoteInit.java
index 12d699d..d82a211 100644
--- a/core/java/com/android/internal/os/WebViewZygoteInit.java
+++ b/core/java/com/android/internal/os/WebViewZygoteInit.java
@@ -24,6 +24,7 @@
import android.text.TextUtils;
import android.util.Log;
import android.webkit.WebViewFactory;
+import android.webkit.WebViewFactoryProvider;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
@@ -74,8 +75,8 @@
// call preloadInZygote() on it to give it the opportunity to preload the native library
// and perform any other initialisation work that should be shared among the children.
try {
- Class providerClass = Class.forName(WebViewFactory.CHROMIUM_WEBVIEW_FACTORY, true,
- loader);
+ Class<WebViewFactoryProvider> providerClass =
+ WebViewFactory.getWebViewProviderClass(loader);
Object result = providerClass.getMethod("preloadInZygote").invoke(null);
if (!((Boolean)result).booleanValue()) {
Log.e(TAG, "preloadInZygote returned false");
diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java
index 293de3d..e1e0a21 100644
--- a/core/java/com/android/internal/os/Zygote.java
+++ b/core/java/com/android/internal/os/Zygote.java
@@ -85,6 +85,9 @@
* file descriptor numbers that are to be closed by the child
* (and replaced by /dev/null) after forking. An integer value
* of -1 in any entry in the array means "ignore this one".
+ * @param fdsToIgnore null-ok an array of ints, either null or holding
+ * one or more POSIX file descriptor numbers that are to be ignored
+ * in the file descriptor table check.
* @param instructionSet null-ok the instruction set to use.
* @param appDataDir null-ok the data directory of the app.
*
@@ -93,11 +96,11 @@
*/
public static int forkAndSpecialize(int uid, int gid, int[] gids, int debugFlags,
int[][] rlimits, int mountExternal, String seInfo, String niceName, int[] fdsToClose,
- String instructionSet, String appDataDir) {
+ int[] fdsToIgnore, String instructionSet, String appDataDir) {
VM_HOOKS.preFork();
int pid = nativeForkAndSpecialize(
uid, gid, gids, debugFlags, rlimits, mountExternal, seInfo, niceName, fdsToClose,
- instructionSet, appDataDir);
+ fdsToIgnore, instructionSet, appDataDir);
// Enable tracing as soon as possible for the child process.
if (pid == 0) {
Trace.setTracingEnabled(true);
@@ -111,7 +114,7 @@
native private static int nativeForkAndSpecialize(int uid, int gid, int[] gids,int debugFlags,
int[][] rlimits, int mountExternal, String seInfo, String niceName, int[] fdsToClose,
- String instructionSet, String appDataDir);
+ int[] fdsToIgnore, String instructionSet, String appDataDir);
/**
* Special method to start the system server process. In addition to the
diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java
index 345350c..83e3cff 100644
--- a/core/java/com/android/internal/os/ZygoteConnection.java
+++ b/core/java/com/android/internal/os/ZygoteConnection.java
@@ -196,11 +196,14 @@
rlimits = parsedArgs.rlimits.toArray(intArray2d);
}
+ int[] fdsToIgnore = null;
+
if (parsedArgs.invokeWith != null) {
FileDescriptor[] pipeFds = Os.pipe2(O_CLOEXEC);
childPipeFd = pipeFds[1];
serverPipeFd = pipeFds[0];
Os.fcntlInt(childPipeFd, F_SETFD, 0);
+ fdsToIgnore = new int[] { childPipeFd.getInt$(), serverPipeFd.getInt$() };
}
/**
@@ -233,7 +236,7 @@
pid = Zygote.forkAndSpecialize(parsedArgs.uid, parsedArgs.gid, parsedArgs.gids,
parsedArgs.debugFlags, rlimits, parsedArgs.mountExternal, parsedArgs.seInfo,
- parsedArgs.niceName, fdsToClose, parsedArgs.instructionSet,
+ parsedArgs.niceName, fdsToClose, fdsToIgnore, parsedArgs.instructionSet,
parsedArgs.appDataDir);
} catch (ErrnoException ex) {
logAndPrintError(newStderr, "Exception creating pipe", ex);
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index f47784e..8eb75c0 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -657,8 +657,11 @@
}
try {
- // Report Zygote start time to tron
- MetricsLogger.histogram(null, "boot_zygote_init", (int) SystemClock.uptimeMillis());
+ // Report Zygote start time to tron unless it is a runtime restart
+ if (!"1".equals(SystemProperties.get("sys.boot_completed"))) {
+ MetricsLogger.histogram(null, "boot_zygote_init",
+ (int) SystemClock.elapsedRealtime());
+ }
String bootTimeTag = Process.is64Bit() ? "Zygote64Timing" : "Zygote32Timing";
BootTimingsTraceLog bootTimingsTraceLog = new BootTimingsTraceLog(bootTimeTag,
diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java
index eb143e8..789e9d4 100644
--- a/core/java/com/android/internal/policy/DecorView.java
+++ b/core/java/com/android/internal/policy/DecorView.java
@@ -96,6 +96,7 @@
import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
import static android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN;
import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR;
+import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN;
import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
@@ -969,7 +970,7 @@
mFrameOffsets.set(insets.getSystemWindowInsets());
insets = updateColorViews(insets, true /* animate */);
insets = updateStatusGuard(insets);
- updateNavigationGuard(insets);
+ insets = updateNavigationGuard(insets);
if (getForeground() != null) {
drawableChanged();
}
@@ -1329,9 +1330,11 @@
return insets;
}
- private void updateNavigationGuard(WindowInsets insets) {
- // IMEs lay out below the nav bar, but the content view must not (for back compat)
- if (mWindow.getAttributes().type == WindowManager.LayoutParams.TYPE_INPUT_METHOD) {
+ private WindowInsets updateNavigationGuard(WindowInsets insets) {
+ // IME windows lay out below the nav bar, but the content view must not (for back compat)
+ // Only make this adjustment if the window is not requesting layout in overscan
+ if (mWindow.getAttributes().type == WindowManager.LayoutParams.TYPE_INPUT_METHOD
+ && (mWindow.getAttributes().flags & FLAG_LAYOUT_IN_OVERSCAN) == 0) {
// prevent the content view from including the nav bar height
if (mWindow.mContentParent != null) {
if (mWindow.mContentParent.getLayoutParams() instanceof MarginLayoutParams) {
@@ -1356,7 +1359,10 @@
mNavigationGuard.setLayoutParams(lp);
}
updateNavigationGuardColor();
+ insets = insets.consumeSystemWindowInsets(
+ false, false, false, true /* bottom */);
}
+ return insets;
}
void updateNavigationGuardColor() {
diff --git a/core/java/com/android/internal/policy/PipSnapAlgorithm.java b/core/java/com/android/internal/policy/PipSnapAlgorithm.java
index 62d506f..4dd3360 100644
--- a/core/java/com/android/internal/policy/PipSnapAlgorithm.java
+++ b/core/java/com/android/internal/policy/PipSnapAlgorithm.java
@@ -21,7 +21,6 @@
import android.graphics.Point;
import android.graphics.PointF;
import android.graphics.Rect;
-import android.hardware.display.DisplayManager;
import android.view.Gravity;
import android.view.ViewConfiguration;
import android.widget.Scroller;
@@ -44,9 +43,6 @@
// The friction multiplier to control how slippery the PIP is when flung
private static final float SCROLL_FRICTION_MULTIPLIER = 8f;
- // The fraction of the stack width to show when minimized
- private static final float MINIMIZED_VISIBLE_FRACTION = 0.25f;
-
private final Context mContext;
private final ArrayList<Integer> mSnapGravities = new ArrayList<>();
@@ -56,8 +52,12 @@
private Scroller mScroller;
private int mOrientation = Configuration.ORIENTATION_UNDEFINED;
+ private final int mMinimizedVisibleSize;
+
public PipSnapAlgorithm(Context context) {
mContext = context;
+ mMinimizedVisibleSize = context.getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.pip_minimized_visible_size);
onConfigurationChanged();
}
@@ -129,11 +129,10 @@
* Applies the offset to the {@param stackBounds} to adjust it to a minimized state.
*/
public void applyMinimizedOffset(Rect stackBounds, Rect movementBounds, Point displaySize) {
- int visibleWidth = (int) (MINIMIZED_VISIBLE_FRACTION * stackBounds.width());
if (stackBounds.left <= movementBounds.centerX()) {
- stackBounds.offsetTo(-stackBounds.width() + visibleWidth, stackBounds.top);
+ stackBounds.offsetTo(-stackBounds.width() + mMinimizedVisibleSize, stackBounds.top);
} else {
- stackBounds.offsetTo(displaySize.x - visibleWidth, stackBounds.top);
+ stackBounds.offsetTo(displaySize.x - mMinimizedVisibleSize, stackBounds.top);
}
}
@@ -220,15 +219,23 @@
* the new bounds out to {@param boundsOut}.
*/
private void snapRectToClosestEdge(Rect stackBounds, Rect movementBounds, Rect boundsOut) {
- final int fromLeft = Math.abs(stackBounds.left - movementBounds.left);
- final int fromTop = Math.abs(stackBounds.top - movementBounds.top);
- final int fromRight = Math.abs(movementBounds.right - stackBounds.left);
- final int fromBottom = Math.abs(movementBounds.bottom - stackBounds.top);
+ // If the stackBounds are minimized, then it should only be snapped back horizontally
final int boundedLeft = Math.max(movementBounds.left, Math.min(movementBounds.right,
stackBounds.left));
final int boundedTop = Math.max(movementBounds.top, Math.min(movementBounds.bottom,
stackBounds.top));
boundsOut.set(stackBounds);
+ if (stackBounds.left < movementBounds.left ||
+ stackBounds.left > movementBounds.right) {
+ boundsOut.offsetTo(boundedLeft, boundsOut.top);
+ return;
+ }
+
+ // Otherwise, just find the closest edge
+ final int fromLeft = Math.abs(stackBounds.left - movementBounds.left);
+ final int fromTop = Math.abs(stackBounds.top - movementBounds.top);
+ final int fromRight = Math.abs(movementBounds.right - stackBounds.left);
+ final int fromBottom = Math.abs(movementBounds.bottom - stackBounds.top);
if (fromLeft <= fromTop && fromLeft <= fromRight && fromLeft <= fromBottom) {
boundsOut.offsetTo(movementBounds.left, boundedTop);
} else if (fromTop <= fromLeft && fromTop <= fromRight && fromTop <= fromBottom) {
diff --git a/core/java/com/android/internal/view/BaseSurfaceHolder.java b/core/java/com/android/internal/view/BaseSurfaceHolder.java
index b41ef29..32ce0fe 100644
--- a/core/java/com/android/internal/view/BaseSurfaceHolder.java
+++ b/core/java/com/android/internal/view/BaseSurfaceHolder.java
@@ -86,7 +86,7 @@
mCallbacks.remove(callback);
}
}
-
+
public SurfaceHolder.Callback[] getCallbacks() {
if (mHaveGottenCallbacks) {
return mGottenCallbacks;
diff --git a/core/java/com/android/internal/view/IInputConnectionWrapper.java b/core/java/com/android/internal/view/IInputConnectionWrapper.java
index 4f7b106..0185e30 100644
--- a/core/java/com/android/internal/view/IInputConnectionWrapper.java
+++ b/core/java/com/android/internal/view/IInputConnectionWrapper.java
@@ -562,8 +562,6 @@
}
case DO_COMMIT_CONTENT: {
final int flags = msg.arg1;
- final boolean grantUriPermission =
- (flags & InputConnection.INPUT_CONTENT_GRANT_READ_URI_PERMISSION) != 0;
SomeArgs args = (SomeArgs) msg.obj;
try {
InputConnection ic = getInputConnection();
@@ -579,22 +577,8 @@
args.callback.setCommitContentResult(false, args.seq);
return;
}
- if (grantUriPermission) {
- try {
- inputContentInfo.requestPermission();
- } catch (Exception e) {
- Log.e(TAG, "InputConnectionInfo.requestPermission() failed", e);
- args.callback.setCommitContentResult(false, args.seq);
- return;
- }
- }
final boolean result =
ic.commitContent(inputContentInfo, flags, (Bundle) args.arg2);
- // If this request is not handled, then there is no reason to keep the URI
- // permission.
- if (grantUriPermission && !result) {
- inputContentInfo.releasePermission();
- }
args.callback.setCommitContentResult(result, args.seq);
} catch (RemoteException e) {
Log.w(TAG, "Got RemoteException calling commitContent", e);
diff --git a/core/java/com/android/internal/view/SurfaceCallbackHelper.java b/core/java/com/android/internal/view/SurfaceCallbackHelper.java
new file mode 100644
index 0000000..5b6a82c
--- /dev/null
+++ b/core/java/com/android/internal/view/SurfaceCallbackHelper.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2016 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.view;
+
+import android.os.RemoteException;
+import android.view.IWindow;
+import android.view.IWindowSession;
+import android.view.Surface;
+import android.view.SurfaceHolder;
+
+public class SurfaceCallbackHelper {
+ IWindowSession mSession;
+ IWindow.Stub mWindow;
+
+ int mFinishDrawingCollected = 0;
+ int mFinishDrawingExpected = 0;
+
+ private Runnable mFinishDrawingRunnable = new Runnable() {
+ @Override
+ public void run() {
+ synchronized (SurfaceCallbackHelper.this) {
+ mFinishDrawingCollected++;
+ if (mFinishDrawingCollected < mFinishDrawingExpected) {
+ return;
+ }
+ try {
+ mSession.finishDrawing(mWindow);
+ } catch (RemoteException e) {
+ }
+ }
+ }
+ };
+
+ public SurfaceCallbackHelper(IWindowSession session,
+ IWindow.Stub window) {
+ mSession = session;
+ mWindow = window;
+ }
+
+ public void dispatchSurfaceRedrawNeededAsync(SurfaceHolder holder, SurfaceHolder.Callback callbacks[]) {
+ if (callbacks == null || callbacks.length == 0) {
+ try {
+ mSession.finishDrawing(mWindow);
+ } catch (RemoteException e) {
+ }
+ return;
+ }
+
+ synchronized (this) {
+ mFinishDrawingExpected = callbacks.length;
+ mFinishDrawingCollected = 0;
+ }
+
+ for (SurfaceHolder.Callback c : callbacks) {
+ if (c instanceof SurfaceHolder.Callback2) {
+ ((SurfaceHolder.Callback2) c).surfaceRedrawNeededAsync(
+ holder, mFinishDrawingRunnable);
+ } else {
+ mFinishDrawingRunnable.run();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/core/java/com/android/internal/widget/LockPatternView.java b/core/java/com/android/internal/widget/LockPatternView.java
index 96492e2..4ba19f4 100644
--- a/core/java/com/android/internal/widget/LockPatternView.java
+++ b/core/java/com/android/internal/widget/LockPatternView.java
@@ -24,6 +24,7 @@
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.CanvasProperty;
+import android.graphics.drawable.Drawable;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
@@ -143,6 +144,10 @@
private PatternExploreByTouchHelper mExploreByTouchHelper;
private AudioManager mAudioManager;
+ private Drawable mSelectedDrawable;
+ private Drawable mNotSelectedDrawable;
+ private boolean mUseLockPatternDrawable;
+
/**
* Represents a cell in the 3 X 3 matrix of the unlock pattern view.
*/
@@ -314,6 +319,12 @@
mDotSizeActivated = getResources().getDimensionPixelSize(
R.dimen.lock_pattern_dot_size_activated);
+ mUseLockPatternDrawable = getResources().getBoolean(R.bool.use_lock_pattern_drawable);
+ if (mUseLockPatternDrawable) {
+ mSelectedDrawable = getResources().getDrawable(R.drawable.lockscreen_selected);
+ mNotSelectedDrawable = getResources().getDrawable(R.drawable.lockscreen_notselected);
+ }
+
mPaint.setAntiAlias(true);
mPaint.setDither(true);
@@ -621,6 +632,11 @@
final int height = h - mPaddingTop - mPaddingBottom;
mSquareHeight = height / 3.0f;
mExploreByTouchHelper.invalidateRoot();
+
+ if (mUseLockPatternDrawable) {
+ mNotSelectedDrawable.setBounds(mPaddingLeft, mPaddingTop, width, height);
+ mSelectedDrawable.setBounds(mPaddingLeft, mPaddingTop, width, height);
+ }
}
private int resolveMeasured(int measureSpec, int desired)
@@ -1095,14 +1111,18 @@
CellState cellState = mCellStates[i][j];
float centerX = getCenterXForColumn(j);
float translationY = cellState.translationY;
- if (isHardwareAccelerated() && cellState.hwAnimating) {
- DisplayListCanvas displayListCanvas = (DisplayListCanvas) canvas;
- displayListCanvas.drawCircle(cellState.hwCenterX, cellState.hwCenterY,
- cellState.hwRadius, cellState.hwPaint);
- } else {
- drawCircle(canvas, (int) centerX, (int) centerY + translationY,
- cellState.radius, drawLookup[i][j], cellState.alpha);
+ if (mUseLockPatternDrawable) {
+ drawCellDrawable(canvas, i, j, cellState.radius, drawLookup[i][j]);
+ } else {
+ if (isHardwareAccelerated() && cellState.hwAnimating) {
+ DisplayListCanvas displayListCanvas = (DisplayListCanvas) canvas;
+ displayListCanvas.drawCircle(cellState.hwCenterX, cellState.hwCenterY,
+ cellState.hwRadius, cellState.hwPaint);
+ } else {
+ drawCircle(canvas, (int) centerX, (int) centerY + translationY,
+ cellState.radius, drawLookup[i][j], cellState.alpha);
+ }
}
}
}
@@ -1193,6 +1213,30 @@
canvas.drawCircle(centerX, centerY, radius, mPaint);
}
+ /**
+ * @param partOfPattern Whether this circle is part of the pattern.
+ */
+ private void drawCellDrawable(Canvas canvas, int i, int j, float radius,
+ boolean partOfPattern) {
+ Rect dst = new Rect(
+ (int) (mPaddingLeft + j * mSquareWidth),
+ (int) (mPaddingTop + i * mSquareHeight),
+ (int) (mPaddingLeft + (j + 1) * mSquareWidth),
+ (int) (mPaddingTop + (i + 1) * mSquareHeight));
+ float scale = radius / (mDotSize / 2);
+
+ // Only draw on this square with the appropriate scale.
+ canvas.save();
+ canvas.clipRect(dst);
+ canvas.scale(scale, scale, dst.centerX(), dst.centerY());
+ if (!partOfPattern || scale > 1) {
+ mNotSelectedDrawable.draw(canvas);
+ } else {
+ mSelectedDrawable.draw(canvas);
+ }
+ canvas.restore();
+ }
+
@Override
protected Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
diff --git a/core/java/com/android/internal/widget/Smileys.java b/core/java/com/android/internal/widget/Smileys.java
deleted file mode 100644
index d5e8d03..0000000
--- a/core/java/com/android/internal/widget/Smileys.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2009 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.widget;
-
-import com.android.internal.R;
-
-/**
- * Temp stupidity until we have a real emoticon API.
- */
-public class Smileys {
- private static final int[] sIconIds = {
- R.drawable.emo_im_happy,
- R.drawable.emo_im_sad,
- R.drawable.emo_im_winking,
- R.drawable.emo_im_tongue_sticking_out,
- R.drawable.emo_im_surprised,
- R.drawable.emo_im_kissing,
- R.drawable.emo_im_yelling,
- R.drawable.emo_im_cool,
- R.drawable.emo_im_money_mouth,
- R.drawable.emo_im_foot_in_mouth,
- R.drawable.emo_im_embarrassed,
- R.drawable.emo_im_angel,
- R.drawable.emo_im_undecided,
- R.drawable.emo_im_crying,
- R.drawable.emo_im_lips_are_sealed,
- R.drawable.emo_im_laughing,
- R.drawable.emo_im_wtf
- };
-
- public static int HAPPY = 0;
- public static int SAD = 1;
- public static int WINKING = 2;
- public static int TONGUE_STICKING_OUT = 3;
- public static int SURPRISED = 4;
- public static int KISSING = 5;
- public static int YELLING = 6;
- public static int COOL = 7;
- public static int MONEY_MOUTH = 8;
- public static int FOOT_IN_MOUTH = 9;
- public static int EMBARRASSED = 10;
- public static int ANGEL = 11;
- public static int UNDECIDED = 12;
- public static int CRYING = 13;
- public static int LIPS_ARE_SEALED = 14;
- public static int LAUGHING = 15;
- public static int WTF = 16;
-
- public static int getSmileyResource(int which) {
- return sIconIds[which];
- }
-}
diff --git a/core/java/com/android/internal/widget/SwipeDismissLayout.java b/core/java/com/android/internal/widget/SwipeDismissLayout.java
index b5d6268..2a5957c 100644
--- a/core/java/com/android/internal/widget/SwipeDismissLayout.java
+++ b/core/java/com/android/internal/widget/SwipeDismissLayout.java
@@ -23,6 +23,7 @@
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
+import android.content.ContextWrapper;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.TypedArray;
@@ -33,7 +34,6 @@
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
import android.view.animation.DecelerateInterpolator;
import android.widget.FrameLayout;
@@ -44,7 +44,6 @@
private static final String TAG = "SwipeDismissLayout";
private static final float DISMISS_MIN_DRAG_WIDTH_RATIO = .33f;
- private boolean mUseDynamicTranslucency = true;
public interface OnDismissedListener {
void onDismissed(SwipeDismissLayout layout);
@@ -64,6 +63,8 @@
void onSwipeCancelled(SwipeDismissLayout layout);
}
+ private boolean mIsWindowNativelyTranslucent;
+
// Cached ViewConfiguration and system-wide constant values
private int mSlop;
private int mMinFlingVelocity;
@@ -78,24 +79,12 @@
private VelocityTracker mVelocityTracker;
private float mTranslationX;
private boolean mBlockGesture = false;
+ private boolean mActivityTranslucencyConverted = false;
private final DismissAnimator mDismissAnimator = new DismissAnimator();
private OnDismissedListener mDismissedListener;
private OnSwipeProgressChangedListener mProgressListener;
- private ViewTreeObserver.OnEnterAnimationCompleteListener mOnEnterAnimationCompleteListener =
- new ViewTreeObserver.OnEnterAnimationCompleteListener() {
- @Override
- public void onEnterAnimationComplete() {
- // SwipeDismissLayout assumes that the host Activity is translucent
- // and temporarily disables translucency when it is fully visible.
- // As soon as the user starts swiping, we will re-enable
- // translucency.
- if (mUseDynamicTranslucency && getContext() instanceof Activity) {
- ((Activity) getContext()).convertFromTranslucent();
- }
- }
- };
private BroadcastReceiver mScreenOffReceiver = new BroadcastReceiver() {
private Runnable mRunnable = new Runnable() {
@Override
@@ -141,8 +130,8 @@
mMinFlingVelocity = vc.getScaledMinimumFlingVelocity();
TypedArray a = context.getTheme().obtainStyledAttributes(
com.android.internal.R.styleable.Theme);
- mUseDynamicTranslucency = !a.hasValue(
- com.android.internal.R.styleable.Window_windowIsTranslucent);
+ mIsWindowNativelyTranslucent = a.getBoolean(
+ com.android.internal.R.styleable.Window_windowIsTranslucent, false);
a.recycle();
}
@@ -157,20 +146,12 @@
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
- if (getContext() instanceof Activity) {
- getViewTreeObserver().addOnEnterAnimationCompleteListener(
- mOnEnterAnimationCompleteListener);
- }
getContext().registerReceiver(mScreenOffReceiver, mScreenOffFilter);
}
@Override
protected void onDetachedFromWindow() {
getContext().unregisterReceiver(mScreenOffReceiver);
- if (getContext() instanceof Activity) {
- getViewTreeObserver().removeOnEnterAnimationCompleteListener(
- mOnEnterAnimationCompleteListener);
- }
super.onDetachedFromWindow();
}
@@ -273,9 +254,6 @@
mLastX = ev.getRawX();
updateSwiping(ev);
if (mSwiping) {
- if (mUseDynamicTranslucency && getContext() instanceof Activity) {
- ((Activity) getContext()).convertToTranslucent(null, null);
- }
setProgress(ev.getRawX() - mDownX);
break;
}
@@ -298,8 +276,12 @@
}
protected void cancel() {
- if (mUseDynamicTranslucency && getContext() instanceof Activity) {
- ((Activity) getContext()).convertFromTranslucent();
+ if (!mIsWindowNativelyTranslucent) {
+ Activity activity = findActivity();
+ if (activity != null && mActivityTranslucencyConverted) {
+ activity.convertFromTranslucent();
+ mActivityTranslucencyConverted = false;
+ }
}
if (mProgressListener != null) {
mProgressListener.onSwipeCancelled(this);
@@ -323,6 +305,7 @@
}
private void updateSwiping(MotionEvent ev) {
+ boolean oldSwiping = mSwiping;
if (!mSwiping) {
float deltaX = ev.getRawX() - mDownX;
float deltaY = ev.getRawY() - mDownY;
@@ -332,6 +315,16 @@
mSwiping = false;
}
}
+
+ if (mSwiping && !oldSwiping) {
+ // Swiping has started
+ if (!mIsWindowNativelyTranslucent) {
+ Activity activity = findActivity();
+ if (activity != null) {
+ mActivityTranslucencyConverted = activity.convertToTranslucent(null, null);
+ }
+ }
+ }
}
private void updateDismiss(MotionEvent ev) {
@@ -404,6 +397,17 @@
return 1 - progress * progress * progress;
}
+ private Activity findActivity() {
+ Context context = getContext();
+ while (context instanceof ContextWrapper) {
+ if (context instanceof Activity) {
+ return (Activity) context;
+ }
+ context = ((ContextWrapper) context).getBaseContext();
+ }
+ return null;
+ }
+
private class DismissAnimator implements AnimatorUpdateListener, Animator.AnimatorListener {
private final TimeInterpolator DISMISS_INTERPOLATOR = new DecelerateInterpolator(1.5f);
private final long DISMISS_DURATION = 250;
diff --git a/core/jni/Android.mk b/core/jni/Android.mk
index 252f168..ab784a6 100644
--- a/core/jni/Android.mk
+++ b/core/jni/Android.mk
@@ -60,7 +60,6 @@
android_graphics_drawable_VectorDrawable.cpp \
android_view_DisplayEventReceiver.cpp \
android_view_DisplayListCanvas.cpp \
- android_view_GraphicBuffer.cpp \
android_view_HardwareLayer.cpp \
android_view_InputChannel.cpp \
android_view_InputDevice.cpp \
@@ -118,8 +117,10 @@
android/graphics/ColorFilter.cpp \
android/graphics/DrawFilter.cpp \
android/graphics/FontFamily.cpp \
+ android/graphics/FontUtils.cpp \
android/graphics/CreateJavaOutputStreamAdaptor.cpp \
android/graphics/GIFMovie.cpp \
+ android/graphics/GraphicBuffer.cpp \
android/graphics/Graphics.cpp \
android/graphics/HarfBuzzNGFaceSkia.cpp \
android/graphics/Interpolator.cpp \
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index 6c9a764..c195cfe 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -57,6 +57,7 @@
extern int register_android_graphics_BitmapRegionDecoder(JNIEnv*);
extern int register_android_graphics_Camera(JNIEnv* env);
extern int register_android_graphics_CreateJavaOutputStreamAdaptor(JNIEnv* env);
+extern int register_android_graphics_GraphicBuffer(JNIEnv* env);
extern int register_android_graphics_Graphics(JNIEnv* env);
extern int register_android_graphics_Interpolator(JNIEnv* env);
extern int register_android_graphics_MaskFilter(JNIEnv* env);
@@ -134,7 +135,6 @@
extern int register_android_graphics_pdf_PdfRenderer(JNIEnv* env);
extern int register_android_view_DisplayEventReceiver(JNIEnv* env);
extern int register_android_view_DisplayListCanvas(JNIEnv* env);
-extern int register_android_view_GraphicBuffer(JNIEnv* env);
extern int register_android_view_HardwareLayer(JNIEnv* env);
extern int register_android_view_RenderNode(JNIEnv* env);
extern int register_android_view_RenderNodeAnimator(JNIEnv* env);
@@ -1296,7 +1296,6 @@
REG_JNI(register_android_view_DisplayEventReceiver),
REG_JNI(register_android_view_RenderNode),
REG_JNI(register_android_view_RenderNodeAnimator),
- REG_JNI(register_android_view_GraphicBuffer),
REG_JNI(register_android_view_DisplayListCanvas),
REG_JNI(register_android_view_HardwareLayer),
REG_JNI(register_android_view_ThreadedRenderer),
@@ -1328,6 +1327,7 @@
REG_JNI(register_android_graphics_ColorFilter),
REG_JNI(register_android_graphics_DrawFilter),
REG_JNI(register_android_graphics_FontFamily),
+ REG_JNI(register_android_graphics_GraphicBuffer),
REG_JNI(register_android_graphics_Interpolator),
REG_JNI(register_android_graphics_MaskFilter),
REG_JNI(register_android_graphics_Matrix),
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp
index 59cbc93..2bde991 100755
--- a/core/jni/android/graphics/Bitmap.cpp
+++ b/core/jni/android/graphics/Bitmap.cpp
@@ -1,6 +1,7 @@
#define LOG_TAG "Bitmap"
#include "Bitmap.h"
+#include "GraphicBuffer.h"
#include "SkBitmap.h"
#include "SkPixelRef.h"
#include "SkImageEncoder.h"
@@ -1291,7 +1292,7 @@
return static_cast<jint>(bitmapHandle->getAllocationByteCount());
}
-static jobject Bitmap_nativeCopyPreserveInternalConfig(JNIEnv* env, jobject, jlong bitmapPtr) {
+static jobject Bitmap_copyPreserveInternalConfig(JNIEnv* env, jobject, jlong bitmapPtr) {
LocalScopedBitmap bitmapHandle(bitmapPtr);
LOG_ALWAYS_FATAL_IF(!bitmapHandle->isHardware(),
"Hardware config is only supported config in Bitmap_nativeCopyPreserveInternalConfig");
@@ -1308,6 +1309,26 @@
return createBitmap(env, allocator.getStorageObjAndReset(), kBitmapCreateFlag_None);
}
+static jobject Bitmap_createHardwareBitmap(JNIEnv* env, jobject, jobject graphicBuffer) {
+ sp<GraphicBuffer> buffer(graphicBufferForJavaObject(env, graphicBuffer));
+ sk_sp<Bitmap> bitmap = Bitmap::createFrom(buffer);
+ if (!bitmap.get()) {
+ ALOGW("failed to create hardware bitmap from graphic buffer");
+ return NULL;
+ }
+ return bitmap::createBitmap(env, bitmap.release(), android::bitmap::kBitmapCreateFlag_None);
+}
+
+static jobject Bitmap_createGraphicBufferHandle(JNIEnv* env, jobject, jlong bitmapPtr) {
+ LocalScopedBitmap bitmapHandle(bitmapPtr);
+ LOG_ALWAYS_FATAL_IF(!bitmapHandle->isHardware(),
+ "Hardware config is only supported config in Bitmap_getGraphicBuffer");
+
+ Bitmap& hwuiBitmap = bitmapHandle->bitmap();
+ sp<GraphicBuffer> buffer(hwuiBitmap.graphicBuffer());
+ return createJavaGraphicBuffer(env, buffer);
+}
+
///////////////////////////////////////////////////////////////////////////////
static jclass make_globalref(JNIEnv* env, const char classname[])
{
@@ -1367,7 +1388,11 @@
{ "nativePrepareToDraw", "(J)V", (void*)Bitmap_prepareToDraw },
{ "nativeGetAllocationByteCount", "(J)I", (void*)Bitmap_getAllocationByteCount },
{ "nativeCopyPreserveInternalConfig", "(J)Landroid/graphics/Bitmap;",
- (void*)Bitmap_nativeCopyPreserveInternalConfig },
+ (void*)Bitmap_copyPreserveInternalConfig },
+ { "nativeCreateHardwareBitmap", "(Landroid/graphics/GraphicBuffer;)Landroid/graphics/Bitmap;",
+ (void*) Bitmap_createHardwareBitmap },
+ { "nativeCreateGraphicBufferHandle", "(J)Landroid/graphics/GraphicBuffer;",
+ (void*) Bitmap_createGraphicBufferHandle }
};
int register_android_graphics_Bitmap(JNIEnv* env)
diff --git a/core/jni/android/graphics/FontFamily.cpp b/core/jni/android/graphics/FontFamily.cpp
index 15e7165..685c93d 100644
--- a/core/jni/android/graphics/FontFamily.cpp
+++ b/core/jni/android/graphics/FontFamily.cpp
@@ -30,6 +30,7 @@
#include <android_runtime/android_util_AssetManager.h>
#include <androidfw/AssetManager.h>
#include "Utils.h"
+#include "FontUtils.h"
#include <hwui/MinikinSkia.h>
#include <hwui/Typeface.h>
@@ -39,27 +40,54 @@
namespace android {
-static jlong FontFamily_create(JNIEnv* env, jobject clazz, jstring lang, jint variant) {
- if (lang == NULL) {
- return (jlong)new minikin::FontFamily(variant);
+struct NativeFamilyBuilder {
+ uint32_t langId;
+ int variant;
+ std::vector<minikin::Font> fonts;
+};
+
+static jlong FontFamily_initBuilder(JNIEnv* env, jobject clazz, jstring lang, jint variant) {
+ NativeFamilyBuilder* builder = new NativeFamilyBuilder();
+ if (lang != nullptr) {
+ ScopedUtfChars str(env, lang);
+ builder->langId = minikin::FontStyle::registerLanguageList(str.c_str());
+ } else {
+ builder->langId = minikin::FontStyle::registerLanguageList("");
}
- ScopedUtfChars str(env, lang);
- uint32_t langId = minikin::FontStyle::registerLanguageList(str.c_str());
- return (jlong)new minikin::FontFamily(langId, variant);
+ builder->variant = variant;
+ return reinterpret_cast<jlong>(builder);
}
-static void FontFamily_unref(JNIEnv* env, jobject clazz, jlong familyPtr) {
+static jlong FontFamily_create(jlong builderPtr) {
+ if (builderPtr == 0) {
+ return 0;
+ }
+ NativeFamilyBuilder* builder = reinterpret_cast<NativeFamilyBuilder*>(builderPtr);
+ minikin::FontFamily* family = new minikin::FontFamily(
+ builder->langId, builder->variant, std::move(builder->fonts));
+ delete builder;
+ return reinterpret_cast<jlong>(family);
+}
+
+static void FontFamily_unref(jlong familyPtr) {
minikin::FontFamily* fontFamily = reinterpret_cast<minikin::FontFamily*>(familyPtr);
fontFamily->Unref();
}
-static jboolean addSkTypeface(minikin::FontFamily* family, sk_sp<SkTypeface> face,
- const void* fontData, size_t fontSize, int ttcIndex) {
+static void addSkTypeface(jlong builderPtr, sk_sp<SkTypeface> face, const void* fontData,
+ size_t fontSize, int ttcIndex) {
minikin::MinikinFont* minikinFont =
new MinikinFontSkia(std::move(face), fontData, fontSize, ttcIndex);
- bool result = family->addFont(minikinFont);
+ NativeFamilyBuilder* builder = reinterpret_cast<NativeFamilyBuilder*>(builderPtr);
+ int weight;
+ bool italic;
+ if (!minikin::FontFamily::analyzeStyle(minikinFont, &weight, &italic)) {
+ ALOGE("analyzeStyle failed. Using default style");
+ weight = 400;
+ italic = false;
+ }
+ builder->fonts.push_back(minikin::Font(minikinFont, minikin::FontStyle(weight / 100, italic)));
minikinFont->Unref();
- return result;
}
static void release_global_ref(const void* /*data*/, void* context) {
@@ -85,7 +113,7 @@
}
}
-static jboolean FontFamily_addFont(JNIEnv* env, jobject clazz, jlong familyPtr, jobject bytebuf,
+static jboolean FontFamily_addFont(JNIEnv* env, jobject clazz, jlong builderPtr, jobject bytebuf,
jint ttcIndex) {
NPE_CHECK_RETURN_ZERO(env, bytebuf);
const void* fontPtr = env->GetDirectBufferAddress(bytebuf);
@@ -112,21 +140,11 @@
ALOGE("addFont failed to create font");
return false;
}
- minikin::FontFamily* fontFamily = reinterpret_cast<minikin::FontFamily*>(familyPtr);
- return addSkTypeface(fontFamily, std::move(face), fontPtr, (size_t)fontSize, ttcIndex);
+ addSkTypeface(builderPtr, std::move(face), fontPtr, (size_t)fontSize, ttcIndex);
+ return true;
}
-static struct {
- jmethodID mGet;
- jmethodID mSize;
-} gListClassInfo;
-
-static struct {
- jfieldID mTag;
- jfieldID mStyleValue;
-} gAxisClassInfo;
-
-static jboolean FontFamily_addFontWeightStyle(JNIEnv* env, jobject clazz, jlong familyPtr,
+static jboolean FontFamily_addFontWeightStyle(JNIEnv* env, jobject clazz, jlong builderPtr,
jobject font, jint ttcIndex, jobject listOfAxis, jint weight, jboolean isItalic) {
NPE_CHECK_RETURN_ZERO(env, font);
@@ -134,20 +152,22 @@
std::unique_ptr<SkFontMgr::FontParameters::Axis[]> skiaAxes;
int skiaAxesLength = 0;
if (listOfAxis) {
- jint listSize = env->CallIntMethod(listOfAxis, gListClassInfo.mSize);
+ ListHelper list(env, listOfAxis);
+ jint listSize = list.size();
skiaAxes.reset(new SkFontMgr::FontParameters::Axis[listSize]);
skiaAxesLength = listSize;
for (jint i = 0; i < listSize; ++i) {
- jobject axisObject = env->CallObjectMethod(listOfAxis, gListClassInfo.mGet, i);
+ jobject axisObject = list.get(i);
if (!axisObject) {
skiaAxes[i].fTag = 0;
skiaAxes[i].fStyleValue = 0;
continue;
}
+ AxisHelper axis(env, axisObject);
- jint tag = env->GetIntField(axisObject, gAxisClassInfo.mTag);
- jfloat stylevalue = env->GetFloatField(axisObject, gAxisClassInfo.mStyleValue);
+ jint tag = axis.getTag();
+ jfloat stylevalue = axis.getStyleValue();
skiaAxes[i].fTag = tag;
skiaAxes[i].fStyleValue = SkFloatToScalar(stylevalue);
}
@@ -178,10 +198,11 @@
ALOGE("addFont failed to create font, invalid request");
return false;
}
- minikin::FontFamily* fontFamily = reinterpret_cast<minikin::FontFamily*>(familyPtr);
minikin::MinikinFont* minikinFont =
- new MinikinFontSkia(std::move(face), fontPtr, (size_t)fontSize, ttcIndex);
- fontFamily->addFont(minikinFont, minikin::FontStyle(weight / 100, isItalic));
+ new MinikinFontSkia(std::move(face), fontPtr, fontSize, ttcIndex);
+ NativeFamilyBuilder* builder = reinterpret_cast<NativeFamilyBuilder*>(builderPtr);
+ builder->fonts.push_back(minikin::Font(minikinFont,
+ minikin::FontStyle(weight / 100, isItalic)));
minikinFont->Unref();
return true;
}
@@ -190,7 +211,7 @@
delete static_cast<Asset*>(context);
}
-static jboolean FontFamily_addFontFromAsset(JNIEnv* env, jobject, jlong familyPtr,
+static jboolean FontFamily_addFontFromAsset(JNIEnv* env, jobject, jlong builderPtr,
jobject jassetMgr, jstring jpath) {
NPE_CHECK_RETURN_ZERO(env, jassetMgr);
NPE_CHECK_RETURN_ZERO(env, jpath);
@@ -222,14 +243,16 @@
ALOGE("addFontFromAsset failed to create font %s", str.c_str());
return false;
}
- minikin::FontFamily* fontFamily = reinterpret_cast<minikin::FontFamily*>(familyPtr);
- return addSkTypeface(fontFamily, std::move(face), buf, bufSize, /* ttcIndex */ 0);
+
+ addSkTypeface(builderPtr, std::move(face), buf, bufSize, 0 /* ttc index */);
+ return true;
}
///////////////////////////////////////////////////////////////////////////////
static const JNINativeMethod gFontFamilyMethods[] = {
- { "nCreateFamily", "(Ljava/lang/String;I)J", (void*)FontFamily_create },
+ { "nInitBuilder", "(Ljava/lang/String;I)J", (void*)FontFamily_initBuilder },
+ { "nCreateFamily", "(J)J", (void*)FontFamily_create },
{ "nUnrefFamily", "(J)V", (void*)FontFamily_unref },
{ "nAddFont", "(JLjava/nio/ByteBuffer;I)Z", (void*)FontFamily_addFont },
{ "nAddFontWeightStyle", "(JLjava/nio/ByteBuffer;ILjava/util/List;IZ)Z",
@@ -243,14 +266,7 @@
int err = RegisterMethodsOrDie(env, "android/graphics/FontFamily", gFontFamilyMethods,
NELEM(gFontFamilyMethods));
- jclass listClass = FindClassOrDie(env, "java/util/List");
- gListClassInfo.mGet = GetMethodIDOrDie(env, listClass, "get", "(I)Ljava/lang/Object;");
- gListClassInfo.mSize = GetMethodIDOrDie(env, listClass, "size", "()I");
-
- jclass axisClass = FindClassOrDie(env, "android/graphics/FontListParser$Axis");
- gAxisClassInfo.mTag = GetFieldIDOrDie(env, axisClass, "tag", "I");
- gAxisClassInfo.mStyleValue = GetFieldIDOrDie(env, axisClass, "styleValue", "F");
-
+ init_FontUtils(env);
return err;
}
diff --git a/core/jni/android/graphics/FontUtils.cpp b/core/jni/android/graphics/FontUtils.cpp
new file mode 100644
index 0000000..11c2d29
--- /dev/null
+++ b/core/jni/android/graphics/FontUtils.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+#include "FontUtils.h"
+
+#include "JNIHelp.h"
+#include <core_jni_helpers.h>
+
+namespace android {
+namespace {
+
+static struct {
+ jmethodID mGet;
+ jmethodID mSize;
+} gListClassInfo;
+
+static struct {
+ jfieldID mTag;
+ jfieldID mStyleValue;
+} gAxisClassInfo;
+
+} // namespace
+
+jint ListHelper::size() const {
+ return mEnv->CallIntMethod(mList, gListClassInfo.mSize);
+}
+
+jobject ListHelper::get(jint index) const {
+ return mEnv->CallObjectMethod(mList, gListClassInfo.mGet, index);
+}
+
+jint AxisHelper::getTag() const {
+ return mEnv->GetIntField(mAxis, gAxisClassInfo.mTag);
+}
+
+jfloat AxisHelper::getStyleValue() const {
+ return mEnv->GetFloatField(mAxis, gAxisClassInfo.mStyleValue);
+}
+
+void init_FontUtils(JNIEnv* env) {
+ jclass listClass = FindClassOrDie(env, "java/util/List");
+ gListClassInfo.mGet = GetMethodIDOrDie(env, listClass, "get", "(I)Ljava/lang/Object;");
+ gListClassInfo.mSize = GetMethodIDOrDie(env, listClass, "size", "()I");
+
+ jclass axisClass = FindClassOrDie(env, "android/graphics/FontListParser$Axis");
+ gAxisClassInfo.mTag = GetFieldIDOrDie(env, axisClass, "tag", "I");
+ gAxisClassInfo.mStyleValue = GetFieldIDOrDie(env, axisClass, "styleValue", "F");
+}
+
+} // namespace android
diff --git a/core/jni/android/graphics/FontUtils.h b/core/jni/android/graphics/FontUtils.h
new file mode 100644
index 0000000..6fbd5e3
--- /dev/null
+++ b/core/jni/android/graphics/FontUtils.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+#ifndef _ANDROID_GRAPHICS_FONT_UTILS_H_
+#define _ANDROID_GRAPHICS_FONT_UTILS_H_
+
+#include <jni.h>
+
+namespace android {
+
+// Utility wrapper for java.util.List
+class ListHelper {
+public:
+ ListHelper(JNIEnv* env, jobject list) : mEnv(env), mList(list) {}
+
+ jint size() const;
+ jobject get(jint index) const;
+
+private:
+ JNIEnv* mEnv;
+ jobject mList;
+};
+
+// Utility wrapper for android.graphics.FontListParser$Axis
+class AxisHelper {
+public:
+ AxisHelper(JNIEnv* env, jobject axis) : mEnv(env), mAxis(axis) {}
+
+ jint getTag() const;
+ jfloat getStyleValue() const;
+
+private:
+ JNIEnv* mEnv;
+ jobject mAxis;
+};
+
+void init_FontUtils(JNIEnv* env);
+
+}; // namespace android
+
+#endif // _ANDROID_GRAPHICS_FONT_UTILS_H_
diff --git a/core/jni/android_view_GraphicBuffer.cpp b/core/jni/android/graphics/GraphicBuffer.cpp
similarity index 81%
rename from core/jni/android_view_GraphicBuffer.cpp
rename to core/jni/android/graphics/GraphicBuffer.cpp
index f18837f..c61b53e 100644
--- a/core/jni/android_view_GraphicBuffer.cpp
+++ b/core/jni/android/graphics/GraphicBuffer.cpp
@@ -20,9 +20,8 @@
#include "JNIHelp.h"
#include "android_os_Parcel.h"
-#include "android_view_GraphicBuffer.h"
-#include "android/graphics/GraphicsJNI.h"
-#include "Bitmap.h"
+#include "GraphicBuffer.h"
+#include "GraphicsJNI.h"
#include <android_runtime/AndroidRuntime.h>
@@ -59,6 +58,8 @@
static struct {
jfieldID mNativeObject;
+ jclass mClass;
+ jmethodID mConstructorMethodID;
} gGraphicBufferClassInfo;
static struct {
@@ -100,7 +101,7 @@
// GraphicBuffer lifecycle
// ----------------------------------------------------------------------------
-static jlong android_view_GraphiceBuffer_create(JNIEnv* env, jobject clazz,
+static jlong android_graphics_GraphicBuffer_create(JNIEnv* env, jobject clazz,
jint width, jint height, jint format, jint usage) {
sp<ISurfaceComposer> composer(ComposerService::getComposerService());
@@ -125,7 +126,7 @@
return reinterpret_cast<jlong>(wrapper);
}
-static void android_view_GraphiceBuffer_destroy(JNIEnv* env, jobject clazz,
+static void android_graphics_GraphicBuffer_destroy(JNIEnv* env, jobject clazz,
jlong wrapperHandle) {
GraphicBufferWrapper* wrapper =
reinterpret_cast<GraphicBufferWrapper*>(wrapperHandle);
@@ -151,7 +152,7 @@
}
}
-static jboolean android_view_GraphicBuffer_lockCanvas(JNIEnv* env, jobject,
+static jboolean android_graphics_GraphicBuffer_lockCanvas(JNIEnv* env, jobject,
jlong wrapperHandle, jobject canvas, jobject dirtyRect) {
GraphicBufferWrapper* wrapper =
@@ -209,7 +210,7 @@
return JNI_TRUE;
}
-static jboolean android_view_GraphicBuffer_unlockCanvasAndPost(JNIEnv* env, jobject,
+static jboolean android_graphics_GraphicBuffer_unlockCanvasAndPost(JNIEnv* env, jobject,
jlong wrapperHandle, jobject canvas) {
GraphicBufferWrapper* wrapper =
@@ -229,7 +230,7 @@
// Serialization
// ----------------------------------------------------------------------------
-static void android_view_GraphiceBuffer_write(JNIEnv* env, jobject clazz,
+static void android_graphics_GraphicBuffer_write(JNIEnv* env, jobject clazz,
jlong wrapperHandle, jobject dest) {
GraphicBufferWrapper* wrapper =
reinterpret_cast<GraphicBufferWrapper*>(wrapperHandle);
@@ -239,7 +240,7 @@
}
}
-static jlong android_view_GraphiceBuffer_read(JNIEnv* env, jobject clazz,
+static jlong android_graphics_GraphicBuffer_read(JNIEnv* env, jobject clazz,
jobject in) {
Parcel* parcel = parcelForJavaObject(env, in);
@@ -252,17 +253,6 @@
return NULL;
}
-static jobject android_view_GraphicBuffer_createHardwareBitmap(JNIEnv* env, jobject,
- jlong wrapperHandle) {
- GraphicBufferWrapper* wrapper = reinterpret_cast<GraphicBufferWrapper*>(wrapperHandle);
- sk_sp<Bitmap> bitmap = Bitmap::createFrom(wrapper->buffer);
- if (!bitmap.get()) {
- ALOGW("failed to create hardware bitmap from graphic buffer");
- return NULL;
- }
- return bitmap::createBitmap(env, bitmap.release(), android::bitmap::kBitmapCreateFlag_None);
-}
-
// ----------------------------------------------------------------------------
// External helpers
// ----------------------------------------------------------------------------
@@ -279,35 +269,46 @@
return NULL;
}
+jobject createJavaGraphicBuffer(JNIEnv* env, const sp<GraphicBuffer>& buffer) {
+ GraphicBufferWrapper* wrapper = new GraphicBufferWrapper(buffer);
+ jobject obj = env->NewObject(gGraphicBufferClassInfo.mClass,
+ gGraphicBufferClassInfo.mConstructorMethodID, buffer->getWidth(), buffer->getHeight(),
+ buffer->getPixelFormat(), buffer->getUsage(), reinterpret_cast<jlong>(wrapper));
+ return obj;
+}
+
+};
+
+using namespace android;
// ----------------------------------------------------------------------------
// JNI Glue
// ----------------------------------------------------------------------------
-const char* const kClassPathName = "android/view/GraphicBuffer";
+const char* const kClassPathName = "android/graphics/GraphicBuffer";
static const JNINativeMethod gMethods[] = {
- { "nCreateGraphicBuffer", "(IIII)J", (void*) android_view_GraphiceBuffer_create },
- { "nDestroyGraphicBuffer", "(J)V", (void*) android_view_GraphiceBuffer_destroy },
+ { "nCreateGraphicBuffer", "(IIII)J", (void*) android_graphics_GraphicBuffer_create },
+ { "nDestroyGraphicBuffer", "(J)V", (void*) android_graphics_GraphicBuffer_destroy },
{ "nWriteGraphicBufferToParcel", "(JLandroid/os/Parcel;)V",
- (void*) android_view_GraphiceBuffer_write },
+ (void*) android_graphics_GraphicBuffer_write },
{ "nReadGraphicBufferFromParcel", "(Landroid/os/Parcel;)J",
- (void*) android_view_GraphiceBuffer_read },
+ (void*) android_graphics_GraphicBuffer_read },
{ "nLockCanvas", "(JLandroid/graphics/Canvas;Landroid/graphics/Rect;)Z",
- (void*) android_view_GraphicBuffer_lockCanvas },
+ (void*) android_graphics_GraphicBuffer_lockCanvas },
{ "nUnlockCanvasAndPost", "(JLandroid/graphics/Canvas;)Z",
- (void*) android_view_GraphicBuffer_unlockCanvasAndPost },
- { "nCreateHardwareBitmap", "(J)Landroid/graphics/Bitmap;",
- (void*) android_view_GraphicBuffer_createHardwareBitmap
- }
+ (void*) android_graphics_GraphicBuffer_unlockCanvasAndPost }
};
-int register_android_view_GraphicBuffer(JNIEnv* env) {
- jclass clazz = FindClassOrDie(env, "android/view/GraphicBuffer");
- gGraphicBufferClassInfo.mNativeObject = GetFieldIDOrDie(env, clazz, "mNativeObject", "J");
+int register_android_graphics_GraphicBuffer(JNIEnv* env) {
+ gGraphicBufferClassInfo.mClass = MakeGlobalRefOrDie(env, FindClassOrDie(env, kClassPathName));
+ gGraphicBufferClassInfo.mNativeObject = GetFieldIDOrDie(env, gGraphicBufferClassInfo.mClass,
+ "mNativeObject", "J");
+ gGraphicBufferClassInfo.mConstructorMethodID = env->GetMethodID(gGraphicBufferClassInfo.mClass,
+ "<init>", "(IIIIJ)V");
- clazz = FindClassOrDie(env, "android/graphics/Rect");
+ jclass clazz = FindClassOrDie(env, "android/graphics/Rect");
gRectClassInfo.set = GetMethodIDOrDie(env, clazz, "set", "(IIII)V");
gRectClassInfo.left = GetFieldIDOrDie(env, clazz, "left", "I");
gRectClassInfo.top = GetFieldIDOrDie(env, clazz, "top", "I");
@@ -315,6 +316,4 @@
gRectClassInfo.bottom = GetFieldIDOrDie(env, clazz, "bottom", "I");
return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods));
-}
-
-};
+}
\ No newline at end of file
diff --git a/core/jni/android_view_GraphicBuffer.h b/core/jni/android/graphics/GraphicBuffer.h
similarity index 91%
rename from core/jni/android_view_GraphicBuffer.h
rename to core/jni/android/graphics/GraphicBuffer.h
index 509587c..0d72669 100644
--- a/core/jni/android_view_GraphicBuffer.h
+++ b/core/jni/android/graphics/GraphicBuffer.h
@@ -24,4 +24,6 @@
// object must be an instance of android.view.GraphicBuffer
extern sp<GraphicBuffer> graphicBufferForJavaObject(JNIEnv* env, jobject obj);
+jobject createJavaGraphicBuffer(JNIEnv* env, const sp<GraphicBuffer>& buffer);
+
}
diff --git a/core/jni/android/graphics/HarfBuzzNGFaceSkia.cpp b/core/jni/android/graphics/HarfBuzzNGFaceSkia.cpp
index aa6348e..dcb7874 100644
--- a/core/jni/android/graphics/HarfBuzzNGFaceSkia.cpp
+++ b/core/jni/android/graphics/HarfBuzzNGFaceSkia.cpp
@@ -33,7 +33,9 @@
#include "HarfBuzzNGFaceSkia.h"
#include <stdlib.h>
-#include <cutils/log.h>
+
+#include <log/log.h>
+
#include <SkPaint.h>
#include <SkPath.h>
#include <SkPoint.h>
diff --git a/core/jni/android/graphics/Typeface.cpp b/core/jni/android/graphics/Typeface.cpp
index c920b8d..0a0fce3e 100644
--- a/core/jni/android/graphics/Typeface.cpp
+++ b/core/jni/android/graphics/Typeface.cpp
@@ -17,12 +17,14 @@
#include "jni.h"
#include "core_jni_helpers.h"
+#include "FontUtils.h"
#include "GraphicsJNI.h"
#include "ScopedPrimitiveArray.h"
#include "SkTypeface.h"
#include <android_runtime/android_util_AssetManager.h>
#include <androidfw/AssetManager.h>
#include <hwui/Typeface.h>
+#include <minikin/FontFamily.h>
using namespace android;
@@ -40,6 +42,23 @@
return reinterpret_cast<jlong>(face);
}
+static jlong Typeface_createFromTypefaceWithVariation(JNIEnv* env, jobject, jlong familyHandle,
+ jobject listOfAxis) {
+ std::vector<minikin::FontVariation> variations;
+ ListHelper list(env, listOfAxis);
+ for (jint i = 0; i < list.size(); i++) {
+ jobject axisObject = list.get(i);
+ if (axisObject == nullptr) {
+ continue;
+ }
+ AxisHelper axis(env, axisObject);
+ variations.push_back(minikin::FontVariation(axis.getTag(), axis.getStyleValue()));
+ }
+ Typeface* baseTypeface = reinterpret_cast<Typeface*>(familyHandle);
+ Typeface* result = Typeface::createFromTypefaceWithVariation(baseTypeface, variations);
+ return reinterpret_cast<jlong>(result);
+}
+
static jlong Typeface_createWeightAlias(JNIEnv* env, jobject, jlong familyHandle, jint weight) {
Typeface* family = reinterpret_cast<Typeface*>(familyHandle);
Typeface* face = Typeface::createWeightAlias(family, weight);
@@ -77,6 +96,8 @@
static const JNINativeMethod gTypefaceMethods[] = {
{ "nativeCreateFromTypeface", "(JI)J", (void*)Typeface_createFromTypeface },
+ { "nativeCreateFromTypefaceWithVariation", "(JLjava/util/List;)J",
+ (void*)Typeface_createFromTypefaceWithVariation },
{ "nativeCreateWeightAlias", "(JI)J", (void*)Typeface_createWeightAlias },
{ "nativeUnref", "(J)V", (void*)Typeface_unref },
{ "nativeGetStyle", "(J)I", (void*)Typeface_getStyle },
diff --git a/core/jni/android/graphics/pdf/PdfEditor.cpp b/core/jni/android/graphics/pdf/PdfEditor.cpp
index b142925..c727519 100644
--- a/core/jni/android/graphics/pdf/PdfEditor.cpp
+++ b/core/jni/android/graphics/pdf/PdfEditor.cpp
@@ -20,7 +20,7 @@
#include <vector>
-#include <android/log.h>
+#include <log/log.h>
#include <utils/Log.h>
#include "PdfUtils.h"
diff --git a/core/jni/android_graphics_Canvas.cpp b/core/jni/android_graphics_Canvas.cpp
index be9449b..9ce5670 100644
--- a/core/jni/android_graphics_Canvas.cpp
+++ b/core/jni/android_graphics_Canvas.cpp
@@ -219,13 +219,6 @@
return nonEmptyClip ? JNI_TRUE : JNI_FALSE;
}
-static jboolean clipRegion(JNIEnv* env, jobject, jlong canvasHandle, jlong deviceRgnHandle,
- jint opHandle) {
- SkRegion* deviceRgn = reinterpret_cast<SkRegion*>(deviceRgnHandle);
- bool nonEmptyClip = get_canvas(canvasHandle)->clipRegion(deviceRgn, opHandleToClipOp(opHandle));
- return nonEmptyClip ? JNI_TRUE : JNI_FALSE;
-}
-
static void drawColor(JNIEnv* env, jobject, jlong canvasHandle, jint color, jint modeHandle) {
SkBlendMode mode = static_cast<SkBlendMode>(modeHandle);
get_canvas(canvasHandle)->drawColor(color, mode);
@@ -616,7 +609,6 @@
{"nQuickReject","(JFFFF)Z", (void*)CanvasJNI::quickRejectRect},
{"nClipRect","(JFFFFI)Z", (void*) CanvasJNI::clipRect},
{"nClipPath","(JJI)Z", (void*) CanvasJNI::clipPath},
- {"nClipRegion","(JJI)Z", (void*) CanvasJNI::clipRegion},
{"nSetDrawFilter", "(JJ)V", (void*) CanvasJNI::setDrawFilter},
};
diff --git a/core/jni/android_graphics_drawable_AnimatedVectorDrawable.cpp b/core/jni/android_graphics_drawable_AnimatedVectorDrawable.cpp
index 99a5fc7..b6b5366 100644
--- a/core/jni/android_graphics_drawable_AnimatedVectorDrawable.cpp
+++ b/core/jni/android_graphics_drawable_AnimatedVectorDrawable.cpp
@@ -15,10 +15,11 @@
*/
#define LOG_TAG "OpenGLRenderer"
+#include "android/log.h"
+
#include "jni.h"
#include "GraphicsJNI.h"
#include "core_jni_helpers.h"
-#include "log/log.h"
#include "Animator.h"
#include "Interpolator.h"
diff --git a/core/jni/android_hardware_Radio.cpp b/core/jni/android_hardware_Radio.cpp
index 42ceec4..397e67b 100644
--- a/core/jni/android_hardware_Radio.cpp
+++ b/core/jni/android_hardware_Radio.cpp
@@ -313,12 +313,14 @@
ALOGV("%s", __FUNCTION__);
int jStatus;
jobject jMetadata = NULL;
- if (nProgramInfo->metadata != NULL) {
- ALOGV("%s metadata %p", __FUNCTION__, nProgramInfo->metadata);
- jStatus = convertMetadataFromNative(env, &jMetadata, nProgramInfo->metadata);
- if (jStatus < 0) {
- return jStatus;
- }
+
+ if (nProgramInfo == nullptr || nProgramInfo->metadata == nullptr) {
+ return (jint)RADIO_STATUS_BAD_VALUE;
+ }
+
+ jStatus = convertMetadataFromNative(env, &jMetadata, nProgramInfo->metadata);
+ if (jStatus < 0) {
+ return jStatus;
}
ALOGV("%s channel %d tuned %d", __FUNCTION__, nProgramInfo->channel, nProgramInfo->tuned);
diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp
index aa4570f..14d7e81 100644
--- a/core/jni/android_os_Debug.cpp
+++ b/core/jni/android_os_Debug.cpp
@@ -16,32 +16,32 @@
#define LOG_TAG "android.os.Debug"
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
+#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
-#include <time.h>
#include <sys/time.h>
-#include <errno.h>
-#include <assert.h>
-#include <ctype.h>
-#include <malloc.h>
+#include <time.h>
+#include <unistd.h>
#include <iomanip>
#include <string>
-#include "jni.h"
+#include <android-base/stringprintf.h>
+#include <cutils/debugger.h>
+#include <log/log.h>
+#include <utils/misc.h>
+#include <utils/String8.h>
-#include "android-base/stringprintf.h"
-#include "cutils/debugger.h"
-#include "cutils/log.h"
#include "JNIHelp.h"
-#include "memtrack/memtrack.h"
-#include "memunreachable/memunreachable.h"
-#include "utils/misc.h"
-#include "utils/String8.h"
+#include "jni.h"
+#include <memtrack/memtrack.h>
+#include <memunreachable/memunreachable.h>
namespace android
{
diff --git a/core/jni/android_os_HwBinder.cpp b/core/jni/android_os_HwBinder.cpp
index 20bb885..e653900 100644
--- a/core/jni/android_os_HwBinder.cpp
+++ b/core/jni/android_os_HwBinder.cpp
@@ -26,7 +26,7 @@
#include <JNIHelp.h>
#include <android/hidl/manager/1.0/IServiceManager.h>
#include <android/hidl/base/1.0/IBase.h>
-#include <android/hidl/base/1.0/BpBase.h>
+#include <android/hidl/base/1.0/BpHwBase.h>
#include <android_runtime/AndroidRuntime.h>
#include <hidl/ServiceManagement.h>
#include <hidl/Status.h>
@@ -262,7 +262,7 @@
sp<hardware::IBinder> binder = JHwBinder::GetNativeContext(env, thiz);
/* TODO(b/33440494) this is not right */
- sp<hidl::base::V1_0::IBase> base = new hidl::base::V1_0::BpBase(binder);
+ sp<hidl::base::V1_0::IBase> base = new hidl::base::V1_0::BpHwBase(binder);
auto manager = hardware::defaultServiceManager();
@@ -331,7 +331,7 @@
}
sp<hardware::IBinder> service = hardware::toBinder<
- hidl::base::V1_0::IBase, hidl::base::V1_0::BpBase>(ret);
+ hidl::base::V1_0::IBase, hidl::base::V1_0::BpHwBase>(ret);
env->ReleaseStringUTFChars(ifaceNameObj, ifaceName);
ifaceName = NULL;
diff --git a/core/jni/android_os_HwParcel.cpp b/core/jni/android_os_HwParcel.cpp
index b9d810a..aefdc84 100644
--- a/core/jni/android_os_HwParcel.cpp
+++ b/core/jni/android_os_HwParcel.cpp
@@ -568,15 +568,16 @@
size_t parentHandle;
- const hidl_string *s = static_cast<const hidl_string *>(
- parcel->readBuffer(&parentHandle));
+ const hidl_string *s;
+ status_t err = parcel->readBuffer(&parentHandle,
+ reinterpret_cast<const void**>(&s));
- if (s == NULL) {
- signalExceptionForError(env, UNKNOWN_ERROR);
+ if (err != OK) {
+ signalExceptionForError(env, err);
return NULL;
}
- status_t err = ::android::hardware::readEmbeddedFromParcel(
+ err = ::android::hardware::readEmbeddedFromParcel(
const_cast<hidl_string *>(s),
*parcel, parentHandle, 0 /* parentOffset */);
@@ -593,20 +594,20 @@
JNIEnv *env, jobject thiz) { \
hardware::Parcel *parcel = \
JHwParcel::GetNativeContext(env, thiz)->getParcel(); \
- \
size_t parentHandle; \
\
- const hidl_vec<Type> *vec = \
- (const hidl_vec<Type> *)parcel->readBuffer(&parentHandle); \
+ const hidl_vec<Type> *vec; \
+ status_t err = parcel->readBuffer(&parentHandle, \
+ reinterpret_cast<const void**>(&vec)); \
\
- if (vec == NULL) { \
- signalExceptionForError(env, UNKNOWN_ERROR); \
+ if (err != OK) { \
+ signalExceptionForError(env, err); \
return NULL; \
} \
\
size_t childHandle; \
\
- status_t err = ::android::hardware::readEmbeddedFromParcel( \
+ err = ::android::hardware::readEmbeddedFromParcel( \
const_cast<hidl_vec<Type> *>(vec), \
*parcel, \
parentHandle, \
@@ -638,17 +639,18 @@
size_t parentHandle;
- const hidl_vec<bool> *vec =
- (const hidl_vec<bool> *)parcel->readBuffer(&parentHandle);
+ const hidl_vec<bool> *vec;
+ status_t err = parcel->readBuffer(&parentHandle,
+ reinterpret_cast<const void**>(&vec));
- if (vec == NULL) {
- signalExceptionForError(env, UNKNOWN_ERROR);
+ if (err != OK) {
+ signalExceptionForError(env, err);
return NULL;
}
size_t childHandle;
- status_t err = ::android::hardware::readEmbeddedFromParcel(
+ err = ::android::hardware::readEmbeddedFromParcel(
const_cast<hidl_vec<bool> *>(vec),
*parcel,
parentHandle,
@@ -701,16 +703,17 @@
size_t parentHandle;
- const string_vec *vec=
- (const string_vec *)parcel->readBuffer(&parentHandle);
+ const string_vec *vec;
+ status_t err = parcel->readBuffer(&parentHandle,
+ reinterpret_cast<const void **>(&vec));
- if (vec == NULL) {
- signalExceptionForError(env, UNKNOWN_ERROR);
+ if (err != OK) {
+ signalExceptionForError(env, err);
return NULL;
}
size_t childHandle;
- status_t err = ::android::hardware::readEmbeddedFromParcel(
+ err = ::android::hardware::readEmbeddedFromParcel(
const_cast<string_vec *>(vec),
*parcel, parentHandle, 0 /* parentOffset */, &childHandle);
@@ -807,9 +810,10 @@
JHwParcel::GetNativeContext(env, thiz)->getParcel();
size_t handle;
- const void *ptr = parcel->readBuffer(&handle);
+ const void *ptr;
+ status_t status = parcel->readBuffer(&handle, &ptr);
- if (ptr == nullptr) {
+ if (status != OK) {
jniThrowException(env, "java/util/NoSuchElementException", NULL);
return nullptr;
}
@@ -824,10 +828,11 @@
size_t childHandle;
- const void *ptr =
- parcel->readEmbeddedBuffer(&childHandle, parentHandle, offset);
+ const void *ptr;
+ status_t status =
+ parcel->readEmbeddedBuffer(&childHandle, parentHandle, offset, &ptr);
- if (ptr == nullptr) {
+ if (status != OK) {
jniThrowException(env, "java/util/NoSuchElementException", NULL);
return 0;
}
diff --git a/core/jni/android_os_Trace.cpp b/core/jni/android_os_Trace.cpp
index ea893f0..de91f70 100644
--- a/core/jni/android_os_Trace.cpp
+++ b/core/jni/android_os_Trace.cpp
@@ -19,15 +19,14 @@
#include <inttypes.h>
+#include <cutils/trace.h>
+#include <utils/String8.h>
+#include <log/log.h>
+
#include <JNIHelp.h>
#include <ScopedUtfChars.h>
#include <ScopedStringChars.h>
-#include <utils/String8.h>
-
-#include <cutils/trace.h>
-#include <cutils/log.h>
-
namespace android {
static void sanitizeString(String8& utf8Chars) {
diff --git a/core/jni/android_text_StaticLayout.cpp b/core/jni/android_text_StaticLayout.cpp
index 02fa872..c05ef26 100644
--- a/core/jni/android_text_StaticLayout.cpp
+++ b/core/jni/android_text_StaticLayout.cpp
@@ -54,7 +54,8 @@
// hyphenFrequency)
static void nSetupParagraph(JNIEnv* env, jclass, jlong nativePtr, jcharArray text, jint length,
jfloat firstWidth, jint firstWidthLineLimit, jfloat restWidth,
- jintArray variableTabStops, jint defaultTabStop, jint strategy, jint hyphenFrequency) {
+ jintArray variableTabStops, jint defaultTabStop, jint strategy, jint hyphenFrequency,
+ jboolean isJustified) {
minikin::LineBreaker* b = reinterpret_cast<minikin::LineBreaker*>(nativePtr);
b->resize(length);
env->GetCharArrayRegion(text, 0, length, b->buffer());
@@ -68,6 +69,7 @@
}
b->setStrategy(static_cast<minikin::BreakStrategy>(strategy));
b->setHyphenationFrequency(static_cast<minikin::HyphenationFrequency>(hyphenFrequency));
+ b->setJustified(isJustified);
}
static void recycleCopy(JNIEnv* env, jobject recycle, jintArray recycleBreaks,
@@ -190,7 +192,7 @@
{"nFinishBuilder", "(J)V", (void*) nFinishBuilder},
{"nLoadHyphenator", "(Ljava/nio/ByteBuffer;I)J", (void*) nLoadHyphenator},
{"nSetLocale", "(JLjava/lang/String;J)V", (void*) nSetLocale},
- {"nSetupParagraph", "(J[CIFIF[IIII)V", (void*) nSetupParagraph},
+ {"nSetupParagraph", "(J[CIFIF[IIIIZ)V", (void*) nSetupParagraph},
{"nSetIndents", "(J[I)V", (void*) nSetIndents},
{"nAddStyleRun", "(JJJIIZ)F", (void*) nAddStyleRun},
{"nAddMeasuredRun", "(JII[F)V", (void*) nAddMeasuredRun},
diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp
index 5559d48..abcd1e7 100644
--- a/core/jni/android_util_Binder.cpp
+++ b/core/jni/android_util_Binder.cpp
@@ -29,19 +29,19 @@
#include <sys/types.h>
#include <unistd.h>
-#include <utils/Atomic.h>
#include <binder/IInterface.h>
+#include <binder/IServiceManager.h>
#include <binder/IPCThreadState.h>
-#include <utils/Log.h>
-#include <utils/SystemClock.h>
-#include <utils/List.h>
-#include <utils/KeyedVector.h>
-#include <log/logger.h>
#include <binder/Parcel.h>
#include <binder/ProcessState.h>
-#include <binder/IServiceManager.h>
-#include <utils/threads.h>
+#include <log/log.h>
+#include <utils/Atomic.h>
+#include <utils/KeyedVector.h>
+#include <utils/List.h>
+#include <utils/Log.h>
#include <utils/String8.h>
+#include <utils/SystemClock.h>
+#include <utils/threads.h>
#include <ScopedUtfChars.h>
#include <ScopedLocalRef.h>
diff --git a/core/jni/android_util_EventLog.cpp b/core/jni/android_util_EventLog.cpp
index 3219d59..0b4fbcc 100644
--- a/core/jni/android_util_EventLog.cpp
+++ b/core/jni/android_util_EventLog.cpp
@@ -18,6 +18,8 @@
#include <log/log_event_list.h>
+#include <log/log.h>
+
#include "JNIHelp.h"
#include "core_jni_helpers.h"
#include "jni.h"
diff --git a/core/jni/android_util_Log.cpp b/core/jni/android_util_Log.cpp
index 7719e31..20dfe78 100644
--- a/core/jni/android_util_Log.cpp
+++ b/core/jni/android_util_Log.cpp
@@ -21,7 +21,7 @@
#include <android-base/macros.h>
#include <assert.h>
#include <cutils/properties.h>
-#include <log/logger.h> // For LOGGER_ENTRY_MAX_PAYLOAD.
+#include <log/log.h> // For LOGGER_ENTRY_MAX_PAYLOAD.
#include <utils/Log.h>
#include <utils/String8.h>
diff --git a/core/jni/android_util_jar_StrictJarFile.cpp b/core/jni/android_util_jar_StrictJarFile.cpp
index 2e31c8b..4f1f926 100644
--- a/core/jni/android_util_jar_StrictJarFile.cpp
+++ b/core/jni/android_util_jar_StrictJarFile.cpp
@@ -20,13 +20,14 @@
#include <memory>
#include <string>
+#include <log/log.h>
+
#include "JNIHelp.h"
#include "JniConstants.h"
#include "ScopedLocalRef.h"
#include "ScopedUtfChars.h"
#include "jni.h"
#include "ziparchive/zip_archive.h"
-#include "cutils/log.h"
namespace android {
diff --git a/core/jni/android_view_ThreadedRenderer.cpp b/core/jni/android_view_ThreadedRenderer.cpp
index 14dcb3f..c00bcd4 100644
--- a/core/jni/android_view_ThreadedRenderer.cpp
+++ b/core/jni/android_view_ThreadedRenderer.cpp
@@ -36,7 +36,6 @@
#include <android_runtime/android_view_Surface.h>
#include <system/window.h>
-#include "android_view_GraphicBuffer.h"
#include "android_os_MessageQueue.h"
#include <Animator.h>
diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp
index cc7b958..070a2d9 100644
--- a/core/jni/com_android_internal_os_Zygote.cpp
+++ b/core/jni/com_android_internal_os_Zygote.cpp
@@ -43,6 +43,7 @@
#include <sys/wait.h>
#include <unistd.h>
+#include "android-base/logging.h"
#include <cutils/fs.h>
#include <cutils/multiuser.h>
#include <cutils/sched_policy.h>
@@ -440,6 +441,22 @@
// The list of open zygote file descriptors.
static FileDescriptorTable* gOpenFdTable = NULL;
+static void FillFileDescriptorVector(JNIEnv* env,
+ jintArray java_fds,
+ std::vector<int>* fds) {
+ CHECK(fds != nullptr);
+ if (java_fds != nullptr) {
+ ScopedIntArrayRO ar(env, java_fds);
+ if (ar.get() == nullptr) {
+ RuntimeAbort(env, __LINE__, "Bad fd array");
+ }
+ fds->reserve(ar.size());
+ for (size_t i = 0; i < ar.size(); ++i) {
+ fds->push_back(ar[i]);
+ }
+ }
+}
+
// Utility routine to fork zygote and specialize the child process.
static pid_t ForkAndSpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArray javaGids,
jint debug_flags, jobjectArray javaRlimits,
@@ -447,6 +464,7 @@
jint mount_external,
jstring java_se_info, jstring java_se_name,
bool is_system_server, jintArray fdsToClose,
+ jintArray fdsToIgnore,
jstring instructionSet, jstring dataDir) {
SetSigChldHandler();
@@ -471,12 +489,14 @@
// If this is the first fork for this zygote, create the open FD table.
// If it isn't, we just need to check whether the list of open files has
// changed (and it shouldn't in the normal case).
+ std::vector<int> fds_to_ignore;
+ FillFileDescriptorVector(env, fdsToIgnore, &fds_to_ignore);
if (gOpenFdTable == NULL) {
- gOpenFdTable = FileDescriptorTable::Create();
+ gOpenFdTable = FileDescriptorTable::Create(fds_to_ignore);
if (gOpenFdTable == NULL) {
RuntimeAbort(env, __LINE__, "Unable to construct file descriptor table.");
}
- } else if (!gOpenFdTable->Restat()) {
+ } else if (!gOpenFdTable->Restat(fds_to_ignore)) {
RuntimeAbort(env, __LINE__, "Unable to restat file descriptor table.");
}
@@ -646,7 +666,9 @@
JNIEnv* env, jclass, jint uid, jint gid, jintArray gids,
jint debug_flags, jobjectArray rlimits,
jint mount_external, jstring se_info, jstring se_name,
- jintArray fdsToClose, jstring instructionSet, jstring appDataDir) {
+ jintArray fdsToClose,
+ jintArray fdsToIgnore,
+ jstring instructionSet, jstring appDataDir) {
jlong capabilities = 0;
// Grant CAP_WAKE_ALARM to the Bluetooth process.
@@ -681,7 +703,7 @@
return ForkAndSpecializeCommon(env, uid, gid, gids, debug_flags,
rlimits, capabilities, capabilities, mount_external, se_info,
- se_name, false, fdsToClose, instructionSet, appDataDir);
+ se_name, false, fdsToClose, fdsToIgnore, instructionSet, appDataDir);
}
static jint com_android_internal_os_Zygote_nativeForkSystemServer(
@@ -692,7 +714,7 @@
debug_flags, rlimits,
permittedCapabilities, effectiveCapabilities,
MOUNT_EXTERNAL_DEFAULT, NULL, NULL, true, NULL,
- NULL, NULL);
+ NULL, NULL, NULL);
if (pid > 0) {
// The zygote process checks whether the child process has died or not.
ALOGI("System server process %d has been created", pid);
@@ -759,7 +781,7 @@
static const JNINativeMethod gMethods[] = {
{ "nativeForkAndSpecialize",
- "(II[II[[IILjava/lang/String;Ljava/lang/String;[ILjava/lang/String;Ljava/lang/String;)I",
+ "(II[II[[IILjava/lang/String;Ljava/lang/String;[I[ILjava/lang/String;Ljava/lang/String;)I",
(void *) com_android_internal_os_Zygote_nativeForkAndSpecialize },
{ "nativeForkSystemServer", "(II[II[[IJJ)I",
(void *) com_android_internal_os_Zygote_nativeForkSystemServer },
diff --git a/core/jni/fd_utils.cpp b/core/jni/fd_utils.cpp
index 969d336f3..59a536b 100644
--- a/core/jni/fd_utils.cpp
+++ b/core/jni/fd_utils.cpp
@@ -381,7 +381,7 @@
}
// static
-FileDescriptorTable* FileDescriptorTable::Create() {
+FileDescriptorTable* FileDescriptorTable::Create(const std::vector<int>& fds_to_ignore) {
DIR* d = opendir(kFdPath);
if (d == NULL) {
ALOGE("Unable to open directory %s: %s", kFdPath, strerror(errno));
@@ -396,6 +396,10 @@
if (fd == -1) {
continue;
}
+ if (std::find(fds_to_ignore.begin(), fds_to_ignore.end(), fd) != fds_to_ignore.end()) {
+ ALOGI("Ignoring open file descriptor %d", fd);
+ continue;
+ }
FileDescriptorInfo* info = FileDescriptorInfo::CreateFromFd(fd);
if (info == NULL) {
@@ -414,7 +418,7 @@
return new FileDescriptorTable(open_fd_map);
}
-bool FileDescriptorTable::Restat() {
+bool FileDescriptorTable::Restat(const std::vector<int>& fds_to_ignore) {
std::set<int> open_fds;
// First get the list of open descriptors.
@@ -431,6 +435,10 @@
if (fd == -1) {
continue;
}
+ if (std::find(fds_to_ignore.begin(), fds_to_ignore.end(), fd) != fds_to_ignore.end()) {
+ ALOGI("Ignoring open file descriptor %d", fd);
+ continue;
+ }
open_fds.insert(fd);
}
diff --git a/core/jni/fd_utils.h b/core/jni/fd_utils.h
index 9e3afd9..03298c3 100644
--- a/core/jni/fd_utils.h
+++ b/core/jni/fd_utils.h
@@ -122,9 +122,9 @@
// Creates a new FileDescriptorTable. This function scans
// /proc/self/fd for the list of open file descriptors and collects
// information about them. Returns NULL if an error occurs.
- static FileDescriptorTable* Create();
+ static FileDescriptorTable* Create(const std::vector<int>& fds_to_ignore);
- bool Restat();
+ bool Restat(const std::vector<int>& fds_to_ignore);
// Reopens all file descriptors that are contained in the table. Returns true
// if all descriptors were successfully re-opened or detached, and false if an
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 4b4fd84..84b03d2 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -1259,7 +1259,7 @@
recommendations and scores from the NetworkScoreService.
<p>Not for use by third-party applications. @hide -->
<permission android:name="android.permission.REQUEST_NETWORK_SCORES"
- android:protectionLevel="signature|privileged" />
+ android:protectionLevel="signature" />
<!-- ======================================= -->
<!-- Permissions for short range, peripheral networks -->
@@ -2993,7 +2993,7 @@
android:protectionLevel="signature" />
<!-- Must be required by an {@link
- android.service.notification.NotificationAssistantService to ensure that only the system
+ android.service.notification.NotificationAssistantService} to ensure that only the system
can bind to it.
<p>Protection level: signature
-->
diff --git a/core/res/res/drawable/lockscreen_notselected.xml b/core/res/res/drawable/lockscreen_notselected.xml
new file mode 100644
index 0000000..eecea13
--- /dev/null
+++ b/core/res/res/drawable/lockscreen_notselected.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="260dp"
+ android:height="260dp"
+ android:viewportWidth="260"
+ android:viewportHeight="260">
+
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M 43.3333 34.3333 C 48.3038627485 34.3333 52.3333 38.3627372515 52.3333 43.3333 C 52.3333 48.3038627485 48.3038627485 52.3333 43.3333 52.3333 C 38.3627372515 52.3333 34.3333 48.3038627485 34.3333 43.3333 C 34.3333 38.3627372515 38.3627372515 34.3333 43.3333 34.3333 Z" />
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M 43.3333 121 C 48.3038627485 121 52.3333 125.029437252 52.3333 130 C 52.3333 134.970562748 48.3038627485 139 43.3333 139 C 38.3627372515 139 34.3333 134.970562748 34.3333 130 C 34.3333 125.029437252 38.3627372515 121 43.3333 121 Z" />
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M 43.3333 207.6667 C 48.3038627485 207.6667 52.3333 211.696137252 52.3333 216.6667 C 52.3333 221.637262748 48.3038627485 225.6667 43.3333 225.6667 C 38.3627372515 225.6667 34.3333 221.637262748 34.3333 216.6667 C 34.3333 211.696137252 38.3627372515 207.6667 43.3333 207.6667 Z" />
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M 130 34.3333 C 134.970562748 34.3333 139 38.3627372515 139 43.3333 C 139 48.3038627485 134.970562748 52.3333 130 52.3333 C 125.029437252 52.3333 121 48.3038627485 121 43.3333 C 121 38.3627372515 125.029437252 34.3333 130 34.3333 Z" />
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M 130 121 C 134.970562748 121 139 125.029437252 139 130 C 139 134.970562748 134.970562748 139 130 139 C 125.029437252 139 121 134.970562748 121 130 C 121 125.029437252 125.029437252 121 130 121 Z" />
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M 130 207.6667 C 134.970562748 207.6667 139 211.696137252 139 216.6667 C 139 221.637262748 134.970562748 225.6667 130 225.6667 C 125.029437252 225.6667 121 221.637262748 121 216.6667 C 121 211.696137252 125.029437252 207.6667 130 207.6667 Z" />
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M 216.6667 34.3333 C 221.637262748 34.3333 225.6667 38.3627372515 225.6667 43.3333 C 225.6667 48.3038627485 221.637262748 52.3333 216.6667 52.3333 C 211.696137252 52.3333 207.6667 48.3038627485 207.6667 43.3333 C 207.6667 38.3627372515 211.696137252 34.3333 216.6667 34.3333 Z" />
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M 216.6667 121 C 221.637262748 121 225.6667 125.029437252 225.6667 130 C 225.6667 134.970562748 221.637262748 139 216.6667 139 C 211.696137252 139 207.6667 134.970562748 207.6667 130 C 207.6667 125.029437252 211.696137252 121 216.6667 121 Z" />
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M 216.6667 207.6667 C 221.637262748 207.6667 225.6667 211.696137252 225.6667 216.6667 C 225.6667 221.637262748 221.637262748 225.6667 216.6667 225.6667 C 211.696137252 225.6667 207.6667 221.637262748 207.6667 216.6667 C 207.6667 211.696137252 211.696137252 207.6667 216.6667 207.6667 Z" />
+</vector>
diff --git a/core/res/res/drawable/lockscreen_selected.xml b/core/res/res/drawable/lockscreen_selected.xml
new file mode 100644
index 0000000..eecea13
--- /dev/null
+++ b/core/res/res/drawable/lockscreen_selected.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="260dp"
+ android:height="260dp"
+ android:viewportWidth="260"
+ android:viewportHeight="260">
+
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M 43.3333 34.3333 C 48.3038627485 34.3333 52.3333 38.3627372515 52.3333 43.3333 C 52.3333 48.3038627485 48.3038627485 52.3333 43.3333 52.3333 C 38.3627372515 52.3333 34.3333 48.3038627485 34.3333 43.3333 C 34.3333 38.3627372515 38.3627372515 34.3333 43.3333 34.3333 Z" />
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M 43.3333 121 C 48.3038627485 121 52.3333 125.029437252 52.3333 130 C 52.3333 134.970562748 48.3038627485 139 43.3333 139 C 38.3627372515 139 34.3333 134.970562748 34.3333 130 C 34.3333 125.029437252 38.3627372515 121 43.3333 121 Z" />
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M 43.3333 207.6667 C 48.3038627485 207.6667 52.3333 211.696137252 52.3333 216.6667 C 52.3333 221.637262748 48.3038627485 225.6667 43.3333 225.6667 C 38.3627372515 225.6667 34.3333 221.637262748 34.3333 216.6667 C 34.3333 211.696137252 38.3627372515 207.6667 43.3333 207.6667 Z" />
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M 130 34.3333 C 134.970562748 34.3333 139 38.3627372515 139 43.3333 C 139 48.3038627485 134.970562748 52.3333 130 52.3333 C 125.029437252 52.3333 121 48.3038627485 121 43.3333 C 121 38.3627372515 125.029437252 34.3333 130 34.3333 Z" />
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M 130 121 C 134.970562748 121 139 125.029437252 139 130 C 139 134.970562748 134.970562748 139 130 139 C 125.029437252 139 121 134.970562748 121 130 C 121 125.029437252 125.029437252 121 130 121 Z" />
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M 130 207.6667 C 134.970562748 207.6667 139 211.696137252 139 216.6667 C 139 221.637262748 134.970562748 225.6667 130 225.6667 C 125.029437252 225.6667 121 221.637262748 121 216.6667 C 121 211.696137252 125.029437252 207.6667 130 207.6667 Z" />
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M 216.6667 34.3333 C 221.637262748 34.3333 225.6667 38.3627372515 225.6667 43.3333 C 225.6667 48.3038627485 221.637262748 52.3333 216.6667 52.3333 C 211.696137252 52.3333 207.6667 48.3038627485 207.6667 43.3333 C 207.6667 38.3627372515 211.696137252 34.3333 216.6667 34.3333 Z" />
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M 216.6667 121 C 221.637262748 121 225.6667 125.029437252 225.6667 130 C 225.6667 134.970562748 221.637262748 139 216.6667 139 C 211.696137252 139 207.6667 134.970562748 207.6667 130 C 207.6667 125.029437252 211.696137252 121 216.6667 121 Z" />
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M 216.6667 207.6667 C 221.637262748 207.6667 225.6667 211.696137252 225.6667 216.6667 C 225.6667 221.637262748 221.637262748 225.6667 216.6667 225.6667 C 211.696137252 225.6667 207.6667 221.637262748 207.6667 216.6667 C 207.6667 211.696137252 211.696137252 207.6667 216.6667 207.6667 Z" />
+</vector>
diff --git a/core/res/res/layout/screen_action_bar.xml b/core/res/res/layout/screen_action_bar.xml
index b3a3478..edcbb2b 100644
--- a/core/res/res/layout/screen_action_bar.xml
+++ b/core/res/res/layout/screen_action_bar.xml
@@ -35,7 +35,7 @@
android:layout_alignParentTop="true"
style="?attr/actionBarStyle"
android:transitionName="android:action_bar"
- android:touchscreenBlocksFocus="true"
+ android:keyboardNavigationCluster="true"
android:gravity="top">
<com.android.internal.widget.ActionBarView
android:id="@+id/action_bar"
@@ -54,6 +54,6 @@
android:layout_height="wrap_content"
style="?attr/actionBarSplitStyle"
android:visibility="gone"
- android:touchscreenBlocksFocus="true"
+ android:keyboardNavigationCluster="true"
android:gravity="center"/>
</com.android.internal.widget.ActionBarOverlayLayout>
diff --git a/core/res/res/layout/screen_toolbar.xml b/core/res/res/layout/screen_toolbar.xml
index 88c9cf6..0bec8c4 100644
--- a/core/res/res/layout/screen_toolbar.xml
+++ b/core/res/res/layout/screen_toolbar.xml
@@ -35,7 +35,7 @@
android:layout_alignParentTop="true"
style="?attr/actionBarStyle"
android:transitionName="android:action_bar"
- android:touchscreenBlocksFocus="true"
+ android:keyboardNavigationCluster="true"
android:gravity="top">
<Toolbar
android:id="@+id/action_bar"
diff --git a/core/res/res/raw/fallback_categories.csv b/core/res/res/raw/fallback_categories.csv
new file mode 100644
index 0000000..7ed5afa
--- /dev/null
+++ b/core/res/res/raw/fallback_categories.csv
@@ -0,0 +1,3 @@
+# Default app categories used if neither the package nor installer sets anything
+# First column is package name, second column is raw ApplicationInfo.CATEGORY value
+com.android.printspooler,7
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 5393d1a..cc64bb3 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Wekkerklanke"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Kennisgewingsklanke"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Onbekend"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wi-Fi netwerke beskikbaar</item>
- <item quantity="one">Wi-Fi-netwerk beskikbaar</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Oop Wi-Fi-netwerke beskikbaar</item>
- <item quantity="one">Oop Wi-Fi-netwerk beskikbaar</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Meld aan by Wi-Fi-netwerk"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Meld by netwerk aan"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Werk-<xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2e werk-<xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3e werk-<xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Raak en hou Terug om hierdie skerm te ontspeld."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Raak en hou Terug en Oorsig om hierdie skerm te ontspeld."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Program is vasgespeld: Dit mag nie op hierdie toestel ontspeld word nie."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Skerm vasgespeld"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Skerm ontspeld"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index feac09c..953d3da 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"የማንቂያ ድምጾች"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"የማሳወቂያ ድምፆች"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"ያልታወቀ"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">የWi-Fi አውታረ መረቦች አሉ</item>
- <item quantity="other">የWi-Fi አውታረ መረቦች አሉ</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">የሚገኙ የWi-Fi አውታረ መረቦችን ክፈት</item>
- <item quantity="other">የሚገኙ የWi-Fi አውታረ መረቦችን ክፈት</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"ወደ Wi-Fi አውታረ መረብ በመለያ ግባ"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"ወደ አውታረ መረብ በመለያ ይግቡ"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"ስራ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2ኛ ስራ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3ኛ ስራ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"ይህን ማያ ገጽ ለመንቀል ተመለስን ይንኩትና ያዙት።"</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"ይህን ማያ ገጽ ለመንቀል ተመለስ እና አጠቃላ እይታን ተጭነው ይያዙ።"</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"መተግበሪያ ተሰክቷል፦ በዚህ መሣሪያ ላይ ማላቀቅ አይፈቀድም።"</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"ማያ ገጽ ተሰክቷል"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"ማያ ገጽ ተነቅሏል"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 6f58ee4..1a8dc8e 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -1140,22 +1140,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"أصوات التنبيه"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"أصوات الإشعار"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"غير معروف"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="zero">لا تتوفر أية شبكات Wi-Fi</item>
- <item quantity="two">تتوفر شبكتا Wi-Fi</item>
- <item quantity="few">تتوفر شبكات Wi-Fi</item>
- <item quantity="many">تتوفر شبكات Wi-Fi</item>
- <item quantity="other">تتوفر شبكات Wi-Fi</item>
- <item quantity="one">تتوفر شبكة Wi-Fi واحدة</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="zero">لا تتوفر أية شبكات Wi-Fi مفتوحة</item>
- <item quantity="two">تتوفر شبكتا Wi-Fi مفتوحتان</item>
- <item quantity="few">تتوفر شبكات Wi-Fi مفتوحة</item>
- <item quantity="many">تتوفر شبكات Wi-Fi مفتوحة</item>
- <item quantity="other">تتوفر شبكات Wi-Fi مفتوحة</item>
- <item quantity="one">تتوفر شبكة Wi-Fi واحدة مفتوحة</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"تسجيل الدخول إلى شبكة Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"تسجيل الدخول إلى الشبكة"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1655,7 +1639,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> المخصص للعمل"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"العمل الثاني <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"العمل الثالث <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"لإزالة تثبيت هذه الشاشة، يمكنك لمس زر الرجوع مع الاستمرار."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"لإزالة تثبيت هذه الشاشة، يمكنك لمس زر \"رجوع\" و\"نظرة عامة\" مع الاستمرار."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"التطبيق مقيد: ولا يسمح بإلغاء التقييد على هذا الجهاز."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"تم تثبيت الشاشة"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"تم إلغاء تثبيت الشاشة"</string>
diff --git a/core/res/res/values-az-rAZ-watch/strings.xml b/core/res/res/values-az-watch/strings.xml
similarity index 100%
rename from core/res/res/values-az-rAZ-watch/strings.xml
rename to core/res/res/values-az-watch/strings.xml
diff --git a/core/res/res/values-az-rAZ-watch/styles_material.xml b/core/res/res/values-az-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-az-rAZ-watch/styles_material.xml
rename to core/res/res/values-az-watch/styles_material.xml
diff --git a/core/res/res/values-az-rAZ/strings.xml b/core/res/res/values-az/strings.xml
similarity index 99%
rename from core/res/res/values-az-rAZ/strings.xml
rename to core/res/res/values-az/strings.xml
index 7c71be2..36377e6 100644
--- a/core/res/res/values-az-rAZ/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Zəngli saat səsləri"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Bildiriş səsləri"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Naməlum"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Əlçatan Wi-Fi şəbəkələri</item>
- <item quantity="one">Əlçatan Wi-Fi şəbəkəsi</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Əlçatan açıq Wi-Fi şəbəkələri</item>
- <item quantity="one">Əlçatan açıq Wi-Fi şəbəkəsi</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Wi-Fi şəbəkəsinə daxil ol"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Şəbəkəyə daxil olun"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"İş <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2-ci İş <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3-cü İş <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Sancağı götürmək üçün Geri düyməsinə toxunun və saxlayın."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Sancağı götürmək üçün Geri və İcmal düymələrinə basıb saxlayın"</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Tətbiq sancılıb: Açmağa bu cihazda icazə verilmir."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Screen pinned"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Screen unpinned"</string>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index 6d31e32..80d81fc 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -1080,16 +1080,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Zvuci alarma"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Zvuci obaveštenja"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Nepoznato"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Wi-Fi mreže su dostupne</item>
- <item quantity="few">Wi-Fi mreže su dostupne</item>
- <item quantity="other">Wi-Fi mreže su dostupne</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">Otvorene Wi-Fi mreže su dostupne</item>
- <item quantity="few">Otvorene Wi-Fi mreže su dostupne</item>
- <item quantity="other">Otvorene Wi-Fi mreže su dostupne</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Prijavljivanje na Wi-Fi mrežu"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Prijavite se na mrežu"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1583,7 +1573,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> na poslu"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2. poslovni <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3. poslovni imejl <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Da biste otkačili ovaj ekran, dodirnite i zadržite Nazad."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Da biste otkačili ovaj ekran, dodirnite i zadržite Nazad i Pregled."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Aplikacija je zakačena: otkačinjanje nije dozvoljeno na ovom uređaju."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Ekran je zakačen"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Ekran je otkačen"</string>
diff --git a/core/res/res/values-be-rBY-watch/strings.xml b/core/res/res/values-be-watch/strings.xml
similarity index 100%
rename from core/res/res/values-be-rBY-watch/strings.xml
rename to core/res/res/values-be-watch/strings.xml
diff --git a/core/res/res/values-be-rBY-watch/styles_material.xml b/core/res/res/values-be-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-be-rBY-watch/styles_material.xml
rename to core/res/res/values-be-watch/styles_material.xml
diff --git a/core/res/res/values-be-rBY/strings.xml b/core/res/res/values-be/strings.xml
similarity index 99%
rename from core/res/res/values-be-rBY/strings.xml
rename to core/res/res/values-be/strings.xml
index a5ad1e5..e5f42c4 100644
--- a/core/res/res/values-be-rBY/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -1100,18 +1100,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Гукі будзільніка"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Гукі апавяшчэнняў"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Невядома"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">сетка Wi-Fi даступная</item>
- <item quantity="few">сеткі Wi-Fi даступныя</item>
- <item quantity="many">сетак Wi-Fi даступна</item>
- <item quantity="other">сеткі Wi-Fi даступна</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">адкрытая сетка Wi-Fi даступная</item>
- <item quantity="few">адкрытыя сеткі Wi-Fi даступныя</item>
- <item quantity="many">адкрытых сетак Wi-Fi даступна</item>
- <item quantity="other">адкрытай сеткі Wi-Fi даступна</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Уваход у сетку Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Увайдзіце ў сетку"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1607,7 +1595,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> (праца)"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"Другая праца <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"Трэцяя праца <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Каб адмацаваць гэты экран, дакраніцеся і ўтрымлівайце кнопку \"Назад\"."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Каб адмацаваць гэты экран, дакраніцеся і ўтрымлівайце кнопкі \"Назад\" і \"Агляд\"."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Праграма замацавана: адмацаванне на гэтай прыладзе не дапускаецца."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Экран замацаваны"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Экран адмацаваны"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 5770142..05b8412 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Звуци на будилника"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Звуци на известията"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Няма информация"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Има достъпни Wi-Fi мрежи</item>
- <item quantity="one">Има достъпна Wi-Fi мрежа</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Има достъпни отворени Wi-Fi мрежи</item>
- <item quantity="one">Има достъпна отворена Wi-Fi мрежа</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Влизане в Wi-Fi мрежа"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Вход в мрежата"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> за работа"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"Втори служебен профил (<xliff:g id="LABEL">%1$s</xliff:g>)"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"Трети служебен профил (<xliff:g id="LABEL">%1$s</xliff:g>)"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"За да освободите този екран, докоснете и задръжте бутона за връщане назад."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"За да освободите този екран, докоснете и задръжте бутона за връщане назад и този за общ преглед."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Приложението е фиксирано. Освобождаването му не е разрешено на това устройство."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Екранът е фиксиран"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Екранът е освободен"</string>
diff --git a/core/res/res/values-bn-rBD-watch/strings.xml b/core/res/res/values-bn-watch/strings.xml
similarity index 100%
rename from core/res/res/values-bn-rBD-watch/strings.xml
rename to core/res/res/values-bn-watch/strings.xml
diff --git a/core/res/res/values-bn-rBD-watch/styles_material.xml b/core/res/res/values-bn-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-bn-rBD-watch/styles_material.xml
rename to core/res/res/values-bn-watch/styles_material.xml
diff --git a/core/res/res/values-bn-rBD/strings.xml b/core/res/res/values-bn/strings.xml
similarity index 99%
rename from core/res/res/values-bn-rBD/strings.xml
rename to core/res/res/values-bn/strings.xml
index 8355209..dbe7938 100644
--- a/core/res/res/values-bn-rBD/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"অ্যালার্মের শব্দ"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"বিজ্ঞপ্তির শব্দ"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"অজানা"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">ওয়াই-ফাই নেটওয়ার্কগুলি উপলব্ধ রয়েছে</item>
- <item quantity="other">ওয়াই-ফাই নেটওয়ার্কগুলি উপলব্ধ রয়েছে</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">খোলা ওয়াই-ফাই নেটওয়ার্কগুলি উপলব্ধ রয়েছে</item>
- <item quantity="other">খোলা ওয়াই-ফাই নেটওয়ার্কগুলি উপলব্ধ রয়েছে</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"ওয়াই-ফাই নেটওয়ার্কে প্রবেশ করুন"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"নেটওয়ার্কে প্রবেশ করুন"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"কর্মক্ষেত্র <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"দ্বিতীয় কার্যক্ষেত্র <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"তৃতীয় কার্যক্ষেত্র <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"এই স্ক্রীনটিকে আনপিন করতে, \'ফিরুন\' স্পর্শ করুন এবং ধরে রাখুন৷"</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"এই স্ক্রীনটিকে আনপিন করতে, \'ফিরুন এবং ওভারভিউ\' স্পর্শ করে ধরে রাখুন৷"</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"অ্যাপ্লিকেশান পিন করা আছে: এই ডিভাইস এটিকে পিনমুক্ত করা মঞ্জুরিপ্রাপ্ত নয়৷"</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"স্ক্রীন পিন করা হয়েছে"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"পিন না করা স্ক্রীন"</string>
diff --git a/core/res/res/values-bs-rBA-watch/strings.xml b/core/res/res/values-bs-watch/strings.xml
similarity index 100%
rename from core/res/res/values-bs-rBA-watch/strings.xml
rename to core/res/res/values-bs-watch/strings.xml
diff --git a/core/res/res/values-bs-rBA-watch/styles_material.xml b/core/res/res/values-bs-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-bs-rBA-watch/styles_material.xml
rename to core/res/res/values-bs-watch/styles_material.xml
diff --git a/core/res/res/values-bs-rBA/strings.xml b/core/res/res/values-bs/strings.xml
similarity index 99%
rename from core/res/res/values-bs-rBA/strings.xml
rename to core/res/res/values-bs/strings.xml
index 5936d3a..c4a3b8f 100644
--- a/core/res/res/values-bs-rBA/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -1082,16 +1082,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Zvuci alarma"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Zvuci obavještenja"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Nepoznato"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Wi-Fi mreže su dostupne</item>
- <item quantity="few">Wi-Fi mreže su dostupne</item>
- <item quantity="other">Wi-Fi mreže su dostupne</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">Otvorene Wi-Fi mreže su dostupne</item>
- <item quantity="few">Otvorene Wi-Fi mreže su dostupne</item>
- <item quantity="other">Otvorene Wi-Fi mreže su dostupne</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Prijavljivanje na Wi-Fi mrežu"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Prijavite se na mrežu"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1585,7 +1575,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Poslovni <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2. poslovni <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3. poslovni <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Da biste otkačili ovaj ekran, dodirnite i držite dugme Nazad."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Da biste otkačili ovaj ekran, dodirnite i držite dugme Nazad i Pregled."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Aplikacija je prikačena. Na ovom uređaju nije dozvoljeno otkačivanje."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Ekran je zakačen"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Ekran je otkačen"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 4a61fc1..671f5d4 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Sons de l\'alarma"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Sons de notificació"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Desconegut"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Xarxes Wi-Fi disponibles</item>
- <item quantity="one">Xarxa Wi-Fi disponible</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Xarxes Wi-Fi obertes disponibles</item>
- <item quantity="one">Xarxa Wi-Fi oberta disponible</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Inicia la sessió a la xarxa Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Inicia la sessió a la xarxa"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> de la feina"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2n <xliff:g id="LABEL">%1$s</xliff:g> de la feina"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3r <xliff:g id="LABEL">%1$s</xliff:g> de la feina"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Toca i mantén premuda l\'opció Enrere per deixar de fixar aquesta pantalla."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Toca i mantén premudes les opcions Enrere i Visió general per deixar de fixar aquesta pantalla."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"S\'ha fixat l\'aplicació. En aquest dispositiu no es permet anul·lar-ne la fixació."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Pantalla fixada"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Fixació de la pantalla anul·lada"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index d5619f9..fa5b13e 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -1100,18 +1100,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Zvuky budíku"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Zvuky upozornění"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Neznámé"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="few">K dispozici jsou sítě Wi-Fi</item>
- <item quantity="many">K dispozici jsou sítě Wi-Fi</item>
- <item quantity="other">K dispozici jsou sítě Wi-Fi</item>
- <item quantity="one">K dispozici je síť Wi-Fi</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="few">K dispozici jsou veřejné sítě Wi-Fi</item>
- <item quantity="many">K dispozici jsou veřejné sítě Wi-Fi</item>
- <item quantity="other">K dispozici jsou veřejné sítě Wi-Fi</item>
- <item quantity="one">K dispozici je veřejná síť Wi-Fi</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Přihlásit se k síti Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Přihlásit se k síti"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1607,7 +1595,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Pracovní <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2. <xliff:g id="LABEL">%1$s</xliff:g> do práce"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3. <xliff:g id="LABEL">%1$s</xliff:g> do práce"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Chcete-li tuto obrazovku uvolnit, klepněte na tlačítko Zpět a podržte jej."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Chcete-li tuto obrazovku uvolnit, klepněte na tlačítko Zpět a poté na tlačítko Přehled a podržte jej."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Aplikace je připnutá: Odepnutí v tomto zařízení není povoleno."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Obrazovka připnuta"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Obrazovka uvolněna"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 89b546f..be50bcb 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -224,12 +224,12 @@
<string name="bugreport_title" msgid="2667494803742548533">"Lav fejlrapport"</string>
<string name="bugreport_message" msgid="398447048750350456">"Der indsamles oplysninger om din enheds aktuelle status, der efterfølgende sendes i en e-mail. Der går lidt tid, fra fejlrapporten påbegyndes, til den er klar til at blive sendt. Tak for tålmodigheden."</string>
<string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interaktiv rapport"</string>
- <string name="bugreport_option_interactive_summary" msgid="229299488536107968">"Brug dette workflow under de fleste omstændigheder. Det giver dig mulighed for at se status på rapporten, angive flere oplysninger om problemet og tage skærmbilleder. Nogle mindre brugte sektioner, der tager lang tid at rapportere, udelades muligvis."</string>
+ <string name="bugreport_option_interactive_summary" msgid="229299488536107968">"Brug dette workflow under de fleste omstændigheder. Det giver dig mulighed for at se status på rapporten, angive flere oplysninger om problemet og tage screenshots. Nogle mindre brugte sektioner, der tager lang tid at rapportere, udelades muligvis."</string>
<string name="bugreport_option_full_title" msgid="6354382025840076439">"Fuld rapport"</string>
- <string name="bugreport_option_full_summary" msgid="7210859858969115745">"Brug denne mulighed for at gribe mindst muligt ind, når enheden ikke reagerer eller er for langsom, eller når du har brug for alle rapportsektioner. Du har ikke mulighed for at angive flere oplysninger eller tage yderligere skærmbilleder."</string>
+ <string name="bugreport_option_full_summary" msgid="7210859858969115745">"Brug denne mulighed for at gribe mindst muligt ind, når enheden ikke reagerer eller er for langsom, eller når du har brug for alle rapportsektioner. Du har ikke mulighed for at angive flere oplysninger eller tage yderligere screenshots."</string>
<plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
- <item quantity="one">Der tages et skærmbillede til fejlrapporten om <xliff:g id="NUMBER_1">%d</xliff:g> sekund.</item>
- <item quantity="other">Der tages et skærmbillede til fejlrapporten om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder.</item>
+ <item quantity="one">Der tages et screenshot til fejlrapporten om <xliff:g id="NUMBER_1">%d</xliff:g> sekund.</item>
+ <item quantity="other">Der tages et screenshot til fejlrapporten om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder.</item>
</plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Lydløs"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Lyden er slået FRA"</string>
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Alarmlyde"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Meddelelseslyde"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Ukendt"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Tilgængelige Wi-Fi-netværk</item>
- <item quantity="other">Tilgængelige Wi-Fi-netværk</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">Åbne Wi-Fi-netværk er tilgængelige</item>
- <item quantity="other">Åbne Wi-Fi-netværk er tilgængelige</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Log ind på Wi-Fi-netværk"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Log ind på netværk"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> – arbejde"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2. <xliff:g id="LABEL">%1$s</xliff:g> til arbejde"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3. <xliff:g id="LABEL">%1$s</xliff:g> til arbejde"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Hvis du vil frigøre dette skærmbillede, skal du trykke på Tilbage og holde fingeren nede."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Hvis du vil frigøre dette skærmbillede, skal du trykke på Tilbage og Oversigt samt holde fingeren nede."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Appen er fastgjort: Det er ikke tilladt at frigøre den på denne enhed."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Skærmen blev fastgjort"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Skærmen blev frigjort"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 79152fa..3f64c9b 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Weckertöne"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Benachrichtigungstöne"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Unbekannt"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">WLAN-Netzwerke verfügbar</item>
- <item quantity="one">WLAN-Netzwerk verfügbar</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Verfügbare WLAN-Netzwerke öffnen</item>
- <item quantity="one">Verfügbares WLAN-Netzwerk öffnen</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"In WLAN-Netzwerk anmelden"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Im Netzwerk anmelden"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> (geschäftlich)"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2. <xliff:g id="LABEL">%1$s</xliff:g> (geschäftlich)"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3. <xliff:g id="LABEL">%1$s</xliff:g> (geschäftlich)"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Um die Fixierung dieses Bildschirms aufzuheben, \"Zurück\" berühren und halten."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Um die Fixierung dieses Bildschirms aufzuheben, berühre und halte gleichzeitig \"Zurück\" und \"Übersicht\"."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Die App ist fixiert. Das Aufheben der Fixierung ist auf diesem Gerät nicht zulässig."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Bildschirm fixiert"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Bildschirm gelöst"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index d89932d..21d42d9 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Ήχοι ξυπνητηριού"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Ήχοι ειδοποίησης"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Άγνωστο"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Υπάρχουν διαθέσιμα δίκτυα Wi-Fi</item>
- <item quantity="one">Υπάρχει διαθέσιμο δίκτυο Wi-Fi</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Υπάρχουν διαθέσιμα ανοικτά δίκτυα Wi-Fi</item>
- <item quantity="one">Υπάρχει διαθέσιμο ανοικτό δίκτυο Wi-Fi</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Συνδεθείτε στο δίκτυο Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Σύνδεση στο δίκτυο"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Εργασία <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"<xliff:g id="LABEL">%1$s</xliff:g> εργασίας 2"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"<xliff:g id="LABEL">%1$s</xliff:g> εργασίας 3"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Για να ξεκαρφιτσώσετε αυτήν την οθόνη, αγγίξτε παρατεταμένα \"Επιστροφή\"."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Για να ξεκαρφιτσώσετε αυτήν την οθόνη, αγγίξτε παρατεταμένα τις επιλογές \"Πίσω\" και \"Επισκόπηση\"."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Η εφαρμογή καρφιτσώθηκε: Το ξεκαρφίτσωμα δεν επιτρέπεται σε αυτήν τη συσκευή."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Η οθόνη καρφιτσώθηκε"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Η οθόνη ξεκαρφιτσώθηκε"</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 071a302..531a5ab 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Alarm Sounds"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Notification Sounds"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Unknown"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wi-Fi networks available</item>
- <item quantity="one">Wi-Fi network available</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Open Wi-Fi networks available</item>
- <item quantity="one">Open Wi-Fi network available</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Sign in to a Wi-Fi network"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Sign in to network"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Work <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2nd Work <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3rd Work <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"To unpin this screen, touch & hold Back."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"To unpin this screen, touch & hold Back and Overview."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"App is pinned: unpinning isn\'t allowed on this device."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Screen pinned"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Screen unpinned"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 071a302..531a5ab 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Alarm Sounds"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Notification Sounds"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Unknown"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wi-Fi networks available</item>
- <item quantity="one">Wi-Fi network available</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Open Wi-Fi networks available</item>
- <item quantity="one">Open Wi-Fi network available</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Sign in to a Wi-Fi network"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Sign in to network"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Work <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2nd Work <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3rd Work <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"To unpin this screen, touch & hold Back."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"To unpin this screen, touch & hold Back and Overview."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"App is pinned: unpinning isn\'t allowed on this device."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Screen pinned"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Screen unpinned"</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 071a302..531a5ab 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Alarm Sounds"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Notification Sounds"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Unknown"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wi-Fi networks available</item>
- <item quantity="one">Wi-Fi network available</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Open Wi-Fi networks available</item>
- <item quantity="one">Open Wi-Fi network available</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Sign in to a Wi-Fi network"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Sign in to network"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Work <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2nd Work <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3rd Work <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"To unpin this screen, touch & hold Back."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"To unpin this screen, touch & hold Back and Overview."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"App is pinned: unpinning isn\'t allowed on this device."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Screen pinned"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Screen unpinned"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index cbff5bb..f888bd1 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Sonidos de la alarma"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Sonidos de notificaciones"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Desconocido"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">redes de Wi-Fi disponibles</item>
- <item quantity="one">red de Wi-Fi disponible</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Abrir redes de Wi-Fi disponibles</item>
- <item quantity="one">Abrir red de Wi-Fi disponible</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Accede a una red Wi-Fi."</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Acceder a la red"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> de trabajo"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"<xliff:g id="LABEL">%1$s</xliff:g> de trabajo 2"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"<xliff:g id="LABEL">%1$s</xliff:g> de trabajo 3"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Para dejar de fijar esta pantalla, mantén presionado Atrás."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Para dejar de fijar esta pantalla, mantén presionados Atrás y Recientes."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"La aplicación está fijada, no se puede anular la fijación en este dispositivo."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Pantalla fija"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Pantalla no fija"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 93c3079..6d88d6f 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Sonidos de la alarma"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Sonidos de notificaciones"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Desconocido"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Redes Wi-Fi disponibles</item>
- <item quantity="one">Red Wi-Fi disponible</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Redes Wi-Fi abiertas disponibles</item>
- <item quantity="one">Red Wi-Fi abierta disponible</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Iniciar sesión en red Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Iniciar sesión en la red"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> de trabajo"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"<xliff:g id="LABEL">%1$s</xliff:g> de trabajo 2"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"<xliff:g id="LABEL">%1$s</xliff:g> de trabajo 3"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Mantén pulsado el botón Atrás para dejar de fijar esta pantalla."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Mantén pulsado el botón Atrás y el de aplicaciones recientes para dejar de fijar esta pantalla."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"La aplicación está fijada: no se puede deshacer la fijación en este dispositivo."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Pantalla fijada"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"La pantalla ya no está fija"</string>
diff --git a/core/res/res/values-et-rEE-watch/strings.xml b/core/res/res/values-et-watch/strings.xml
similarity index 100%
rename from core/res/res/values-et-rEE-watch/strings.xml
rename to core/res/res/values-et-watch/strings.xml
diff --git a/core/res/res/values-et-rEE-watch/styles_material.xml b/core/res/res/values-et-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-et-rEE-watch/styles_material.xml
rename to core/res/res/values-et-watch/styles_material.xml
diff --git a/core/res/res/values-et-rEE/strings.xml b/core/res/res/values-et/strings.xml
similarity index 99%
rename from core/res/res/values-et-rEE/strings.xml
rename to core/res/res/values-et/strings.xml
index 7c6c562..01edc01 100644
--- a/core/res/res/values-et-rEE/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Äratuse helid"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Märguannete helid"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Teadmata"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">WiFi-võrgud on saadaval</item>
- <item quantity="one">WiFi-võrk on saadaval</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Avatud WiFi-võrgud on saadaval</item>
- <item quantity="one">Avatud WiFi-võrk on saadaval</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Logi sisse WiFi-võrku"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Võrku sisselogimine"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Töö <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2. töö <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3. töö <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Ekraani vabastamiseks puudutage pikalt nuppu Tagasi."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Ekraani vabastamiseks puudutage pikalt nuppe Tagasi ja Ülevaade."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Rakendus on kinnitatud: vabastamine pole selles seadmes lubatud."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Ekraan on kinnitatud"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Ekraan on vabastatud"</string>
diff --git a/core/res/res/values-eu-rES-watch/strings.xml b/core/res/res/values-eu-watch/strings.xml
similarity index 100%
rename from core/res/res/values-eu-rES-watch/strings.xml
rename to core/res/res/values-eu-watch/strings.xml
diff --git a/core/res/res/values-eu-rES-watch/styles_material.xml b/core/res/res/values-eu-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-eu-rES-watch/styles_material.xml
rename to core/res/res/values-eu-watch/styles_material.xml
diff --git a/core/res/res/values-eu-rES/strings.xml b/core/res/res/values-eu/strings.xml
similarity index 99%
rename from core/res/res/values-eu-rES/strings.xml
rename to core/res/res/values-eu/strings.xml
index 98f0072..3bb4492 100644
--- a/core/res/res/values-eu-rES/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Alarma-soinuak"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Jakinarazpen-soinuak"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Ezezaguna"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wi-Fi sareak erabilgarri</item>
- <item quantity="one">Wi-Fi sarea erabilgarri</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Wi-Fi sare irekiak erabilgarri</item>
- <item quantity="one">Wi-Fi sare irekia erabilgarri</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Hasi saioa Wi-Fi sarean"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Hasi saioa sarean"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Laneko <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"Laneko 2. <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"Laneko 3. <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Pantailari aingura kentzeko, eduki sakatuta Atzera botoia."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Pantailari aingura kentzeko, eduki sakatuta Atzera eta Ikuspegi orokorra botoiak."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Aplikazioa ainguratuta dago. Gailu honetan ezin da aingura kendu."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Pantaila ainguratu da"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Aingura kendu zaio pantailari"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 0e6a982..cb2f57e 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"صداهای زنگ هشدار"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"صداهای اعلان"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"نامشخص"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">شبکه Wi-Fi در دسترس</item>
- <item quantity="other">شبکه Wi-Fi در دسترس</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">شبکه Wi-Fi باز در دسترس</item>
- <item quantity="other">شبکه Wi-Fi باز در دسترس</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"ورود به شبکه Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"ورود به سیستم شبکه"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> محل کار"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"کار دوم <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"کار سوم <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"برای برداشتن پین این صفحه، «برگشت» را لمس کنید و نگه دارید."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"برای برداشتن پین این صفحه، «برگشت» و «نمای کلی» را لمس کنید و نگهدارید."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"برنامه پین شده است: برداشتن پین در این دستگاه مجاز نیست."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"صفحه پین شد"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"پین صفحه برداشته شد"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 74b4c8b..a02017a 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Hälytysäänet"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Ilmoitusäänet"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Tuntematon"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wi-Fi-verkkoja käytettävissä</item>
- <item quantity="one">Wi-Fi-verkko käytettävissä</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Avoimia Wi-Fi-verkkoja käytettävissä</item>
- <item quantity="one">Avoin Wi-Fi-verkko käytettävissä</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Kirjaudu Wi-Fi-verkkoon"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Kirjaudu verkkoon"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> (työ)"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"Toinen <xliff:g id="LABEL">%1$s</xliff:g>, työ"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"Kolmas <xliff:g id="LABEL">%1$s</xliff:g>, työ"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Irrota näyttö koskettamalla Takaisin-painiketta pitkään."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Irrota näyttö koskettamalla pitkään Takaisin- ja Viimeisimmät-painikkeita."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Sovellus on kiinnitetty. Irrottaminen ei ole sallittua tällä laitteella."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Näyttö kiinnitetty"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Näyttö irrotettu"</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index cd23762..b864e2b 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Sons d\'alarme"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Sons de notification"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Inconnu"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Réseau Wi-Fi à proximité</item>
- <item quantity="other">Réseaux Wi-Fi à proximité</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">Réseau Wi-Fi ouvert à proximité</item>
- <item quantity="other">Réseaux Wi-Fi ouverts à proximité</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Connectez-vous au réseau Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Connectez-vous au réseau"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> (travail)"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2e <xliff:g id="LABEL">%1$s</xliff:g> professionnel(le)"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3e <xliff:g id="LABEL">%1$s</xliff:g> professionnel(le)"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Pour annuler l\'épinglage de cet écran, maintenez enfoncée la touche Retour."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Pour annuler l\'épinglage de cet écran, maintenez enfoncée les touches Retour et Aperçu."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"L\'application est épinglée : l\'annulation de l\'épinglage n\'est pas autorisée sur cet appareil."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Écran épinglé"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Épinglage d\'écran annulé"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 1e96137..cd10d36 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Sons de l\'alarme"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Sons de notification"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Inconnue"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Réseau Wi-Fi disponible</item>
- <item quantity="other">Réseaux Wi-Fi disponibles</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">Réseau Wi-Fi ouvert disponible</item>
- <item quantity="other">Réseaux Wi-Fi ouverts disponibles</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Connectez-vous au réseau Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Se connecter au réseau"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> (travail)"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2e <xliff:g id="LABEL">%1$s</xliff:g> professionnelle"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3e <xliff:g id="LABEL">%1$s</xliff:g> professionnelle"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Pour annuler l\'épinglage, appuyez de manière prolongée sur \"Retour\"."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Pour annuler l\'épinglage de l\'écran, appuyez de manière prolongée sur les boutons Retour et Aperçu."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"L\'application est épinglée. L\'annulation de l\'épinglage n\'est pas autorisée sur cet appareil."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Écran épinglé."</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Épinglage d\'écran annulé."</string>
diff --git a/core/res/res/values-gl-rES-watch/strings.xml b/core/res/res/values-gl-watch/strings.xml
similarity index 100%
rename from core/res/res/values-gl-rES-watch/strings.xml
rename to core/res/res/values-gl-watch/strings.xml
diff --git a/core/res/res/values-gl-rES-watch/styles_material.xml b/core/res/res/values-gl-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-gl-rES-watch/styles_material.xml
rename to core/res/res/values-gl-watch/styles_material.xml
diff --git a/core/res/res/values-gl-rES/strings.xml b/core/res/res/values-gl/strings.xml
similarity index 99%
rename from core/res/res/values-gl-rES/strings.xml
rename to core/res/res/values-gl/strings.xml
index b59057f..bcf19d9 100644
--- a/core/res/res/values-gl-rES/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Sons de alarma"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Sons de notificación"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Descoñecido"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Redes wifi dispoñibles</item>
- <item quantity="one">Rede wifi dispoñible</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Abrir redes wifi dispoñibles</item>
- <item quantity="one">Abrir rede wifi dispoñible</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Inicia sesión na rede wifi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Inicia sesión na rede"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> do traballo"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2.º <xliff:g id="LABEL">%1$s</xliff:g> do traballo"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3.º <xliff:g id="LABEL">%1$s</xliff:g> do traballo"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Para soltar a pantalla, mantén premido Volver."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Para soltar a pantalla, mantén premido Atrás e Visión xeral."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"A aplicación está fixada: non se permite soltala neste dispositivo."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Pantalla fixada"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Pantalla desactivada"</string>
diff --git a/core/res/res/values-gu-rIN-watch/strings.xml b/core/res/res/values-gu-watch/strings.xml
similarity index 100%
rename from core/res/res/values-gu-rIN-watch/strings.xml
rename to core/res/res/values-gu-watch/strings.xml
diff --git a/core/res/res/values-gu-rIN-watch/styles_material.xml b/core/res/res/values-gu-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-gu-rIN-watch/styles_material.xml
rename to core/res/res/values-gu-watch/styles_material.xml
diff --git a/core/res/res/values-gu-rIN/strings.xml b/core/res/res/values-gu/strings.xml
similarity index 99%
rename from core/res/res/values-gu-rIN/strings.xml
rename to core/res/res/values-gu/strings.xml
index f114028..a79d53c 100644
--- a/core/res/res/values-gu-rIN/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"એલાર્મ ધ્વનિઓ"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"સૂચના ધ્વનિઓ"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"અજાણી"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Wi-Fi નેટવર્ક્સ ઉપલબ્ધ</item>
- <item quantity="other">Wi-Fi નેટવર્ક્સ ઉપલબ્ધ</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">ખુલ્લા Wi-Fi નેટવર્ક્સ ઉપલબ્ધ છે</item>
- <item quantity="other">ખુલ્લા Wi-Fi નેટવર્ક્સ ઉપલબ્ધ છે</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Wi-Fi નેટવર્ક પર સાઇન ઇન કરો"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"નેટવર્ક પર સાઇન ઇન કરો"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"કાર્યાલય <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2જું કાર્ય <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3જું કાર્ય <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"આ સ્ક્રીનને અનપિન કરવા માટે, પાછળને ટચ કરીને પકડી રાખો."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"આ સ્ક્રીનને અનપિન કરવા માટે, પાછળ અને વિહંગાવલોકનને ટચ કરો અને પકડો."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"ઍપ્લિકેશન પિન કરેલ છે. આ ઉપકરણ પર અનપિન કરવાની મંજૂરી નથી."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"સ્ક્રીન પિન કરી"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"સ્ક્રીન અનપિન કરી"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index e291552..26a0dcc 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -417,7 +417,7 @@
<string name="permlab_accessWifiState" msgid="5202012949247040011">"वाई-फ़ाई कनेक्शन देखें"</string>
<string name="permdesc_accessWifiState" msgid="5002798077387803726">"ऐप्स को वाई-फ़ाई नेटवर्क के बारे में जानकारी, जैसे WI-Fi सक्षम है या नहीं और कनेक्ट किए गए वाई-फ़ाई डिवाइस के नाम, देखने देता है."</string>
<string name="permlab_changeWifiState" msgid="6550641188749128035">"वाई-फ़ाई से कनेक्ट और डिस्कनेक्ट करें"</string>
- <string name="permdesc_changeWifiState" msgid="7137950297386127533">"ऐप्स को वाई-फ़ाई पहुंच बिंदुओं से कनेक्ट और डिस्कनेक्ट करने और वाई-फ़ाई नेटवर्क के लिए डिवाइस कॉन्फ़िगरेशन में परिवर्तन करने देता है."</string>
+ <string name="permdesc_changeWifiState" msgid="7137950297386127533">"ऐप्स को वाई-फ़ाई पहुंच बिंदुओं से कनेक्ट और डिसकनेक्ट करने और वाई-फ़ाई नेटवर्क के लिए डिवाइस कॉन्फ़िगरेशन में परिवर्तन करने देता है."</string>
<string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"वाई-फ़ाई मल्टीकास्ट प्राप्ति को अनुमति दें"</string>
<string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"ऐप्स को वाई-फ़ाई नेटवर्क पर मल्टीकास्ट पते के उपयोग से केवल आपके टेबलेट पर ही नहीं, बल्कि सभी डिवाइस पर भेजे गए पैकेट प्राप्त करने देता है. यह गैर-मल्टीकास्ट मोड से अधिक पावर का उपयोग करता है."</string>
<string name="permdesc_changeWifiMulticastState" product="tv" msgid="9031975661145014160">"ऐप को मल्टीकास्ट पतों का उपयोग करके ना केवल आपके टीवी को, बल्कि वाई-फ़ाई पर मौजूद सभी डिवाइसों को पैकेट भेजने और प्राप्त करने देती है. इसमें गैर-मल्टीकास्ट मोड की अपेक्षा अधिक पावर का उपयोग होता है."</string>
@@ -426,7 +426,7 @@
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"किसी ऐप्स को स्थानीय ब्लूटूथ टेबलेट कॉन्फ़िगर करने की और रिमोट डिवाइस के साथ खोजने और युग्मित करने देता है."</string>
<string name="permdesc_bluetoothAdmin" product="tv" msgid="3373125682645601429">"ऐप को स्थानीय ब्लूटूथ टीवी कॉन्फ़िगर करने देती है और दूरस्थ डिवाइसों को खोजने और उनसे युग्मित करने देती है."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"ऐप्स को स्थानीय ब्लूटूथ फ़ोन कॉन्फ़िगर करने देता है, और रिमोट डिवाइस के साथ खोजने और युग्मित करने देता है."</string>
- <string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAX से कनेक्ट और डिस्कनेक्ट करें"</string>
+ <string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAX से कनेक्ट और डिसकनेक्ट करें"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"ऐप्स को WiMAX सक्षम है या नहीं और कनेक्ट किए गए किसी WiMAX नेटवर्क के बारे में जानकारी निर्धारित करने देता है."</string>
<string name="permlab_changeWimaxState" msgid="340465839241528618">"WiMAX स्थिति बदलें"</string>
<string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"ऐप्स को WiMAX नेटवर्क से टेबलेट को कनेक्ट और डिस्कनेक्ट करने देता है."</string>
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"अलार्म ध्वनियां"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"नोटिफ़िकेशन ध्वनि"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"अज्ञात"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">वाई-फ़ाई नेटवर्क उपलब्ध</item>
- <item quantity="other">वाई-फ़ाई नेटवर्क उपलब्ध</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">खुले वाई-फ़ाई नेटवर्क उपलब्ध</item>
- <item quantity="other">खुले वाई-फ़ाई नेटवर्क उपलब्ध</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"वाई-फ़ाई नेटवर्क में प्रवेश करें"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"नेटवर्क में प्रवेश करें"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1103,9 +1095,9 @@
<string name="wifi_p2p_to_message" msgid="248968974522044099">"प्रति:"</string>
<string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"आवश्यक पिन लिखें:"</string>
<string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"पिन:"</string>
- <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> से कनेक्ट रहने पर टेबलेट वाई-फ़ाई से अस्थायी रूप से डिस्कनेक्ट हो जाएगा"</string>
+ <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> से कनेक्ट रहने पर टेबलेट वाई-फ़ाई से अस्थायी रूप से डिसकनेक्ट हो जाएगा"</string>
<string name="wifi_p2p_frequency_conflict_message" product="tv" msgid="3087858235069421128">"जब टीवी <xliff:g id="DEVICE_NAME">%1$s</xliff:g> से कनेक्ट होगा तब वह वाई-फ़ाई से अस्थायी रूप से डिस्कनेक्ट हो जाएगा"</string>
- <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"फ़ोन <xliff:g id="DEVICE_NAME">%1$s</xliff:g> से कनेक्ट रहते समय वाई-फ़ाई से अस्थायी रूप से डिस्कनेक्ट हो जाएगा"</string>
+ <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"फ़ोन <xliff:g id="DEVICE_NAME">%1$s</xliff:g> से कनेक्ट रहते समय वाई-फ़ाई से अस्थायी रूप से डिसकनेक्ट हो जाएगा"</string>
<string name="select_character" msgid="3365550120617701745">"वर्ण सम्मिलित करें"</string>
<string name="sms_control_title" msgid="7296612781128917719">"SMS संदेश भेज रहा है"</string>
<string name="sms_control_message" msgid="3867899169651496433">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> बड़ी संख्या में SMS संदेश भेज रहा है. क्या आप इस ऐप्स को संदेश भेजना जारी रखने देना चाहते हैं?"</string>
@@ -1379,7 +1371,7 @@
<string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"स्क्रीन को डिवाइस में कास्ट करें"</string>
<string name="media_route_chooser_searching" msgid="4776236202610828706">"डिवाइस खोजे जा रहे हैं…"</string>
<string name="media_route_chooser_extended_settings" msgid="87015534236701604">"सेटिंग"</string>
- <string name="media_route_controller_disconnect" msgid="8966120286374158649">"डिस्कनेक्ट करें"</string>
+ <string name="media_route_controller_disconnect" msgid="8966120286374158649">"डिसकनेक्ट करें"</string>
<string name="media_route_status_scanning" msgid="7279908761758293783">"स्कैन कर रहा है..."</string>
<string name="media_route_status_connecting" msgid="6422571716007825440">"कनेक्ट हो रहा है..."</string>
<string name="media_route_status_available" msgid="6983258067194649391">"उपलब्ध"</string>
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"कार्यस्थल का <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"दूसरा कार्य <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"तीसरा कार्य <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"इस स्क्रीन को अनपिन करने के लिए, वापस जाएं को स्पर्श करके रखें."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"इस स्क्रीन को अनपिन करने के लिए, वापस जाएं और अवलोकन को स्पर्श करके रखें."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"ऐप पिन किया गया है: इस डिवाइस पर अनपिन करने की अनुमति नहीं है."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"स्क्रीन पिन की गई"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"स्क्रीन अनपिन की गई"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index a403769..683a1a3 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -1080,16 +1080,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Zvukovi alarma"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Zvukovi obavijesti"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Nepoznato"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Dostupne su Wi-Fi mreže</item>
- <item quantity="few">Dostupne su Wi-Fi mreže</item>
- <item quantity="other">Dostupne su Wi-Fi mreže</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">Dostupne su otvorene Wi-Fi mreže</item>
- <item quantity="few">Dostupne su otvorene Wi-Fi mreže</item>
- <item quantity="other">Dostupne su otvorene Wi-Fi mreže</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Prijava na Wi-Fi mrežu"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Prijava na mrežu"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1583,7 +1573,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> za posao"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2. <xliff:g id="LABEL">%1$s</xliff:g> za posao"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3. <xliff:g id="LABEL">%1$s</xliff:g> za posao"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Da biste otkvačili ovaj zaslon, dodirnite i zadržite Natrag."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Da biste otkvačili ovaj zaslon, dodirnite i zadržite Natrag i Pregled."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Aplikacija je prikvačena: otkvačivanje nije dopušteno na tom uređaju."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Zaslon je pričvršćen"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Zaslon je otkvačen"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index f29cced..3c8e390 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Ébresztőhangok"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Értesítőhangok"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Ismeretlen"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wi-Fi hálózatok érhetők el</item>
- <item quantity="one">Van elérhető Wi-Fi hálózat</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Nyílt Wi-Fi hálózatok érhetők el</item>
- <item quantity="one">Nyílt Wi-Fi hálózat érhető el</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Bejelentkezés Wi-Fi hálózatba"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Bejelentkezés a hálózatba"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Munkahelyi <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2. munkahelyi <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3. munkahelyi <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"A képernyő rögzítésének feloldásához tartsa lenyomva a Vissza lehetőséget."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"A képernyő rögzítésének feloldásához tartsa lenyomva a Vissza és az Áttekintés lehetőségeket."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Az alkalmazás rögzítve van: a rögzítés feloldása nem engedélyezett ezen az eszközön."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Képernyő rögzítve"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Képernyő rögzítése feloldva"</string>
diff --git a/core/res/res/values-hy-rAM-watch/strings.xml b/core/res/res/values-hy-watch/strings.xml
similarity index 100%
rename from core/res/res/values-hy-rAM-watch/strings.xml
rename to core/res/res/values-hy-watch/strings.xml
diff --git a/core/res/res/values-hy-rAM-watch/styles_material.xml b/core/res/res/values-hy-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-hy-rAM-watch/styles_material.xml
rename to core/res/res/values-hy-watch/styles_material.xml
diff --git a/core/res/res/values-hy-rAM/strings.xml b/core/res/res/values-hy/strings.xml
similarity index 99%
rename from core/res/res/values-hy-rAM/strings.xml
rename to core/res/res/values-hy/strings.xml
index 87b8d04..91cdfa4 100644
--- a/core/res/res/values-hy-rAM/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Զարթուցիչի զանգերանգներ"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Ծանուցման զանգերանգներ"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Անհայտ է"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Հասանելի են Wi-Fi ցանցեր</item>
- <item quantity="other">Հասանելի են Wi-Fi ցանցեր</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">Հասանելի են չպաշտպանված Wi-Fi ցանցեր</item>
- <item quantity="other">Հասանելի են չպաշտպանված Wi-Fi ցանցեր</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Մուտք գործեք Wi-Fi ցանց"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Մուտք գործեք ցանց"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1272,7 +1264,7 @@
<string name="find_previous" msgid="2196723669388360506">"Գտնել նախորդը"</string>
<string name="gpsNotifTicker" msgid="5622683912616496172">"Տեղադրության հարցում <xliff:g id="NAME">%s</xliff:g>-ից"</string>
<string name="gpsNotifTitle" msgid="5446858717157416839">"Տեղադրության հարցում"</string>
- <string name="gpsNotifMessage" msgid="1374718023224000702">"<xliff:g id="NAME">%1$s</xliff:g> (<xliff:g id="SERVICE">%2$s</xliff:g>)-ի հարցմամբ"</string>
+ <string name="gpsNotifMessage" msgid="1374718023224000702">"<xliff:g id="NAME">%1$s</xliff:g> (<xliff:g id="SERVICE">%2$s</xliff:g>)-ի հարցումով"</string>
<string name="gpsVerifYes" msgid="2346566072867213563">"Այո"</string>
<string name="gpsVerifNo" msgid="1146564937346454865">"Ոչ"</string>
<string name="sync_too_many_deletes" msgid="5296321850662746890">"Ջնջելու սահմանը գերազանցվել է"</string>
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Աշխատանքային <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2-րդ աշխատանք <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3-րդ աշխատանք <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Այս էկրանն ապամրացնելու համար հպեք և պահեք Հետ կոճակը:"</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Այս էկրանն ապամրացնելու համար հպեք և պահեք Հետ և Համատեսք կոճակները:"</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Հավելվածն ամրացված է: Ապամրացումն այս սարքում չի թույլատրվում:"</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Էկրանն ամրացված է"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Էկրանն ապամրացված է"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 1f6f130..58447fa 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Suara alarm"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Suara notifikasi"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Tidak diketahui"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Jaringan Wi-Fi tersedia</item>
- <item quantity="one">Jaringan Wi-Fi tersedia</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Jaringan Wi-Fi terbuka tersedia</item>
- <item quantity="one">Jaringan Wi-Fi terbuka tersedia</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Masuk ke jaringan Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Masuk ke jaringan"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Kantor <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"Upaya ke-2 <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"Upaya ke-3 <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Untuk melepas pin layar ini, sentuh & tahan tombol Kembali."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Untuk melepas pin layar ini, sentuh & tahan Kembali dan Ringkasan."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Pin dipasang ke aplikasi. Melepas pin tidak diizinkan di perangkat ini."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Layar disematkan"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Layar dicopot sematannya"</string>
diff --git a/core/res/res/values-is-rIS-watch/strings.xml b/core/res/res/values-is-watch/strings.xml
similarity index 100%
rename from core/res/res/values-is-rIS-watch/strings.xml
rename to core/res/res/values-is-watch/strings.xml
diff --git a/core/res/res/values-is-rIS-watch/styles_material.xml b/core/res/res/values-is-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-is-rIS-watch/styles_material.xml
rename to core/res/res/values-is-watch/styles_material.xml
diff --git a/core/res/res/values-is-rIS/strings.xml b/core/res/res/values-is/strings.xml
similarity index 99%
rename from core/res/res/values-is-rIS/strings.xml
rename to core/res/res/values-is/strings.xml
index 4222c22..0178b77 100644
--- a/core/res/res/values-is-rIS/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Vekjarahljóð"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Tilkynningarhljóð"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Óþekkt"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Wi-Fi net í boði</item>
- <item quantity="other">Wi-Fi net í boði</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">Opin Wi-Fi net í boði</item>
- <item quantity="other">Opin Wi-Fi net í boði</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Skrá inn á Wi-Fi net"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Skrá inn á net"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> í vinnu"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"<xliff:g id="LABEL">%1$s</xliff:g> í vinnu (2)"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"<xliff:g id="LABEL">%1$s</xliff:g> í vinnu (3)"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Til að taka lásinn af þessari skjámynd skaltu halda inni bakkhnappinum."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Til að losa þessa skjámynd skaltu halda „Til baka“ og „Yfirlit“ inni."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Forritið er fest: Ekki er hægt að losa forrit í þessu tæki."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Skjár festur"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Skjár opnaður"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 472178f..9228b33 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Suoni delle sveglie"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Suoni di notifica"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Sconosciuta"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Reti Wi-Fi disponibili</item>
- <item quantity="one">Rete Wi-Fi disponibile</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Apri reti Wi-Fi disponibili</item>
- <item quantity="one">Apri rete Wi-Fi disponibile</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Accedi a rete Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Accedi alla rete"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> lavoro"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"<xliff:g id="LABEL">%1$s</xliff:g> di lavoro (2°)"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"<xliff:g id="LABEL">%1$s</xliff:g> di lavoro (3°)"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Per sbloccare questa schermata tieni premuta l\'opzione Indietro."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Per sbloccare questa schermata tieni premuto Indietro e Panoramica."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"L\'app è bloccata. Su questo dispositivo non è consentito lo sblocco."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Schermata bloccata"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Schermata sbloccata"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 7c908d9..f9e4b34 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -1100,18 +1100,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"צלילי התראה"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"צלילי הודעה"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"לא ידוע"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="two">יש רשתות Wi-Fi זמינות</item>
- <item quantity="many">יש רשתות Wi-Fi זמינות</item>
- <item quantity="other">יש רשתות Wi-Fi זמינות</item>
- <item quantity="one">יש רשת Wi-Fi זמינה</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="two">יש רשתות Wi-Fi פתוחות וזמינות</item>
- <item quantity="many">יש רשתות Wi-Fi פתוחות וזמינות</item>
- <item quantity="other">יש רשתות Wi-Fi פתוחות וזמינות</item>
- <item quantity="one">יש רשת Wi-Fi פתוחה וזמינה</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"היכנס לרשת Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"היכנס לרשת"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1607,7 +1595,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"עבודה <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"<xliff:g id="LABEL">%1$s</xliff:g> שני בעבודה"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"<xliff:g id="LABEL">%1$s</xliff:g> שלישי בעבודה"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"כדי לבטל את הצמדת המסך הזה, לחץ לחיצה ממושכת על הלחצן \'הקודם\'."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"כדי לבטל את ההצמדה של מסך זה, גע בלחצן \'הקודם\' והחזק אותו, ואז גע בלחצן \'סקירה\'."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"האפליקציה מוצמדת: ביטול ההצמדה אסור במכשיר הזה."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"המסך מוצמד"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"הצמדת המסך בוטלה"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 764e9cf..46c7877 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"アラーム音"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"通知音"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"不明"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">複数のWi-Fiネットワークが利用できます</item>
- <item quantity="one">Wi-Fiネットワークが利用できます</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">複数のWi-Fiオープンネットワークが利用できます</item>
- <item quantity="one">Wi-Fiオープンネットワークが利用できます</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Wi-Fiネットワークにログイン"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"ネットワークにログインしてください"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"仕事の<xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2 番目の仕事用<xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3 番目の仕事用<xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"この画面の固定を解除するには [戻る] を押し続けます。"</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"この画面の固定を解除するには [戻る] と [概要] を押し続けます。"</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"アプリは固定されています。この端末では固定を解除できません。"</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"画面を固定しました"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"画面固定を解除しました"</string>
diff --git a/core/res/res/values-ka-rGE-watch/strings.xml b/core/res/res/values-ka-watch/strings.xml
similarity index 100%
rename from core/res/res/values-ka-rGE-watch/strings.xml
rename to core/res/res/values-ka-watch/strings.xml
diff --git a/core/res/res/values-ka-rGE-watch/styles_material.xml b/core/res/res/values-ka-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-ka-rGE-watch/styles_material.xml
rename to core/res/res/values-ka-watch/styles_material.xml
diff --git a/core/res/res/values-ka-rGE/strings.xml b/core/res/res/values-ka/strings.xml
similarity index 99%
rename from core/res/res/values-ka-rGE/strings.xml
rename to core/res/res/values-ka/strings.xml
index f0486fa..7774c66 100644
--- a/core/res/res/values-ka-rGE/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"მაღვიძარას ხმები"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"შეტყობინების ხმები"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"უცნობი"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">ხელმისაწვდომია Wi-Fi ქსელები</item>
- <item quantity="one">ხელმისაწვდომია Wi-Fi ქსელი</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">ხელმისაწვდომია ღია Wi-Fi ქსელები</item>
- <item quantity="one">ხელმისაწვდომია ღია Wi-Fi ქსელი</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Wi-Fi ქსელთან დაკავშირება"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"ქსელში შესვლა"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"სამსახური <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"მე-2 სამსახური <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"მე-3 სამსახური <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"ამ ეკრანის ჩამაგრების მოსახსნელად, ხანგრძლივად შეეხეთ ღილაკს „უკან“."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"ამ ეკრანის ჩამაგრების მოსახსნელად, ხანგრძლივად შეეხეთ ღილაკს „უკან და მიმოხილვა“."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"აპი მიმაგრებულია: მიმაგრების მოხსნა არ არის ნებადართული ამ მოწყობილობაზე."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"ეკრანი დაფიქსირდა"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"ეკრანს ფიქსაცია მოეხსნა"</string>
diff --git a/core/res/res/values-kk-rKZ-watch/strings.xml b/core/res/res/values-kk-watch/strings.xml
similarity index 100%
rename from core/res/res/values-kk-rKZ-watch/strings.xml
rename to core/res/res/values-kk-watch/strings.xml
diff --git a/core/res/res/values-kk-rKZ-watch/styles_material.xml b/core/res/res/values-kk-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-kk-rKZ-watch/styles_material.xml
rename to core/res/res/values-kk-watch/styles_material.xml
diff --git a/core/res/res/values-kk-rKZ/strings.xml b/core/res/res/values-kk/strings.xml
similarity index 99%
rename from core/res/res/values-kk-rKZ/strings.xml
rename to core/res/res/values-kk/strings.xml
index 1e45115..d15b017 100644
--- a/core/res/res/values-kk-rKZ/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Дабыл сигналдары"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Хабарландыру сигналдары"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Белгісіз"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wi-Fi желілері қол жетімді</item>
- <item quantity="one">Wi-Fi желісі қол жетімді</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Ашық Wi-Fi желілері қол жетімді</item>
- <item quantity="one">Ашық Wi-Fi желісі қол жетімді</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Wi-Fi желісіне кіру"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Желіге кіру"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Жұмыс <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2-ші жұмыс профилі (<xliff:g id="LABEL">%1$s</xliff:g>)"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3-ші жұмыс профилі (<xliff:g id="LABEL">%1$s</xliff:g>)"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Осы экранды босату үшін \"Артқа\" түймесін басып тұрыңыз."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Бұл экранды ашу үшін \"Артқа\" және \"Шолу\" түймелерін қатар басып тұрыңыз"</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Бағдарлама белгіленді: Бұл құрылғыда белгіні алуға рұқсат берілмейді."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Экран түйрелді"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Экран босатылды"</string>
diff --git a/core/res/res/values-km-rKH-watch/strings.xml b/core/res/res/values-km-watch/strings.xml
similarity index 100%
rename from core/res/res/values-km-rKH-watch/strings.xml
rename to core/res/res/values-km-watch/strings.xml
diff --git a/core/res/res/values-km-rKH-watch/styles_material.xml b/core/res/res/values-km-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-km-rKH-watch/styles_material.xml
rename to core/res/res/values-km-watch/styles_material.xml
diff --git a/core/res/res/values-km-rKH/strings.xml b/core/res/res/values-km/strings.xml
similarity index 99%
rename from core/res/res/values-km-rKH/strings.xml
rename to core/res/res/values-km/strings.xml
index 1c9ec81..549bff2 100644
--- a/core/res/res/values-km-rKH/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -1062,14 +1062,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"សំឡេងម៉ោងរោទិ៍"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"សំឡេងជូនដំណឹង"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"មិនស្គាល់"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">មានបណ្តាញ Wi-Fi</item>
- <item quantity="one">មានបណ្តាញ Wi-Fi</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">បើកបណ្តាញ Wi-Fi ដែលមាន</item>
- <item quantity="one">បើកបណ្តាញ Wi-Fi ដែលមាន</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"ចូលបណ្ដាញវ៉ាយហ្វាយ"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"ចូលទៅបណ្តាញ"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1561,7 +1553,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"កន្លែងធ្វើការ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"<xliff:g id="LABEL">%1$s</xliff:g> ការងារទី 2"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"<xliff:g id="LABEL">%1$s</xliff:g> ការងារទី 3"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"ដើម្បីផ្តាច់អេក្រង់នេះ សូមប៉ះ និងសង្កត់ប៊ូតុងថយក្រោយឲ្យជាប់។"</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"ដើម្បីដកការខ្ទាស់អេក្រង់នេះ សូមសង្កត់ប៉ូតុងថយក្រោយ និងប៊ូតុងថ្មីឲ្យជាប់។"</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"កម្មវិធីនេះត្រូវបានខ្ទាស់។ មិនអនុញ្ញាតឲ្យដោះការខ្ទាស់នៅលើឧបករណ៍នេះទេ។"</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"បានភ្ជាប់អេក្រង់"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"មិនបានភ្ជាប់អេក្រង់"</string>
diff --git a/core/res/res/values-kn-rIN-watch/strings.xml b/core/res/res/values-kn-watch/strings.xml
similarity index 100%
rename from core/res/res/values-kn-rIN-watch/strings.xml
rename to core/res/res/values-kn-watch/strings.xml
diff --git a/core/res/res/values-kn-rIN-watch/styles_material.xml b/core/res/res/values-kn-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-kn-rIN-watch/styles_material.xml
rename to core/res/res/values-kn-watch/styles_material.xml
diff --git a/core/res/res/values-kn-rIN/strings.xml b/core/res/res/values-kn/strings.xml
similarity index 99%
rename from core/res/res/values-kn-rIN/strings.xml
rename to core/res/res/values-kn/strings.xml
index e79fd6f..163d922 100644
--- a/core/res/res/values-kn-rIN/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -992,7 +992,7 @@
<string name="aerr_application_repeated" msgid="3146328699537439573">"<xliff:g id="APPLICATION">%1$s</xliff:g> ನಿಲ್ಲುತ್ತಲೇ ಇರುತ್ತದೆ"</string>
<string name="aerr_process_repeated" msgid="6235302956890402259">"<xliff:g id="PROCESS">%1$s</xliff:g> ನಿಲ್ಲುತ್ತಲೇ ಇರುತ್ತದೆ"</string>
<string name="aerr_restart" msgid="7581308074153624475">"ಅಪ್ಲಿಕೇಶನ್ ಮತ್ತೆ ತೆರೆಯಿರಿ"</string>
- <string name="aerr_report" msgid="5371800241488400617">"ಪ್ರತಿಕ್ರಿಯೆ ಕಳುಹಿಸು"</string>
+ <string name="aerr_report" msgid="5371800241488400617">"ಪ್ರತಿಕ್ರಿಯೆ ಕಳುಹಿಸಿ"</string>
<string name="aerr_close" msgid="2991640326563991340">"ಮುಚ್ಚು"</string>
<string name="aerr_mute" msgid="1974781923723235953">"ಸಾಧನವು ಮರುಪ್ರಾರಂಭವಾಗುವವರೆಗೂ ಮ್ಯೂಟ್ ಮಾಡಿ"</string>
<string name="aerr_wait" msgid="3199956902437040261">"ನಿರೀಕ್ಷಿಸು"</string>
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"ಅಲಾರಮ್ ಧ್ವನಿಗಳು"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"ಅಧಿಸೂಚನೆ ಧ್ವನಿಗಳು"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"ಅಪರಿಚಿತ"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">ವೈ-ಫೈ ನೆಟ್ವರ್ಕ್ಗಳು ಲಭ್ಯವಿವೆ</item>
- <item quantity="other">ವೈ-ಫೈ ನೆಟ್ವರ್ಕ್ಗಳು ಲಭ್ಯವಿವೆ</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">ಮುಕ್ತ ವೈ-ಫೈ ನೆಟ್ವರ್ಕ್ಗಳು ಲಭ್ಯವಿವೆ</item>
- <item quantity="other">ಮುಕ್ತ ವೈ-ಫೈ ನೆಟ್ವರ್ಕ್ಗಳು ಲಭ್ಯವಿವೆ</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"ವೈ-ಫೈ ನೆಟ್ವರ್ಕ್ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"ನೆಟ್ವರ್ಕ್ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"ಕೆಲಸ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2 ನೇ ಕೆಲಸದ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3 ನೇ ಕೆಲಸದ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"ಈ ಪರದೆಯನ್ನು ಅನ್ಪಿನ್ ಮಾಡಲು, ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹಿಂಂದೆ ಒತ್ತಿ ಹಿಡಿಯಿರಿ."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"ಈ ಪರದೆಯನ್ನು ಅನ್ಪಿನ್ ಮಾಡಲು, ಅವಲೋಕನವನ್ನು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹೋಲ್ಡ್ ಮಾಡಿ."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"ಅಪ್ಲಿಕೇಶನ್ ಪಿನ್ ಮಾಡಲಾಗಿದೆ: ಈ ಸಾಧನದಲ್ಲಿ ಅನ್ಪಿನ್ ಮಾಡುವುದನ್ನು ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"ಸ್ಕ್ರೀನ್ ಪಿನ್ ಮಾಡಲಾಗಿದೆ"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"ಸ್ಕ್ರೀನ್ ಅನ್ಪಿನ್ ಮಾಡಲಾಗಿದೆ"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index b931bbb..a943f53 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"알람 소리"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"알림 사운드"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"알 수 없음"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wi-Fi 네트워크 사용 가능</item>
- <item quantity="one">Wi-Fi 네트워크 사용 가능</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">개방형 Wi-Fi 네트워크 사용 가능</item>
- <item quantity="one">개방형 Wi-Fi 네트워크 사용 가능</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Wi-Fi 네트워크에 로그인"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"네트워크에 로그인"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"업무용 <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"두 번째 업무용 <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"세 번째 업무용<xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"이 화면을 고정 해제하려면 \'뒤로\'를 길게 터치합니다."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"이 화면을 고정 해제하려면 \'뒤로\' 및 \'최근 사용\'을 길게 터치하세요."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"앱이 고정되었습니다. 이 기기에서는 고정 해제를 허용하지 않습니다."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"화면 고정됨"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"화면 고정 해제됨"</string>
diff --git a/core/res/res/values-ky-rKG-watch/strings.xml b/core/res/res/values-ky-watch/strings.xml
similarity index 100%
rename from core/res/res/values-ky-rKG-watch/strings.xml
rename to core/res/res/values-ky-watch/strings.xml
diff --git a/core/res/res/values-ky-rKG-watch/styles_material.xml b/core/res/res/values-ky-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-ky-rKG-watch/styles_material.xml
rename to core/res/res/values-ky-watch/styles_material.xml
diff --git a/core/res/res/values-ky-rKG/strings.xml b/core/res/res/values-ky/strings.xml
similarity index 99%
rename from core/res/res/values-ky-rKG/strings.xml
rename to core/res/res/values-ky/strings.xml
index c896180..cdbb17f 100644
--- a/core/res/res/values-ky-rKG/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Ойготкучтун добуштары"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Эскертменин добуштары"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Белгисиз"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wi-Fi тармагы жеткиликтүү</item>
- <item quantity="one">Wi-Fi тармагы жеткиликтүү</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Ачык Wi-Fi тармагы жеткиликтүү</item>
- <item quantity="one">Ачык Wi-Fi тармагы жеткиликтүү</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Wi-Fi түйүнүнө кирүү"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Тармакка кирүү"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Жумуш <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2-жумуш <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3-жумуш <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Бул экранды бошотуу үчүн \"Артка\" баскычын басып, кармап туруңуз."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Бул экранды бошотуу үчүн \"Артка\" жана \"Сереп салуу\" баскычтарын басып, кармап туруңуз."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Колдонмо кадалган: Бул түзмөктө бошотууга уруксат жок."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Экран кадалды"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Экран бошотулду"</string>
diff --git a/core/res/res/values-lo-rLA-watch/strings.xml b/core/res/res/values-lo-watch/strings.xml
similarity index 100%
rename from core/res/res/values-lo-rLA-watch/strings.xml
rename to core/res/res/values-lo-watch/strings.xml
diff --git a/core/res/res/values-lo-rLA-watch/styles_material.xml b/core/res/res/values-lo-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-lo-rLA-watch/styles_material.xml
rename to core/res/res/values-lo-watch/styles_material.xml
diff --git a/core/res/res/values-lo-rLA/strings.xml b/core/res/res/values-lo/strings.xml
similarity index 99%
rename from core/res/res/values-lo-rLA/strings.xml
rename to core/res/res/values-lo/strings.xml
index 534ffe2..1b8a7a2 100644
--- a/core/res/res/values-lo-rLA/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Alarm sounds"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Notification sounds"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"ບໍ່ຮູ້ຈັກ"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">ເຄືອຂ່າຍ Wi-Fi ທີ່ມີໃຫ້</item>
- <item quantity="one">ເຄືອຂ່າຍ Wi-Fi ທີ່ມີໃຫ້</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">ເປີດເຄືອຂ່າຍ Wi-Fi ທີ່ມີໃຫ້</item>
- <item quantity="one">ເປີດເຄືອຂ່າຍ Wi-Fi ທີ່ມີໃຫ້</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"ເຂົ້າສູ່ລະບົບເຄືອຂ່າຍ Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"ລົງຊື່ເຂົ້າເຄືອຂ່າຍ"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"ບ່ອນເຮັດວຽກ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"ບ່ອນເຮັດວຽກທີ 2 <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"ບ່ອນເຮັດວຽກທີ 3 <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"ກົດປຸ່ມກັບຄືນຄ້າງໄວ້ເພື່ອເຊົາປັກໝຸດໜ້າຈໍນີ້."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"To unpin this screen, touch & hold Back and Overview."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"ແອັບຖືກປັກໝຸດແລ້ວ: ບໍ່ອະນຸຍາດໃຫ້ຖອນປັກໝຸດຢູ່ເທິງອຸປະກອນນີ້."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"ປັກໝຸດໜ້າຈໍແລ້ວ"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"ຍົກເລີກການປັກໝຸນຫນ້າຈໍແລ້ວ"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index c9f781f..1bcb8ca 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -1100,18 +1100,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Įspėjimų garsai"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Pranešimų garsai"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Nežinoma"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Pasiekiami „Wi-Fi“ tinklai</item>
- <item quantity="few">Pasiekiami „Wi-Fi“ tinklai</item>
- <item quantity="many">Pasiekiami „Wi-Fi“ tinklai</item>
- <item quantity="other">Pasiekiami „Wi-Fi“ tinklai</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">Pasiekiami atvirieji „Wi-Fi“ tinklai</item>
- <item quantity="few">Pasiekiami atvirieji „Wi-Fi“ tinklai</item>
- <item quantity="many">Pasiekiami atvirieji „Wi-Fi“ tinklai</item>
- <item quantity="other">Pasiekiami atvirieji „Wi-Fi“ tinklai</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Prisijungti prie „Wi-Fi“ tinklo"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Prisijungti prie tinklo"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1607,7 +1595,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Darbo <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2-asis darbo <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3-iasis darbo <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Kad atsegtumėte šį ekraną, palieskite ir palaikykite „Atgal“."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Kad atsegtumėte šį ekraną, palieskite ir palaikykite „Atgal“ ir „Apžvalga“."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Programa prisegta: šiame įrenginyje negalima atsegti."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Ekrano prisegtas"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Ekranas atsegtas"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index df2c194..0df18d1 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -1080,16 +1080,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Modinātāja signāla skaņas"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Paziņojumu skaņas"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Nezināms"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="zero">Pieejami Wi-Fi tīkli</item>
- <item quantity="one">Pieejami Wi-Fi tīkli</item>
- <item quantity="other">Pieejami Wi-Fi tīkli</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="zero">Ir pieejami atvērti Wi-Fi tīkli</item>
- <item quantity="one">Ir pieejami atvērti Wi-Fi tīkli</item>
- <item quantity="other">Ir pieejami atvērti Wi-Fi tīkli</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Pierakstieties Wi-Fi tīklā"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Pierakstīšanās tīklā"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1583,7 +1573,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Darbā: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2. darba profils: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3. darba profils: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Lai atspraustu šo ekrānu, pieskarieties pogai “Atpakaļ” un turiet to."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Lai atspraustu šo ekrānu, pieskarieties pogām “Atpakaļ” un “Pārskats” un turiet tās."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Lietotne ir piesprausta. Atspraušana šajā ierīcē nav atļauta."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Ekrāns ir piesprausts"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Ekrāns ir atsprausts"</string>
diff --git a/core/res/res/values-mcc310-mnc160-az-rAZ/strings.xml b/core/res/res/values-mcc310-mnc160-az/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-az-rAZ/strings.xml
rename to core/res/res/values-mcc310-mnc160-az/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-be-rBY/strings.xml b/core/res/res/values-mcc310-mnc160-be/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-be-rBY/strings.xml
rename to core/res/res/values-mcc310-mnc160-be/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-bn-rBD/strings.xml b/core/res/res/values-mcc310-mnc160-bn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-bn-rBD/strings.xml
rename to core/res/res/values-mcc310-mnc160-bn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-bs-rBA/strings.xml b/core/res/res/values-mcc310-mnc160-bs/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-bs-rBA/strings.xml
rename to core/res/res/values-mcc310-mnc160-bs/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-et-rEE/strings.xml b/core/res/res/values-mcc310-mnc160-et/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-et-rEE/strings.xml
rename to core/res/res/values-mcc310-mnc160-et/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-eu-rES/strings.xml b/core/res/res/values-mcc310-mnc160-eu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-eu-rES/strings.xml
rename to core/res/res/values-mcc310-mnc160-eu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-gl-rES/strings.xml b/core/res/res/values-mcc310-mnc160-gl/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-gl-rES/strings.xml
rename to core/res/res/values-mcc310-mnc160-gl/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-gu-rIN/strings.xml b/core/res/res/values-mcc310-mnc160-gu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-gu-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc160-gu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-hy-rAM/strings.xml b/core/res/res/values-mcc310-mnc160-hy/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-hy-rAM/strings.xml
rename to core/res/res/values-mcc310-mnc160-hy/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-is-rIS/strings.xml b/core/res/res/values-mcc310-mnc160-is/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-is-rIS/strings.xml
rename to core/res/res/values-mcc310-mnc160-is/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-ka-rGE/strings.xml b/core/res/res/values-mcc310-mnc160-ka/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-ka-rGE/strings.xml
rename to core/res/res/values-mcc310-mnc160-ka/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-kk-rKZ/strings.xml b/core/res/res/values-mcc310-mnc160-kk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-kk-rKZ/strings.xml
rename to core/res/res/values-mcc310-mnc160-kk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-km-rKH/strings.xml b/core/res/res/values-mcc310-mnc160-km/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-km-rKH/strings.xml
rename to core/res/res/values-mcc310-mnc160-km/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-kn-rIN/strings.xml b/core/res/res/values-mcc310-mnc160-kn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-kn-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc160-kn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-ky-rKG/strings.xml b/core/res/res/values-mcc310-mnc160-ky/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-ky-rKG/strings.xml
rename to core/res/res/values-mcc310-mnc160-ky/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-lo-rLA/strings.xml b/core/res/res/values-mcc310-mnc160-lo/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-lo-rLA/strings.xml
rename to core/res/res/values-mcc310-mnc160-lo/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-mk-rMK/strings.xml b/core/res/res/values-mcc310-mnc160-mk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-mk-rMK/strings.xml
rename to core/res/res/values-mcc310-mnc160-mk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-ml-rIN/strings.xml b/core/res/res/values-mcc310-mnc160-ml/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-ml-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc160-ml/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-mn-rMN/strings.xml b/core/res/res/values-mcc310-mnc160-mn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-mn-rMN/strings.xml
rename to core/res/res/values-mcc310-mnc160-mn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-mr-rIN/strings.xml b/core/res/res/values-mcc310-mnc160-mr/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-mr-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc160-mr/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-ms-rMY/strings.xml b/core/res/res/values-mcc310-mnc160-ms/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-ms-rMY/strings.xml
rename to core/res/res/values-mcc310-mnc160-ms/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-my-rMM/strings.xml b/core/res/res/values-mcc310-mnc160-my/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-my-rMM/strings.xml
rename to core/res/res/values-mcc310-mnc160-my/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-ne-rNP/strings.xml b/core/res/res/values-mcc310-mnc160-ne/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-ne-rNP/strings.xml
rename to core/res/res/values-mcc310-mnc160-ne/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-pa-rIN/strings.xml b/core/res/res/values-mcc310-mnc160-pa/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-pa-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc160-pa/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-si-rLK/strings.xml b/core/res/res/values-mcc310-mnc160-si/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-si-rLK/strings.xml
rename to core/res/res/values-mcc310-mnc160-si/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-sq-rAL/strings.xml b/core/res/res/values-mcc310-mnc160-sq/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-sq-rAL/strings.xml
rename to core/res/res/values-mcc310-mnc160-sq/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-ta-rIN/strings.xml b/core/res/res/values-mcc310-mnc160-ta/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-ta-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc160-ta/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-te-rIN/strings.xml b/core/res/res/values-mcc310-mnc160-te/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-te-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc160-te/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-ur-rPK/strings.xml b/core/res/res/values-mcc310-mnc160-ur/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-ur-rPK/strings.xml
rename to core/res/res/values-mcc310-mnc160-ur/strings.xml
diff --git a/core/res/res/values-mcc310-mnc160-uz-rUZ/strings.xml b/core/res/res/values-mcc310-mnc160-uz/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc160-uz-rUZ/strings.xml
rename to core/res/res/values-mcc310-mnc160-uz/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-az-rAZ/strings.xml b/core/res/res/values-mcc310-mnc200-az/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-az-rAZ/strings.xml
rename to core/res/res/values-mcc310-mnc200-az/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-be-rBY/strings.xml b/core/res/res/values-mcc310-mnc200-be/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-be-rBY/strings.xml
rename to core/res/res/values-mcc310-mnc200-be/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-bn-rBD/strings.xml b/core/res/res/values-mcc310-mnc200-bn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-bn-rBD/strings.xml
rename to core/res/res/values-mcc310-mnc200-bn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-bs-rBA/strings.xml b/core/res/res/values-mcc310-mnc200-bs/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-bs-rBA/strings.xml
rename to core/res/res/values-mcc310-mnc200-bs/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-et-rEE/strings.xml b/core/res/res/values-mcc310-mnc200-et/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-et-rEE/strings.xml
rename to core/res/res/values-mcc310-mnc200-et/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-eu-rES/strings.xml b/core/res/res/values-mcc310-mnc200-eu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-eu-rES/strings.xml
rename to core/res/res/values-mcc310-mnc200-eu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-gl-rES/strings.xml b/core/res/res/values-mcc310-mnc200-gl/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-gl-rES/strings.xml
rename to core/res/res/values-mcc310-mnc200-gl/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-gu-rIN/strings.xml b/core/res/res/values-mcc310-mnc200-gu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-gu-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc200-gu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-hy-rAM/strings.xml b/core/res/res/values-mcc310-mnc200-hy/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-hy-rAM/strings.xml
rename to core/res/res/values-mcc310-mnc200-hy/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-is-rIS/strings.xml b/core/res/res/values-mcc310-mnc200-is/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-is-rIS/strings.xml
rename to core/res/res/values-mcc310-mnc200-is/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-ka-rGE/strings.xml b/core/res/res/values-mcc310-mnc200-ka/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-ka-rGE/strings.xml
rename to core/res/res/values-mcc310-mnc200-ka/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-kk-rKZ/strings.xml b/core/res/res/values-mcc310-mnc200-kk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-kk-rKZ/strings.xml
rename to core/res/res/values-mcc310-mnc200-kk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-km-rKH/strings.xml b/core/res/res/values-mcc310-mnc200-km/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-km-rKH/strings.xml
rename to core/res/res/values-mcc310-mnc200-km/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-kn-rIN/strings.xml b/core/res/res/values-mcc310-mnc200-kn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-kn-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc200-kn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-ky-rKG/strings.xml b/core/res/res/values-mcc310-mnc200-ky/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-ky-rKG/strings.xml
rename to core/res/res/values-mcc310-mnc200-ky/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-lo-rLA/strings.xml b/core/res/res/values-mcc310-mnc200-lo/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-lo-rLA/strings.xml
rename to core/res/res/values-mcc310-mnc200-lo/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-mk-rMK/strings.xml b/core/res/res/values-mcc310-mnc200-mk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-mk-rMK/strings.xml
rename to core/res/res/values-mcc310-mnc200-mk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-ml-rIN/strings.xml b/core/res/res/values-mcc310-mnc200-ml/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-ml-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc200-ml/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-mn-rMN/strings.xml b/core/res/res/values-mcc310-mnc200-mn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-mn-rMN/strings.xml
rename to core/res/res/values-mcc310-mnc200-mn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-mr-rIN/strings.xml b/core/res/res/values-mcc310-mnc200-mr/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-mr-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc200-mr/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-ms-rMY/strings.xml b/core/res/res/values-mcc310-mnc200-ms/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-ms-rMY/strings.xml
rename to core/res/res/values-mcc310-mnc200-ms/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-my-rMM/strings.xml b/core/res/res/values-mcc310-mnc200-my/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-my-rMM/strings.xml
rename to core/res/res/values-mcc310-mnc200-my/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-ne-rNP/strings.xml b/core/res/res/values-mcc310-mnc200-ne/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-ne-rNP/strings.xml
rename to core/res/res/values-mcc310-mnc200-ne/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-pa-rIN/strings.xml b/core/res/res/values-mcc310-mnc200-pa/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-pa-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc200-pa/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-si-rLK/strings.xml b/core/res/res/values-mcc310-mnc200-si/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-si-rLK/strings.xml
rename to core/res/res/values-mcc310-mnc200-si/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-sq-rAL/strings.xml b/core/res/res/values-mcc310-mnc200-sq/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-sq-rAL/strings.xml
rename to core/res/res/values-mcc310-mnc200-sq/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-ta-rIN/strings.xml b/core/res/res/values-mcc310-mnc200-ta/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-ta-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc200-ta/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-te-rIN/strings.xml b/core/res/res/values-mcc310-mnc200-te/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-te-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc200-te/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-ur-rPK/strings.xml b/core/res/res/values-mcc310-mnc200-ur/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-ur-rPK/strings.xml
rename to core/res/res/values-mcc310-mnc200-ur/strings.xml
diff --git a/core/res/res/values-mcc310-mnc200-uz-rUZ/strings.xml b/core/res/res/values-mcc310-mnc200-uz/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc200-uz-rUZ/strings.xml
rename to core/res/res/values-mcc310-mnc200-uz/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-az-rAZ/strings.xml b/core/res/res/values-mcc310-mnc210-az/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-az-rAZ/strings.xml
rename to core/res/res/values-mcc310-mnc210-az/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-be-rBY/strings.xml b/core/res/res/values-mcc310-mnc210-be/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-be-rBY/strings.xml
rename to core/res/res/values-mcc310-mnc210-be/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-bn-rBD/strings.xml b/core/res/res/values-mcc310-mnc210-bn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-bn-rBD/strings.xml
rename to core/res/res/values-mcc310-mnc210-bn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-bs-rBA/strings.xml b/core/res/res/values-mcc310-mnc210-bs/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-bs-rBA/strings.xml
rename to core/res/res/values-mcc310-mnc210-bs/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-et-rEE/strings.xml b/core/res/res/values-mcc310-mnc210-et/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-et-rEE/strings.xml
rename to core/res/res/values-mcc310-mnc210-et/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-eu-rES/strings.xml b/core/res/res/values-mcc310-mnc210-eu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-eu-rES/strings.xml
rename to core/res/res/values-mcc310-mnc210-eu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-gl-rES/strings.xml b/core/res/res/values-mcc310-mnc210-gl/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-gl-rES/strings.xml
rename to core/res/res/values-mcc310-mnc210-gl/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-gu-rIN/strings.xml b/core/res/res/values-mcc310-mnc210-gu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-gu-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc210-gu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-hy-rAM/strings.xml b/core/res/res/values-mcc310-mnc210-hy/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-hy-rAM/strings.xml
rename to core/res/res/values-mcc310-mnc210-hy/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-is-rIS/strings.xml b/core/res/res/values-mcc310-mnc210-is/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-is-rIS/strings.xml
rename to core/res/res/values-mcc310-mnc210-is/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-ka-rGE/strings.xml b/core/res/res/values-mcc310-mnc210-ka/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-ka-rGE/strings.xml
rename to core/res/res/values-mcc310-mnc210-ka/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-kk-rKZ/strings.xml b/core/res/res/values-mcc310-mnc210-kk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-kk-rKZ/strings.xml
rename to core/res/res/values-mcc310-mnc210-kk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-km-rKH/strings.xml b/core/res/res/values-mcc310-mnc210-km/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-km-rKH/strings.xml
rename to core/res/res/values-mcc310-mnc210-km/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-kn-rIN/strings.xml b/core/res/res/values-mcc310-mnc210-kn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-kn-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc210-kn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-ky-rKG/strings.xml b/core/res/res/values-mcc310-mnc210-ky/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-ky-rKG/strings.xml
rename to core/res/res/values-mcc310-mnc210-ky/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-lo-rLA/strings.xml b/core/res/res/values-mcc310-mnc210-lo/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-lo-rLA/strings.xml
rename to core/res/res/values-mcc310-mnc210-lo/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-mk-rMK/strings.xml b/core/res/res/values-mcc310-mnc210-mk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-mk-rMK/strings.xml
rename to core/res/res/values-mcc310-mnc210-mk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-ml-rIN/strings.xml b/core/res/res/values-mcc310-mnc210-ml/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-ml-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc210-ml/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-mn-rMN/strings.xml b/core/res/res/values-mcc310-mnc210-mn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-mn-rMN/strings.xml
rename to core/res/res/values-mcc310-mnc210-mn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-mr-rIN/strings.xml b/core/res/res/values-mcc310-mnc210-mr/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-mr-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc210-mr/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-ms-rMY/strings.xml b/core/res/res/values-mcc310-mnc210-ms/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-ms-rMY/strings.xml
rename to core/res/res/values-mcc310-mnc210-ms/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-my-rMM/strings.xml b/core/res/res/values-mcc310-mnc210-my/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-my-rMM/strings.xml
rename to core/res/res/values-mcc310-mnc210-my/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-ne-rNP/strings.xml b/core/res/res/values-mcc310-mnc210-ne/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-ne-rNP/strings.xml
rename to core/res/res/values-mcc310-mnc210-ne/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-pa-rIN/strings.xml b/core/res/res/values-mcc310-mnc210-pa/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-pa-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc210-pa/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-si-rLK/strings.xml b/core/res/res/values-mcc310-mnc210-si/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-si-rLK/strings.xml
rename to core/res/res/values-mcc310-mnc210-si/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-sq-rAL/strings.xml b/core/res/res/values-mcc310-mnc210-sq/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-sq-rAL/strings.xml
rename to core/res/res/values-mcc310-mnc210-sq/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-ta-rIN/strings.xml b/core/res/res/values-mcc310-mnc210-ta/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-ta-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc210-ta/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-te-rIN/strings.xml b/core/res/res/values-mcc310-mnc210-te/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-te-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc210-te/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-ur-rPK/strings.xml b/core/res/res/values-mcc310-mnc210-ur/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-ur-rPK/strings.xml
rename to core/res/res/values-mcc310-mnc210-ur/strings.xml
diff --git a/core/res/res/values-mcc310-mnc210-uz-rUZ/strings.xml b/core/res/res/values-mcc310-mnc210-uz/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc210-uz-rUZ/strings.xml
rename to core/res/res/values-mcc310-mnc210-uz/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-az-rAZ/strings.xml b/core/res/res/values-mcc310-mnc220-az/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-az-rAZ/strings.xml
rename to core/res/res/values-mcc310-mnc220-az/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-be-rBY/strings.xml b/core/res/res/values-mcc310-mnc220-be/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-be-rBY/strings.xml
rename to core/res/res/values-mcc310-mnc220-be/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-bn-rBD/strings.xml b/core/res/res/values-mcc310-mnc220-bn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-bn-rBD/strings.xml
rename to core/res/res/values-mcc310-mnc220-bn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-bs-rBA/strings.xml b/core/res/res/values-mcc310-mnc220-bs/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-bs-rBA/strings.xml
rename to core/res/res/values-mcc310-mnc220-bs/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-et-rEE/strings.xml b/core/res/res/values-mcc310-mnc220-et/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-et-rEE/strings.xml
rename to core/res/res/values-mcc310-mnc220-et/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-eu-rES/strings.xml b/core/res/res/values-mcc310-mnc220-eu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-eu-rES/strings.xml
rename to core/res/res/values-mcc310-mnc220-eu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-gl-rES/strings.xml b/core/res/res/values-mcc310-mnc220-gl/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-gl-rES/strings.xml
rename to core/res/res/values-mcc310-mnc220-gl/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-gu-rIN/strings.xml b/core/res/res/values-mcc310-mnc220-gu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-gu-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc220-gu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-hy-rAM/strings.xml b/core/res/res/values-mcc310-mnc220-hy/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-hy-rAM/strings.xml
rename to core/res/res/values-mcc310-mnc220-hy/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-is-rIS/strings.xml b/core/res/res/values-mcc310-mnc220-is/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-is-rIS/strings.xml
rename to core/res/res/values-mcc310-mnc220-is/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-ka-rGE/strings.xml b/core/res/res/values-mcc310-mnc220-ka/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-ka-rGE/strings.xml
rename to core/res/res/values-mcc310-mnc220-ka/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-kk-rKZ/strings.xml b/core/res/res/values-mcc310-mnc220-kk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-kk-rKZ/strings.xml
rename to core/res/res/values-mcc310-mnc220-kk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-km-rKH/strings.xml b/core/res/res/values-mcc310-mnc220-km/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-km-rKH/strings.xml
rename to core/res/res/values-mcc310-mnc220-km/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-kn-rIN/strings.xml b/core/res/res/values-mcc310-mnc220-kn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-kn-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc220-kn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-ky-rKG/strings.xml b/core/res/res/values-mcc310-mnc220-ky/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-ky-rKG/strings.xml
rename to core/res/res/values-mcc310-mnc220-ky/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-lo-rLA/strings.xml b/core/res/res/values-mcc310-mnc220-lo/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-lo-rLA/strings.xml
rename to core/res/res/values-mcc310-mnc220-lo/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-mk-rMK/strings.xml b/core/res/res/values-mcc310-mnc220-mk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-mk-rMK/strings.xml
rename to core/res/res/values-mcc310-mnc220-mk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-ml-rIN/strings.xml b/core/res/res/values-mcc310-mnc220-ml/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-ml-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc220-ml/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-mn-rMN/strings.xml b/core/res/res/values-mcc310-mnc220-mn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-mn-rMN/strings.xml
rename to core/res/res/values-mcc310-mnc220-mn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-mr-rIN/strings.xml b/core/res/res/values-mcc310-mnc220-mr/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-mr-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc220-mr/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-ms-rMY/strings.xml b/core/res/res/values-mcc310-mnc220-ms/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-ms-rMY/strings.xml
rename to core/res/res/values-mcc310-mnc220-ms/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-my-rMM/strings.xml b/core/res/res/values-mcc310-mnc220-my/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-my-rMM/strings.xml
rename to core/res/res/values-mcc310-mnc220-my/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-ne-rNP/strings.xml b/core/res/res/values-mcc310-mnc220-ne/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-ne-rNP/strings.xml
rename to core/res/res/values-mcc310-mnc220-ne/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-pa-rIN/strings.xml b/core/res/res/values-mcc310-mnc220-pa/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-pa-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc220-pa/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-si-rLK/strings.xml b/core/res/res/values-mcc310-mnc220-si/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-si-rLK/strings.xml
rename to core/res/res/values-mcc310-mnc220-si/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-sq-rAL/strings.xml b/core/res/res/values-mcc310-mnc220-sq/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-sq-rAL/strings.xml
rename to core/res/res/values-mcc310-mnc220-sq/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-ta-rIN/strings.xml b/core/res/res/values-mcc310-mnc220-ta/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-ta-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc220-ta/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-te-rIN/strings.xml b/core/res/res/values-mcc310-mnc220-te/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-te-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc220-te/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-ur-rPK/strings.xml b/core/res/res/values-mcc310-mnc220-ur/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-ur-rPK/strings.xml
rename to core/res/res/values-mcc310-mnc220-ur/strings.xml
diff --git a/core/res/res/values-mcc310-mnc220-uz-rUZ/strings.xml b/core/res/res/values-mcc310-mnc220-uz/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc220-uz-rUZ/strings.xml
rename to core/res/res/values-mcc310-mnc220-uz/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-az-rAZ/strings.xml b/core/res/res/values-mcc310-mnc230-az/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-az-rAZ/strings.xml
rename to core/res/res/values-mcc310-mnc230-az/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-be-rBY/strings.xml b/core/res/res/values-mcc310-mnc230-be/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-be-rBY/strings.xml
rename to core/res/res/values-mcc310-mnc230-be/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-bn-rBD/strings.xml b/core/res/res/values-mcc310-mnc230-bn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-bn-rBD/strings.xml
rename to core/res/res/values-mcc310-mnc230-bn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-bs-rBA/strings.xml b/core/res/res/values-mcc310-mnc230-bs/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-bs-rBA/strings.xml
rename to core/res/res/values-mcc310-mnc230-bs/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-et-rEE/strings.xml b/core/res/res/values-mcc310-mnc230-et/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-et-rEE/strings.xml
rename to core/res/res/values-mcc310-mnc230-et/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-eu-rES/strings.xml b/core/res/res/values-mcc310-mnc230-eu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-eu-rES/strings.xml
rename to core/res/res/values-mcc310-mnc230-eu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-gl-rES/strings.xml b/core/res/res/values-mcc310-mnc230-gl/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-gl-rES/strings.xml
rename to core/res/res/values-mcc310-mnc230-gl/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-gu-rIN/strings.xml b/core/res/res/values-mcc310-mnc230-gu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-gu-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc230-gu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-hy-rAM/strings.xml b/core/res/res/values-mcc310-mnc230-hy/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-hy-rAM/strings.xml
rename to core/res/res/values-mcc310-mnc230-hy/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-is-rIS/strings.xml b/core/res/res/values-mcc310-mnc230-is/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-is-rIS/strings.xml
rename to core/res/res/values-mcc310-mnc230-is/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-ka-rGE/strings.xml b/core/res/res/values-mcc310-mnc230-ka/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-ka-rGE/strings.xml
rename to core/res/res/values-mcc310-mnc230-ka/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-kk-rKZ/strings.xml b/core/res/res/values-mcc310-mnc230-kk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-kk-rKZ/strings.xml
rename to core/res/res/values-mcc310-mnc230-kk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-km-rKH/strings.xml b/core/res/res/values-mcc310-mnc230-km/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-km-rKH/strings.xml
rename to core/res/res/values-mcc310-mnc230-km/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-kn-rIN/strings.xml b/core/res/res/values-mcc310-mnc230-kn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-kn-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc230-kn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-ky-rKG/strings.xml b/core/res/res/values-mcc310-mnc230-ky/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-ky-rKG/strings.xml
rename to core/res/res/values-mcc310-mnc230-ky/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-lo-rLA/strings.xml b/core/res/res/values-mcc310-mnc230-lo/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-lo-rLA/strings.xml
rename to core/res/res/values-mcc310-mnc230-lo/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-mk-rMK/strings.xml b/core/res/res/values-mcc310-mnc230-mk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-mk-rMK/strings.xml
rename to core/res/res/values-mcc310-mnc230-mk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-ml-rIN/strings.xml b/core/res/res/values-mcc310-mnc230-ml/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-ml-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc230-ml/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-mn-rMN/strings.xml b/core/res/res/values-mcc310-mnc230-mn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-mn-rMN/strings.xml
rename to core/res/res/values-mcc310-mnc230-mn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-mr-rIN/strings.xml b/core/res/res/values-mcc310-mnc230-mr/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-mr-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc230-mr/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-ms-rMY/strings.xml b/core/res/res/values-mcc310-mnc230-ms/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-ms-rMY/strings.xml
rename to core/res/res/values-mcc310-mnc230-ms/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-my-rMM/strings.xml b/core/res/res/values-mcc310-mnc230-my/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-my-rMM/strings.xml
rename to core/res/res/values-mcc310-mnc230-my/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-ne-rNP/strings.xml b/core/res/res/values-mcc310-mnc230-ne/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-ne-rNP/strings.xml
rename to core/res/res/values-mcc310-mnc230-ne/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-pa-rIN/strings.xml b/core/res/res/values-mcc310-mnc230-pa/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-pa-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc230-pa/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-si-rLK/strings.xml b/core/res/res/values-mcc310-mnc230-si/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-si-rLK/strings.xml
rename to core/res/res/values-mcc310-mnc230-si/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-sq-rAL/strings.xml b/core/res/res/values-mcc310-mnc230-sq/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-sq-rAL/strings.xml
rename to core/res/res/values-mcc310-mnc230-sq/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-ta-rIN/strings.xml b/core/res/res/values-mcc310-mnc230-ta/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-ta-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc230-ta/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-te-rIN/strings.xml b/core/res/res/values-mcc310-mnc230-te/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-te-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc230-te/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-ur-rPK/strings.xml b/core/res/res/values-mcc310-mnc230-ur/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-ur-rPK/strings.xml
rename to core/res/res/values-mcc310-mnc230-ur/strings.xml
diff --git a/core/res/res/values-mcc310-mnc230-uz-rUZ/strings.xml b/core/res/res/values-mcc310-mnc230-uz/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc230-uz-rUZ/strings.xml
rename to core/res/res/values-mcc310-mnc230-uz/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-az-rAZ/strings.xml b/core/res/res/values-mcc310-mnc240-az/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-az-rAZ/strings.xml
rename to core/res/res/values-mcc310-mnc240-az/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-be-rBY/strings.xml b/core/res/res/values-mcc310-mnc240-be/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-be-rBY/strings.xml
rename to core/res/res/values-mcc310-mnc240-be/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-bn-rBD/strings.xml b/core/res/res/values-mcc310-mnc240-bn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-bn-rBD/strings.xml
rename to core/res/res/values-mcc310-mnc240-bn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-bs-rBA/strings.xml b/core/res/res/values-mcc310-mnc240-bs/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-bs-rBA/strings.xml
rename to core/res/res/values-mcc310-mnc240-bs/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-et-rEE/strings.xml b/core/res/res/values-mcc310-mnc240-et/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-et-rEE/strings.xml
rename to core/res/res/values-mcc310-mnc240-et/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-eu-rES/strings.xml b/core/res/res/values-mcc310-mnc240-eu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-eu-rES/strings.xml
rename to core/res/res/values-mcc310-mnc240-eu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-gl-rES/strings.xml b/core/res/res/values-mcc310-mnc240-gl/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-gl-rES/strings.xml
rename to core/res/res/values-mcc310-mnc240-gl/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-gu-rIN/strings.xml b/core/res/res/values-mcc310-mnc240-gu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-gu-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc240-gu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-hy-rAM/strings.xml b/core/res/res/values-mcc310-mnc240-hy/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-hy-rAM/strings.xml
rename to core/res/res/values-mcc310-mnc240-hy/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-is-rIS/strings.xml b/core/res/res/values-mcc310-mnc240-is/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-is-rIS/strings.xml
rename to core/res/res/values-mcc310-mnc240-is/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-ka-rGE/strings.xml b/core/res/res/values-mcc310-mnc240-ka/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-ka-rGE/strings.xml
rename to core/res/res/values-mcc310-mnc240-ka/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-kk-rKZ/strings.xml b/core/res/res/values-mcc310-mnc240-kk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-kk-rKZ/strings.xml
rename to core/res/res/values-mcc310-mnc240-kk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-km-rKH/strings.xml b/core/res/res/values-mcc310-mnc240-km/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-km-rKH/strings.xml
rename to core/res/res/values-mcc310-mnc240-km/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-kn-rIN/strings.xml b/core/res/res/values-mcc310-mnc240-kn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-kn-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc240-kn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-ky-rKG/strings.xml b/core/res/res/values-mcc310-mnc240-ky/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-ky-rKG/strings.xml
rename to core/res/res/values-mcc310-mnc240-ky/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-lo-rLA/strings.xml b/core/res/res/values-mcc310-mnc240-lo/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-lo-rLA/strings.xml
rename to core/res/res/values-mcc310-mnc240-lo/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-mk-rMK/strings.xml b/core/res/res/values-mcc310-mnc240-mk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-mk-rMK/strings.xml
rename to core/res/res/values-mcc310-mnc240-mk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-ml-rIN/strings.xml b/core/res/res/values-mcc310-mnc240-ml/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-ml-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc240-ml/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-mn-rMN/strings.xml b/core/res/res/values-mcc310-mnc240-mn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-mn-rMN/strings.xml
rename to core/res/res/values-mcc310-mnc240-mn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-mr-rIN/strings.xml b/core/res/res/values-mcc310-mnc240-mr/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-mr-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc240-mr/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-ms-rMY/strings.xml b/core/res/res/values-mcc310-mnc240-ms/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-ms-rMY/strings.xml
rename to core/res/res/values-mcc310-mnc240-ms/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-my-rMM/strings.xml b/core/res/res/values-mcc310-mnc240-my/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-my-rMM/strings.xml
rename to core/res/res/values-mcc310-mnc240-my/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-ne-rNP/strings.xml b/core/res/res/values-mcc310-mnc240-ne/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-ne-rNP/strings.xml
rename to core/res/res/values-mcc310-mnc240-ne/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-pa-rIN/strings.xml b/core/res/res/values-mcc310-mnc240-pa/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-pa-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc240-pa/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-si-rLK/strings.xml b/core/res/res/values-mcc310-mnc240-si/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-si-rLK/strings.xml
rename to core/res/res/values-mcc310-mnc240-si/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-sq-rAL/strings.xml b/core/res/res/values-mcc310-mnc240-sq/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-sq-rAL/strings.xml
rename to core/res/res/values-mcc310-mnc240-sq/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-ta-rIN/strings.xml b/core/res/res/values-mcc310-mnc240-ta/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-ta-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc240-ta/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-te-rIN/strings.xml b/core/res/res/values-mcc310-mnc240-te/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-te-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc240-te/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-ur-rPK/strings.xml b/core/res/res/values-mcc310-mnc240-ur/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-ur-rPK/strings.xml
rename to core/res/res/values-mcc310-mnc240-ur/strings.xml
diff --git a/core/res/res/values-mcc310-mnc240-uz-rUZ/strings.xml b/core/res/res/values-mcc310-mnc240-uz/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc240-uz-rUZ/strings.xml
rename to core/res/res/values-mcc310-mnc240-uz/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-az-rAZ/strings.xml b/core/res/res/values-mcc310-mnc250-az/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-az-rAZ/strings.xml
rename to core/res/res/values-mcc310-mnc250-az/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-be-rBY/strings.xml b/core/res/res/values-mcc310-mnc250-be/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-be-rBY/strings.xml
rename to core/res/res/values-mcc310-mnc250-be/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-bn-rBD/strings.xml b/core/res/res/values-mcc310-mnc250-bn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-bn-rBD/strings.xml
rename to core/res/res/values-mcc310-mnc250-bn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-bs-rBA/strings.xml b/core/res/res/values-mcc310-mnc250-bs/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-bs-rBA/strings.xml
rename to core/res/res/values-mcc310-mnc250-bs/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-et-rEE/strings.xml b/core/res/res/values-mcc310-mnc250-et/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-et-rEE/strings.xml
rename to core/res/res/values-mcc310-mnc250-et/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-eu-rES/strings.xml b/core/res/res/values-mcc310-mnc250-eu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-eu-rES/strings.xml
rename to core/res/res/values-mcc310-mnc250-eu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-gl-rES/strings.xml b/core/res/res/values-mcc310-mnc250-gl/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-gl-rES/strings.xml
rename to core/res/res/values-mcc310-mnc250-gl/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-gu-rIN/strings.xml b/core/res/res/values-mcc310-mnc250-gu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-gu-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc250-gu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-hy-rAM/strings.xml b/core/res/res/values-mcc310-mnc250-hy/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-hy-rAM/strings.xml
rename to core/res/res/values-mcc310-mnc250-hy/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-is-rIS/strings.xml b/core/res/res/values-mcc310-mnc250-is/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-is-rIS/strings.xml
rename to core/res/res/values-mcc310-mnc250-is/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-ka-rGE/strings.xml b/core/res/res/values-mcc310-mnc250-ka/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-ka-rGE/strings.xml
rename to core/res/res/values-mcc310-mnc250-ka/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-kk-rKZ/strings.xml b/core/res/res/values-mcc310-mnc250-kk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-kk-rKZ/strings.xml
rename to core/res/res/values-mcc310-mnc250-kk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-km-rKH/strings.xml b/core/res/res/values-mcc310-mnc250-km/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-km-rKH/strings.xml
rename to core/res/res/values-mcc310-mnc250-km/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-kn-rIN/strings.xml b/core/res/res/values-mcc310-mnc250-kn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-kn-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc250-kn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-ky-rKG/strings.xml b/core/res/res/values-mcc310-mnc250-ky/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-ky-rKG/strings.xml
rename to core/res/res/values-mcc310-mnc250-ky/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-lo-rLA/strings.xml b/core/res/res/values-mcc310-mnc250-lo/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-lo-rLA/strings.xml
rename to core/res/res/values-mcc310-mnc250-lo/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-mk-rMK/strings.xml b/core/res/res/values-mcc310-mnc250-mk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-mk-rMK/strings.xml
rename to core/res/res/values-mcc310-mnc250-mk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-ml-rIN/strings.xml b/core/res/res/values-mcc310-mnc250-ml/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-ml-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc250-ml/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-mn-rMN/strings.xml b/core/res/res/values-mcc310-mnc250-mn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-mn-rMN/strings.xml
rename to core/res/res/values-mcc310-mnc250-mn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-mr-rIN/strings.xml b/core/res/res/values-mcc310-mnc250-mr/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-mr-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc250-mr/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-ms-rMY/strings.xml b/core/res/res/values-mcc310-mnc250-ms/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-ms-rMY/strings.xml
rename to core/res/res/values-mcc310-mnc250-ms/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-my-rMM/strings.xml b/core/res/res/values-mcc310-mnc250-my/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-my-rMM/strings.xml
rename to core/res/res/values-mcc310-mnc250-my/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-ne-rNP/strings.xml b/core/res/res/values-mcc310-mnc250-ne/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-ne-rNP/strings.xml
rename to core/res/res/values-mcc310-mnc250-ne/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-pa-rIN/strings.xml b/core/res/res/values-mcc310-mnc250-pa/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-pa-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc250-pa/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-si-rLK/strings.xml b/core/res/res/values-mcc310-mnc250-si/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-si-rLK/strings.xml
rename to core/res/res/values-mcc310-mnc250-si/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-sq-rAL/strings.xml b/core/res/res/values-mcc310-mnc250-sq/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-sq-rAL/strings.xml
rename to core/res/res/values-mcc310-mnc250-sq/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-ta-rIN/strings.xml b/core/res/res/values-mcc310-mnc250-ta/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-ta-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc250-ta/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-te-rIN/strings.xml b/core/res/res/values-mcc310-mnc250-te/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-te-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc250-te/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-ur-rPK/strings.xml b/core/res/res/values-mcc310-mnc250-ur/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-ur-rPK/strings.xml
rename to core/res/res/values-mcc310-mnc250-ur/strings.xml
diff --git a/core/res/res/values-mcc310-mnc250-uz-rUZ/strings.xml b/core/res/res/values-mcc310-mnc250-uz/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc250-uz-rUZ/strings.xml
rename to core/res/res/values-mcc310-mnc250-uz/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-az-rAZ/strings.xml b/core/res/res/values-mcc310-mnc260-az/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-az-rAZ/strings.xml
rename to core/res/res/values-mcc310-mnc260-az/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-be-rBY/strings.xml b/core/res/res/values-mcc310-mnc260-be/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-be-rBY/strings.xml
rename to core/res/res/values-mcc310-mnc260-be/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-bn-rBD/strings.xml b/core/res/res/values-mcc310-mnc260-bn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-bn-rBD/strings.xml
rename to core/res/res/values-mcc310-mnc260-bn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-bs-rBA/strings.xml b/core/res/res/values-mcc310-mnc260-bs/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-bs-rBA/strings.xml
rename to core/res/res/values-mcc310-mnc260-bs/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-et-rEE/strings.xml b/core/res/res/values-mcc310-mnc260-et/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-et-rEE/strings.xml
rename to core/res/res/values-mcc310-mnc260-et/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-eu-rES/strings.xml b/core/res/res/values-mcc310-mnc260-eu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-eu-rES/strings.xml
rename to core/res/res/values-mcc310-mnc260-eu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-gl-rES/strings.xml b/core/res/res/values-mcc310-mnc260-gl/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-gl-rES/strings.xml
rename to core/res/res/values-mcc310-mnc260-gl/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-gu-rIN/strings.xml b/core/res/res/values-mcc310-mnc260-gu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-gu-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc260-gu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-hy-rAM/strings.xml b/core/res/res/values-mcc310-mnc260-hy/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-hy-rAM/strings.xml
rename to core/res/res/values-mcc310-mnc260-hy/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-is-rIS/strings.xml b/core/res/res/values-mcc310-mnc260-is/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-is-rIS/strings.xml
rename to core/res/res/values-mcc310-mnc260-is/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-ka-rGE/strings.xml b/core/res/res/values-mcc310-mnc260-ka/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-ka-rGE/strings.xml
rename to core/res/res/values-mcc310-mnc260-ka/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-kk-rKZ/strings.xml b/core/res/res/values-mcc310-mnc260-kk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-kk-rKZ/strings.xml
rename to core/res/res/values-mcc310-mnc260-kk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-km-rKH/strings.xml b/core/res/res/values-mcc310-mnc260-km/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-km-rKH/strings.xml
rename to core/res/res/values-mcc310-mnc260-km/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-kn-rIN/strings.xml b/core/res/res/values-mcc310-mnc260-kn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-kn-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc260-kn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-ky-rKG/strings.xml b/core/res/res/values-mcc310-mnc260-ky/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-ky-rKG/strings.xml
rename to core/res/res/values-mcc310-mnc260-ky/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-lo-rLA/strings.xml b/core/res/res/values-mcc310-mnc260-lo/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-lo-rLA/strings.xml
rename to core/res/res/values-mcc310-mnc260-lo/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-mk-rMK/strings.xml b/core/res/res/values-mcc310-mnc260-mk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-mk-rMK/strings.xml
rename to core/res/res/values-mcc310-mnc260-mk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-ml-rIN/strings.xml b/core/res/res/values-mcc310-mnc260-ml/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-ml-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc260-ml/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-mn-rMN/strings.xml b/core/res/res/values-mcc310-mnc260-mn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-mn-rMN/strings.xml
rename to core/res/res/values-mcc310-mnc260-mn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-mr-rIN/strings.xml b/core/res/res/values-mcc310-mnc260-mr/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-mr-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc260-mr/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-ms-rMY/strings.xml b/core/res/res/values-mcc310-mnc260-ms/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-ms-rMY/strings.xml
rename to core/res/res/values-mcc310-mnc260-ms/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-my-rMM/strings.xml b/core/res/res/values-mcc310-mnc260-my/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-my-rMM/strings.xml
rename to core/res/res/values-mcc310-mnc260-my/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-ne-rNP/strings.xml b/core/res/res/values-mcc310-mnc260-ne/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-ne-rNP/strings.xml
rename to core/res/res/values-mcc310-mnc260-ne/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-pa-rIN/strings.xml b/core/res/res/values-mcc310-mnc260-pa/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-pa-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc260-pa/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-si-rLK/strings.xml b/core/res/res/values-mcc310-mnc260-si/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-si-rLK/strings.xml
rename to core/res/res/values-mcc310-mnc260-si/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-sq-rAL/strings.xml b/core/res/res/values-mcc310-mnc260-sq/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-sq-rAL/strings.xml
rename to core/res/res/values-mcc310-mnc260-sq/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-ta-rIN/strings.xml b/core/res/res/values-mcc310-mnc260-ta/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-ta-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc260-ta/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-te-rIN/strings.xml b/core/res/res/values-mcc310-mnc260-te/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-te-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc260-te/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-ur-rPK/strings.xml b/core/res/res/values-mcc310-mnc260-ur/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-ur-rPK/strings.xml
rename to core/res/res/values-mcc310-mnc260-ur/strings.xml
diff --git a/core/res/res/values-mcc310-mnc260-uz-rUZ/strings.xml b/core/res/res/values-mcc310-mnc260-uz/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc260-uz-rUZ/strings.xml
rename to core/res/res/values-mcc310-mnc260-uz/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-az-rAZ/strings.xml b/core/res/res/values-mcc310-mnc270-az/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-az-rAZ/strings.xml
rename to core/res/res/values-mcc310-mnc270-az/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-be-rBY/strings.xml b/core/res/res/values-mcc310-mnc270-be/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-be-rBY/strings.xml
rename to core/res/res/values-mcc310-mnc270-be/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-bn-rBD/strings.xml b/core/res/res/values-mcc310-mnc270-bn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-bn-rBD/strings.xml
rename to core/res/res/values-mcc310-mnc270-bn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-bs-rBA/strings.xml b/core/res/res/values-mcc310-mnc270-bs/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-bs-rBA/strings.xml
rename to core/res/res/values-mcc310-mnc270-bs/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-et-rEE/strings.xml b/core/res/res/values-mcc310-mnc270-et/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-et-rEE/strings.xml
rename to core/res/res/values-mcc310-mnc270-et/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-eu-rES/strings.xml b/core/res/res/values-mcc310-mnc270-eu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-eu-rES/strings.xml
rename to core/res/res/values-mcc310-mnc270-eu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-gl-rES/strings.xml b/core/res/res/values-mcc310-mnc270-gl/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-gl-rES/strings.xml
rename to core/res/res/values-mcc310-mnc270-gl/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-gu-rIN/strings.xml b/core/res/res/values-mcc310-mnc270-gu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-gu-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc270-gu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-hy-rAM/strings.xml b/core/res/res/values-mcc310-mnc270-hy/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-hy-rAM/strings.xml
rename to core/res/res/values-mcc310-mnc270-hy/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-is-rIS/strings.xml b/core/res/res/values-mcc310-mnc270-is/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-is-rIS/strings.xml
rename to core/res/res/values-mcc310-mnc270-is/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-ka-rGE/strings.xml b/core/res/res/values-mcc310-mnc270-ka/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-ka-rGE/strings.xml
rename to core/res/res/values-mcc310-mnc270-ka/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-kk-rKZ/strings.xml b/core/res/res/values-mcc310-mnc270-kk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-kk-rKZ/strings.xml
rename to core/res/res/values-mcc310-mnc270-kk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-km-rKH/strings.xml b/core/res/res/values-mcc310-mnc270-km/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-km-rKH/strings.xml
rename to core/res/res/values-mcc310-mnc270-km/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-kn-rIN/strings.xml b/core/res/res/values-mcc310-mnc270-kn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-kn-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc270-kn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-ky-rKG/strings.xml b/core/res/res/values-mcc310-mnc270-ky/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-ky-rKG/strings.xml
rename to core/res/res/values-mcc310-mnc270-ky/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-lo-rLA/strings.xml b/core/res/res/values-mcc310-mnc270-lo/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-lo-rLA/strings.xml
rename to core/res/res/values-mcc310-mnc270-lo/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-mk-rMK/strings.xml b/core/res/res/values-mcc310-mnc270-mk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-mk-rMK/strings.xml
rename to core/res/res/values-mcc310-mnc270-mk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-ml-rIN/strings.xml b/core/res/res/values-mcc310-mnc270-ml/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-ml-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc270-ml/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-mn-rMN/strings.xml b/core/res/res/values-mcc310-mnc270-mn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-mn-rMN/strings.xml
rename to core/res/res/values-mcc310-mnc270-mn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-mr-rIN/strings.xml b/core/res/res/values-mcc310-mnc270-mr/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-mr-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc270-mr/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-ms-rMY/strings.xml b/core/res/res/values-mcc310-mnc270-ms/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-ms-rMY/strings.xml
rename to core/res/res/values-mcc310-mnc270-ms/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-my-rMM/strings.xml b/core/res/res/values-mcc310-mnc270-my/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-my-rMM/strings.xml
rename to core/res/res/values-mcc310-mnc270-my/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-ne-rNP/strings.xml b/core/res/res/values-mcc310-mnc270-ne/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-ne-rNP/strings.xml
rename to core/res/res/values-mcc310-mnc270-ne/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-pa-rIN/strings.xml b/core/res/res/values-mcc310-mnc270-pa/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-pa-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc270-pa/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-si-rLK/strings.xml b/core/res/res/values-mcc310-mnc270-si/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-si-rLK/strings.xml
rename to core/res/res/values-mcc310-mnc270-si/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-sq-rAL/strings.xml b/core/res/res/values-mcc310-mnc270-sq/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-sq-rAL/strings.xml
rename to core/res/res/values-mcc310-mnc270-sq/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-ta-rIN/strings.xml b/core/res/res/values-mcc310-mnc270-ta/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-ta-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc270-ta/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-te-rIN/strings.xml b/core/res/res/values-mcc310-mnc270-te/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-te-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc270-te/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-ur-rPK/strings.xml b/core/res/res/values-mcc310-mnc270-ur/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-ur-rPK/strings.xml
rename to core/res/res/values-mcc310-mnc270-ur/strings.xml
diff --git a/core/res/res/values-mcc310-mnc270-uz-rUZ/strings.xml b/core/res/res/values-mcc310-mnc270-uz/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc270-uz-rUZ/strings.xml
rename to core/res/res/values-mcc310-mnc270-uz/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-az-rAZ/strings.xml b/core/res/res/values-mcc310-mnc310-az/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-az-rAZ/strings.xml
rename to core/res/res/values-mcc310-mnc310-az/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-be-rBY/strings.xml b/core/res/res/values-mcc310-mnc310-be/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-be-rBY/strings.xml
rename to core/res/res/values-mcc310-mnc310-be/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-bn-rBD/strings.xml b/core/res/res/values-mcc310-mnc310-bn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-bn-rBD/strings.xml
rename to core/res/res/values-mcc310-mnc310-bn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-bs-rBA/strings.xml b/core/res/res/values-mcc310-mnc310-bs/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-bs-rBA/strings.xml
rename to core/res/res/values-mcc310-mnc310-bs/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-et-rEE/strings.xml b/core/res/res/values-mcc310-mnc310-et/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-et-rEE/strings.xml
rename to core/res/res/values-mcc310-mnc310-et/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-eu-rES/strings.xml b/core/res/res/values-mcc310-mnc310-eu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-eu-rES/strings.xml
rename to core/res/res/values-mcc310-mnc310-eu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-gl-rES/strings.xml b/core/res/res/values-mcc310-mnc310-gl/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-gl-rES/strings.xml
rename to core/res/res/values-mcc310-mnc310-gl/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-gu-rIN/strings.xml b/core/res/res/values-mcc310-mnc310-gu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-gu-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc310-gu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-hy-rAM/strings.xml b/core/res/res/values-mcc310-mnc310-hy/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-hy-rAM/strings.xml
rename to core/res/res/values-mcc310-mnc310-hy/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-is-rIS/strings.xml b/core/res/res/values-mcc310-mnc310-is/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-is-rIS/strings.xml
rename to core/res/res/values-mcc310-mnc310-is/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-ka-rGE/strings.xml b/core/res/res/values-mcc310-mnc310-ka/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-ka-rGE/strings.xml
rename to core/res/res/values-mcc310-mnc310-ka/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-kk-rKZ/strings.xml b/core/res/res/values-mcc310-mnc310-kk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-kk-rKZ/strings.xml
rename to core/res/res/values-mcc310-mnc310-kk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-km-rKH/strings.xml b/core/res/res/values-mcc310-mnc310-km/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-km-rKH/strings.xml
rename to core/res/res/values-mcc310-mnc310-km/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-kn-rIN/strings.xml b/core/res/res/values-mcc310-mnc310-kn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-kn-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc310-kn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-ky-rKG/strings.xml b/core/res/res/values-mcc310-mnc310-ky/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-ky-rKG/strings.xml
rename to core/res/res/values-mcc310-mnc310-ky/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-lo-rLA/strings.xml b/core/res/res/values-mcc310-mnc310-lo/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-lo-rLA/strings.xml
rename to core/res/res/values-mcc310-mnc310-lo/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-mk-rMK/strings.xml b/core/res/res/values-mcc310-mnc310-mk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-mk-rMK/strings.xml
rename to core/res/res/values-mcc310-mnc310-mk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-ml-rIN/strings.xml b/core/res/res/values-mcc310-mnc310-ml/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-ml-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc310-ml/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-mn-rMN/strings.xml b/core/res/res/values-mcc310-mnc310-mn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-mn-rMN/strings.xml
rename to core/res/res/values-mcc310-mnc310-mn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-mr-rIN/strings.xml b/core/res/res/values-mcc310-mnc310-mr/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-mr-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc310-mr/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-ms-rMY/strings.xml b/core/res/res/values-mcc310-mnc310-ms/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-ms-rMY/strings.xml
rename to core/res/res/values-mcc310-mnc310-ms/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-my-rMM/strings.xml b/core/res/res/values-mcc310-mnc310-my/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-my-rMM/strings.xml
rename to core/res/res/values-mcc310-mnc310-my/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-ne-rNP/strings.xml b/core/res/res/values-mcc310-mnc310-ne/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-ne-rNP/strings.xml
rename to core/res/res/values-mcc310-mnc310-ne/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-pa-rIN/strings.xml b/core/res/res/values-mcc310-mnc310-pa/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-pa-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc310-pa/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-si-rLK/strings.xml b/core/res/res/values-mcc310-mnc310-si/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-si-rLK/strings.xml
rename to core/res/res/values-mcc310-mnc310-si/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-sq-rAL/strings.xml b/core/res/res/values-mcc310-mnc310-sq/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-sq-rAL/strings.xml
rename to core/res/res/values-mcc310-mnc310-sq/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-ta-rIN/strings.xml b/core/res/res/values-mcc310-mnc310-ta/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-ta-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc310-ta/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-te-rIN/strings.xml b/core/res/res/values-mcc310-mnc310-te/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-te-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc310-te/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-ur-rPK/strings.xml b/core/res/res/values-mcc310-mnc310-ur/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-ur-rPK/strings.xml
rename to core/res/res/values-mcc310-mnc310-ur/strings.xml
diff --git a/core/res/res/values-mcc310-mnc310-uz-rUZ/strings.xml b/core/res/res/values-mcc310-mnc310-uz/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc310-uz-rUZ/strings.xml
rename to core/res/res/values-mcc310-mnc310-uz/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-az-rAZ/strings.xml b/core/res/res/values-mcc310-mnc490-az/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-az-rAZ/strings.xml
rename to core/res/res/values-mcc310-mnc490-az/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-be-rBY/strings.xml b/core/res/res/values-mcc310-mnc490-be/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-be-rBY/strings.xml
rename to core/res/res/values-mcc310-mnc490-be/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-bn-rBD/strings.xml b/core/res/res/values-mcc310-mnc490-bn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-bn-rBD/strings.xml
rename to core/res/res/values-mcc310-mnc490-bn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-bs-rBA/strings.xml b/core/res/res/values-mcc310-mnc490-bs/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-bs-rBA/strings.xml
rename to core/res/res/values-mcc310-mnc490-bs/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-et-rEE/strings.xml b/core/res/res/values-mcc310-mnc490-et/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-et-rEE/strings.xml
rename to core/res/res/values-mcc310-mnc490-et/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-eu-rES/strings.xml b/core/res/res/values-mcc310-mnc490-eu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-eu-rES/strings.xml
rename to core/res/res/values-mcc310-mnc490-eu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-gl-rES/strings.xml b/core/res/res/values-mcc310-mnc490-gl/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-gl-rES/strings.xml
rename to core/res/res/values-mcc310-mnc490-gl/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-gu-rIN/strings.xml b/core/res/res/values-mcc310-mnc490-gu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-gu-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc490-gu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-hy-rAM/strings.xml b/core/res/res/values-mcc310-mnc490-hy/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-hy-rAM/strings.xml
rename to core/res/res/values-mcc310-mnc490-hy/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-is-rIS/strings.xml b/core/res/res/values-mcc310-mnc490-is/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-is-rIS/strings.xml
rename to core/res/res/values-mcc310-mnc490-is/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-ka-rGE/strings.xml b/core/res/res/values-mcc310-mnc490-ka/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-ka-rGE/strings.xml
rename to core/res/res/values-mcc310-mnc490-ka/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-kk-rKZ/strings.xml b/core/res/res/values-mcc310-mnc490-kk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-kk-rKZ/strings.xml
rename to core/res/res/values-mcc310-mnc490-kk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-km-rKH/strings.xml b/core/res/res/values-mcc310-mnc490-km/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-km-rKH/strings.xml
rename to core/res/res/values-mcc310-mnc490-km/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-kn-rIN/strings.xml b/core/res/res/values-mcc310-mnc490-kn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-kn-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc490-kn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-ky-rKG/strings.xml b/core/res/res/values-mcc310-mnc490-ky/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-ky-rKG/strings.xml
rename to core/res/res/values-mcc310-mnc490-ky/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-lo-rLA/strings.xml b/core/res/res/values-mcc310-mnc490-lo/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-lo-rLA/strings.xml
rename to core/res/res/values-mcc310-mnc490-lo/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-mk-rMK/strings.xml b/core/res/res/values-mcc310-mnc490-mk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-mk-rMK/strings.xml
rename to core/res/res/values-mcc310-mnc490-mk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-ml-rIN/strings.xml b/core/res/res/values-mcc310-mnc490-ml/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-ml-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc490-ml/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-mn-rMN/strings.xml b/core/res/res/values-mcc310-mnc490-mn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-mn-rMN/strings.xml
rename to core/res/res/values-mcc310-mnc490-mn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-mr-rIN/strings.xml b/core/res/res/values-mcc310-mnc490-mr/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-mr-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc490-mr/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-ms-rMY/strings.xml b/core/res/res/values-mcc310-mnc490-ms/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-ms-rMY/strings.xml
rename to core/res/res/values-mcc310-mnc490-ms/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-my-rMM/strings.xml b/core/res/res/values-mcc310-mnc490-my/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-my-rMM/strings.xml
rename to core/res/res/values-mcc310-mnc490-my/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-ne-rNP/strings.xml b/core/res/res/values-mcc310-mnc490-ne/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-ne-rNP/strings.xml
rename to core/res/res/values-mcc310-mnc490-ne/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-pa-rIN/strings.xml b/core/res/res/values-mcc310-mnc490-pa/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-pa-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc490-pa/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-si-rLK/strings.xml b/core/res/res/values-mcc310-mnc490-si/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-si-rLK/strings.xml
rename to core/res/res/values-mcc310-mnc490-si/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-sq-rAL/strings.xml b/core/res/res/values-mcc310-mnc490-sq/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-sq-rAL/strings.xml
rename to core/res/res/values-mcc310-mnc490-sq/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-ta-rIN/strings.xml b/core/res/res/values-mcc310-mnc490-ta/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-ta-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc490-ta/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-te-rIN/strings.xml b/core/res/res/values-mcc310-mnc490-te/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-te-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc490-te/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-ur-rPK/strings.xml b/core/res/res/values-mcc310-mnc490-ur/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-ur-rPK/strings.xml
rename to core/res/res/values-mcc310-mnc490-ur/strings.xml
diff --git a/core/res/res/values-mcc310-mnc490-uz-rUZ/strings.xml b/core/res/res/values-mcc310-mnc490-uz/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc490-uz-rUZ/strings.xml
rename to core/res/res/values-mcc310-mnc490-uz/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-az-rAZ/strings.xml b/core/res/res/values-mcc310-mnc660-az/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-az-rAZ/strings.xml
rename to core/res/res/values-mcc310-mnc660-az/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-be-rBY/strings.xml b/core/res/res/values-mcc310-mnc660-be/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-be-rBY/strings.xml
rename to core/res/res/values-mcc310-mnc660-be/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-bn-rBD/strings.xml b/core/res/res/values-mcc310-mnc660-bn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-bn-rBD/strings.xml
rename to core/res/res/values-mcc310-mnc660-bn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-bs-rBA/strings.xml b/core/res/res/values-mcc310-mnc660-bs/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-bs-rBA/strings.xml
rename to core/res/res/values-mcc310-mnc660-bs/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-et-rEE/strings.xml b/core/res/res/values-mcc310-mnc660-et/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-et-rEE/strings.xml
rename to core/res/res/values-mcc310-mnc660-et/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-eu-rES/strings.xml b/core/res/res/values-mcc310-mnc660-eu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-eu-rES/strings.xml
rename to core/res/res/values-mcc310-mnc660-eu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-gl-rES/strings.xml b/core/res/res/values-mcc310-mnc660-gl/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-gl-rES/strings.xml
rename to core/res/res/values-mcc310-mnc660-gl/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-gu-rIN/strings.xml b/core/res/res/values-mcc310-mnc660-gu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-gu-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc660-gu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-hy-rAM/strings.xml b/core/res/res/values-mcc310-mnc660-hy/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-hy-rAM/strings.xml
rename to core/res/res/values-mcc310-mnc660-hy/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-is-rIS/strings.xml b/core/res/res/values-mcc310-mnc660-is/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-is-rIS/strings.xml
rename to core/res/res/values-mcc310-mnc660-is/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-ka-rGE/strings.xml b/core/res/res/values-mcc310-mnc660-ka/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-ka-rGE/strings.xml
rename to core/res/res/values-mcc310-mnc660-ka/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-kk-rKZ/strings.xml b/core/res/res/values-mcc310-mnc660-kk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-kk-rKZ/strings.xml
rename to core/res/res/values-mcc310-mnc660-kk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-km-rKH/strings.xml b/core/res/res/values-mcc310-mnc660-km/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-km-rKH/strings.xml
rename to core/res/res/values-mcc310-mnc660-km/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-kn-rIN/strings.xml b/core/res/res/values-mcc310-mnc660-kn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-kn-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc660-kn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-ky-rKG/strings.xml b/core/res/res/values-mcc310-mnc660-ky/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-ky-rKG/strings.xml
rename to core/res/res/values-mcc310-mnc660-ky/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-lo-rLA/strings.xml b/core/res/res/values-mcc310-mnc660-lo/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-lo-rLA/strings.xml
rename to core/res/res/values-mcc310-mnc660-lo/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-mk-rMK/strings.xml b/core/res/res/values-mcc310-mnc660-mk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-mk-rMK/strings.xml
rename to core/res/res/values-mcc310-mnc660-mk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-ml-rIN/strings.xml b/core/res/res/values-mcc310-mnc660-ml/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-ml-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc660-ml/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-mn-rMN/strings.xml b/core/res/res/values-mcc310-mnc660-mn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-mn-rMN/strings.xml
rename to core/res/res/values-mcc310-mnc660-mn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-mr-rIN/strings.xml b/core/res/res/values-mcc310-mnc660-mr/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-mr-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc660-mr/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-ms-rMY/strings.xml b/core/res/res/values-mcc310-mnc660-ms/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-ms-rMY/strings.xml
rename to core/res/res/values-mcc310-mnc660-ms/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-my-rMM/strings.xml b/core/res/res/values-mcc310-mnc660-my/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-my-rMM/strings.xml
rename to core/res/res/values-mcc310-mnc660-my/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-ne-rNP/strings.xml b/core/res/res/values-mcc310-mnc660-ne/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-ne-rNP/strings.xml
rename to core/res/res/values-mcc310-mnc660-ne/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-pa-rIN/strings.xml b/core/res/res/values-mcc310-mnc660-pa/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-pa-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc660-pa/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-si-rLK/strings.xml b/core/res/res/values-mcc310-mnc660-si/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-si-rLK/strings.xml
rename to core/res/res/values-mcc310-mnc660-si/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-sq-rAL/strings.xml b/core/res/res/values-mcc310-mnc660-sq/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-sq-rAL/strings.xml
rename to core/res/res/values-mcc310-mnc660-sq/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-ta-rIN/strings.xml b/core/res/res/values-mcc310-mnc660-ta/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-ta-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc660-ta/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-te-rIN/strings.xml b/core/res/res/values-mcc310-mnc660-te/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-te-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc660-te/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-ur-rPK/strings.xml b/core/res/res/values-mcc310-mnc660-ur/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-ur-rPK/strings.xml
rename to core/res/res/values-mcc310-mnc660-ur/strings.xml
diff --git a/core/res/res/values-mcc310-mnc660-uz-rUZ/strings.xml b/core/res/res/values-mcc310-mnc660-uz/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc660-uz-rUZ/strings.xml
rename to core/res/res/values-mcc310-mnc660-uz/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-az-rAZ/strings.xml b/core/res/res/values-mcc310-mnc800-az/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-az-rAZ/strings.xml
rename to core/res/res/values-mcc310-mnc800-az/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-be-rBY/strings.xml b/core/res/res/values-mcc310-mnc800-be/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-be-rBY/strings.xml
rename to core/res/res/values-mcc310-mnc800-be/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-bn-rBD/strings.xml b/core/res/res/values-mcc310-mnc800-bn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-bn-rBD/strings.xml
rename to core/res/res/values-mcc310-mnc800-bn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-bs-rBA/strings.xml b/core/res/res/values-mcc310-mnc800-bs/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-bs-rBA/strings.xml
rename to core/res/res/values-mcc310-mnc800-bs/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-et-rEE/strings.xml b/core/res/res/values-mcc310-mnc800-et/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-et-rEE/strings.xml
rename to core/res/res/values-mcc310-mnc800-et/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-eu-rES/strings.xml b/core/res/res/values-mcc310-mnc800-eu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-eu-rES/strings.xml
rename to core/res/res/values-mcc310-mnc800-eu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-gl-rES/strings.xml b/core/res/res/values-mcc310-mnc800-gl/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-gl-rES/strings.xml
rename to core/res/res/values-mcc310-mnc800-gl/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-gu-rIN/strings.xml b/core/res/res/values-mcc310-mnc800-gu/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-gu-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc800-gu/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-hy-rAM/strings.xml b/core/res/res/values-mcc310-mnc800-hy/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-hy-rAM/strings.xml
rename to core/res/res/values-mcc310-mnc800-hy/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-is-rIS/strings.xml b/core/res/res/values-mcc310-mnc800-is/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-is-rIS/strings.xml
rename to core/res/res/values-mcc310-mnc800-is/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-ka-rGE/strings.xml b/core/res/res/values-mcc310-mnc800-ka/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-ka-rGE/strings.xml
rename to core/res/res/values-mcc310-mnc800-ka/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-kk-rKZ/strings.xml b/core/res/res/values-mcc310-mnc800-kk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-kk-rKZ/strings.xml
rename to core/res/res/values-mcc310-mnc800-kk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-km-rKH/strings.xml b/core/res/res/values-mcc310-mnc800-km/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-km-rKH/strings.xml
rename to core/res/res/values-mcc310-mnc800-km/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-kn-rIN/strings.xml b/core/res/res/values-mcc310-mnc800-kn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-kn-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc800-kn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-ky-rKG/strings.xml b/core/res/res/values-mcc310-mnc800-ky/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-ky-rKG/strings.xml
rename to core/res/res/values-mcc310-mnc800-ky/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-lo-rLA/strings.xml b/core/res/res/values-mcc310-mnc800-lo/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-lo-rLA/strings.xml
rename to core/res/res/values-mcc310-mnc800-lo/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-mk-rMK/strings.xml b/core/res/res/values-mcc310-mnc800-mk/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-mk-rMK/strings.xml
rename to core/res/res/values-mcc310-mnc800-mk/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-ml-rIN/strings.xml b/core/res/res/values-mcc310-mnc800-ml/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-ml-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc800-ml/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-mn-rMN/strings.xml b/core/res/res/values-mcc310-mnc800-mn/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-mn-rMN/strings.xml
rename to core/res/res/values-mcc310-mnc800-mn/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-mr-rIN/strings.xml b/core/res/res/values-mcc310-mnc800-mr/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-mr-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc800-mr/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-ms-rMY/strings.xml b/core/res/res/values-mcc310-mnc800-ms/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-ms-rMY/strings.xml
rename to core/res/res/values-mcc310-mnc800-ms/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-my-rMM/strings.xml b/core/res/res/values-mcc310-mnc800-my/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-my-rMM/strings.xml
rename to core/res/res/values-mcc310-mnc800-my/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-ne-rNP/strings.xml b/core/res/res/values-mcc310-mnc800-ne/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-ne-rNP/strings.xml
rename to core/res/res/values-mcc310-mnc800-ne/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-pa-rIN/strings.xml b/core/res/res/values-mcc310-mnc800-pa/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-pa-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc800-pa/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-si-rLK/strings.xml b/core/res/res/values-mcc310-mnc800-si/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-si-rLK/strings.xml
rename to core/res/res/values-mcc310-mnc800-si/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-sq-rAL/strings.xml b/core/res/res/values-mcc310-mnc800-sq/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-sq-rAL/strings.xml
rename to core/res/res/values-mcc310-mnc800-sq/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-ta-rIN/strings.xml b/core/res/res/values-mcc310-mnc800-ta/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-ta-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc800-ta/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-te-rIN/strings.xml b/core/res/res/values-mcc310-mnc800-te/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-te-rIN/strings.xml
rename to core/res/res/values-mcc310-mnc800-te/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-ur-rPK/strings.xml b/core/res/res/values-mcc310-mnc800-ur/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-ur-rPK/strings.xml
rename to core/res/res/values-mcc310-mnc800-ur/strings.xml
diff --git a/core/res/res/values-mcc310-mnc800-uz-rUZ/strings.xml b/core/res/res/values-mcc310-mnc800-uz/strings.xml
similarity index 100%
rename from core/res/res/values-mcc310-mnc800-uz-rUZ/strings.xml
rename to core/res/res/values-mcc310-mnc800-uz/strings.xml
diff --git a/core/res/res/values-mk-rMK-watch/strings.xml b/core/res/res/values-mk-watch/strings.xml
similarity index 100%
rename from core/res/res/values-mk-rMK-watch/strings.xml
rename to core/res/res/values-mk-watch/strings.xml
diff --git a/core/res/res/values-mk-rMK-watch/styles_material.xml b/core/res/res/values-mk-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-mk-rMK-watch/styles_material.xml
rename to core/res/res/values-mk-watch/styles_material.xml
diff --git a/core/res/res/values-mk-rMK/strings.xml b/core/res/res/values-mk/strings.xml
similarity index 99%
rename from core/res/res/values-mk-rMK/strings.xml
rename to core/res/res/values-mk/strings.xml
index abd1bfd..a4912c3 100644
--- a/core/res/res/values-mk-rMK/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Звуци за аларм"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Звуци за известување"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Непозната"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Wi-Fi мрежи се достапни</item>
- <item quantity="other">Wi-Fi мрежи се достапни</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">Отворени Wi-Fi мрежи се достапни</item>
- <item quantity="other">Отворени Wi-Fi мрежи се достапни</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Најавете се на мрежа на Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Најавете се на мрежа"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1561,7 +1553,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Работа <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"Втора деловна <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"Трета деловна <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"За откачување на екранов, допрете и задржете Назад."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"За откачување на екранов, допрете и задржете Назад и Краток преглед."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Апликацијата е закачена: откачување не е дозволено на уредов."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Екранот е закачен"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Екранот е откачен"</string>
diff --git a/core/res/res/values-ml-rIN-watch/strings.xml b/core/res/res/values-ml-watch/strings.xml
similarity index 100%
rename from core/res/res/values-ml-rIN-watch/strings.xml
rename to core/res/res/values-ml-watch/strings.xml
diff --git a/core/res/res/values-ml-rIN-watch/styles_material.xml b/core/res/res/values-ml-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-ml-rIN-watch/styles_material.xml
rename to core/res/res/values-ml-watch/styles_material.xml
diff --git a/core/res/res/values-ml-rIN/strings.xml b/core/res/res/values-ml/strings.xml
similarity index 99%
rename from core/res/res/values-ml-rIN/strings.xml
rename to core/res/res/values-ml/strings.xml
index e29c01b..202e69a 100644
--- a/core/res/res/values-ml-rIN/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"അലാറം ശബ്ദങ്ങൾ"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"അറിയിപ്പ് ശബ്ദങ്ങൾ"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"അറിഞ്ഞുകൂടാത്തത്"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">വൈഫൈ നെറ്റ്വർക്കുകൾ ലഭ്യമാണ്</item>
- <item quantity="one">വൈഫൈ നെറ്റ്വർക്ക് ലഭ്യമാണ്</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">ലഭ്യമായ വൈഫൈ നെറ്റ്വർക്കുകൾ തുറക്കുക</item>
- <item quantity="one">ലഭ്യമായ വൈഫൈ നെറ്റ്വർക്ക് തുറക്കുക</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"വൈഫൈ നെറ്റ്വർക്കിലേക്ക് സൈൻ ഇൻ ചെയ്യുക"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"നെറ്റ്വർക്കിലേക്ക് സൈൻ ഇൻ ചെയ്യുക"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"ഔദ്യോഗികം <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"രണ്ടാമത്തെ ഔദ്യോഗിക <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"മൂന്നാമത്തെ ഔദ്യോഗിക <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"ഈ സ്ക്രീൻ അൺപിൻ ചെയ്യാൻ, ബാക്ക് ബട്ടൺ സ്പർശിച്ച് പിടിക്കുക"</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"ഈ സ്ക്രീൻ അൺപിൻ ചെയ്യാൻ, ബാക്കും ചുരുക്കവിവരണവും സ്പർശിച്ച് പിടിക്കുക."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"അപ്ലിക്കേഷൻ പിൻ ചെയ്തു: ഈ ഉപകരണത്തിൽ അൺപിൻ ചെയ്യാനാവില്ല."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"സ്ക്രീൻ പിൻ ചെയ്തു"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"സ്ക്രീൻ അൺപിൻ ചെയ്തു"</string>
diff --git a/core/res/res/values-mn-rMN-watch/strings.xml b/core/res/res/values-mn-watch/strings.xml
similarity index 100%
rename from core/res/res/values-mn-rMN-watch/strings.xml
rename to core/res/res/values-mn-watch/strings.xml
diff --git a/core/res/res/values-mn-rMN-watch/styles_material.xml b/core/res/res/values-mn-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-mn-rMN-watch/styles_material.xml
rename to core/res/res/values-mn-watch/styles_material.xml
diff --git a/core/res/res/values-mn-rMN/strings.xml b/core/res/res/values-mn/strings.xml
similarity index 99%
rename from core/res/res/values-mn-rMN/strings.xml
rename to core/res/res/values-mn/strings.xml
index 2f1cc69..1dfb039 100644
--- a/core/res/res/values-mn-rMN/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Сэрүүлгийн ая"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Мэдэгдлийн дуу"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Тодорхойгүй"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wi-Fi сүлжээ ашиглах боломжтой</item>
- <item quantity="one">Wi-Fi сүлжээ ашиглах боломжтой</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Нээлттэй Wi-Fi сүлжээ ашиглах боломжтой</item>
- <item quantity="one">Нээлттэй Wi-Fi сүлжээ ашиглах боломжтой</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Wi-Fi сүлжээнд нэвтэрнэ үү"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Сүлжээнд нэвтэрнэ үү"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Ажлын <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2 дахь ажил <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3 дахь ажил <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Энэ дэлгэцийг эхэнд нээхийг болиулахын тулд Буцах товчлуурыг дараад, хүлээнэ үү."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Энэ дэлгэцийг тогтоосныг болиулахын тулд Буцах, Тойм гэснийг товшоод, хүлээнэ үү."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"App-ыг тусгайлан тэмдэглэсэн байна: Энэ төхөөрөмж дээр тусгайлан тэмдэглэсэн сонголтыг устгах боломжгүй."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Дэлгэцийг тогтоосон"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Дэлгэцийг сулласан"</string>
diff --git a/core/res/res/values-mr-rIN-watch/strings.xml b/core/res/res/values-mr-watch/strings.xml
similarity index 100%
rename from core/res/res/values-mr-rIN-watch/strings.xml
rename to core/res/res/values-mr-watch/strings.xml
diff --git a/core/res/res/values-mr-rIN-watch/styles_material.xml b/core/res/res/values-mr-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-mr-rIN-watch/styles_material.xml
rename to core/res/res/values-mr-watch/styles_material.xml
diff --git a/core/res/res/values-mr-rIN/strings.xml b/core/res/res/values-mr/strings.xml
similarity index 99%
rename from core/res/res/values-mr-rIN/strings.xml
rename to core/res/res/values-mr/strings.xml
index 50b41c0..4f4275a 100644
--- a/core/res/res/values-mr-rIN/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -323,7 +323,7 @@
<string name="permdesc_persistentActivity" product="tv" msgid="5086862529499103587">"अॅपला मेमरीमध्ये कायम असलेले त्याचे स्वतःचे भाग बनविण्यासाठी अनुमती देते. हे टीव्ही धीमा करून इतर अॅप्सवर उपलब्ध असलेली मेमरी मर्यादित करू शकते."</string>
<string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"अॅप ला मेमरीमध्ये कायम असलेले त्याचे स्वतःचे भाग बनविण्यास अनुमती देते. हे फोन धीमा करून अन्य अॅप्सवर उपलब्ध असलेल्या मेमरीवर मर्यादा घालू शकते."</string>
<string name="permlab_getPackageSize" msgid="7472921768357981986">"अॅप संचयन स्थान मोजा"</string>
- <string name="permdesc_getPackageSize" msgid="3921068154420738296">"अॅप ला त्याचा कोड, डेटा आणि कॅशे आकार पुनर्प्राप्त करण्यासाठी अनुमती देते"</string>
+ <string name="permdesc_getPackageSize" msgid="3921068154420738296">"अॅप ला त्याचा कोड, डेटा आणि कॅश आकार पुनर्प्राप्त करण्यासाठी अनुमती देते"</string>
<string name="permlab_writeSettings" msgid="2226195290955224730">"सिस्टम सेटिंग्ज सुधारित करा"</string>
<string name="permdesc_writeSettings" msgid="7775723441558907181">"सिस्टीमचा सेटिंग्ज डेटा सुधारित करण्यासाठी अॅप ला अनुमती देते. दुर्भावनापूर्ण अॅप्स आपल्या सिस्टीमचे कॉन्फिगरेशन दूषित करू शकतात."</string>
<string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"सुरूवातीस चालवा"</string>
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"अलार्म ध्वनी"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"सूचना ध्वनी"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"अज्ञात"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">वाय-फाय नेटवर्क उपलब्ध</item>
- <item quantity="other">वाय-फाय नेटवर्क उपलब्ध</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">खुले वाय-फाय नेटवर्क उपलब्ध</item>
- <item quantity="other">खुले वाय-फाय नेटवर्क उपलब्ध</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"वाय-फाय नेटवर्कमध्ये साइन इन करा"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"नेटवर्कवर साइन इन करा"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"कार्य <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2 रे कार्य <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3 रे कार्य <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"ही स्क्रीन अनपिन करण्यासाठी, परत ला स्पर्श करा आणि धरून ठेवा."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"ही स्क्रीन अनपिन करण्यासाठी, परत आणि विहंगावलोकनास स्पर्श करा आणि धरून ठेवा."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"अॅप पिन केलेला आहे: या डिव्हाइसवर अनपिन करण्यास अनुमती नाही."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"स्क्रीन पिन केली"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"स्क्रीन अनपिन केली"</string>
diff --git a/core/res/res/values-ms-rMY-watch/strings.xml b/core/res/res/values-ms-watch/strings.xml
similarity index 100%
rename from core/res/res/values-ms-rMY-watch/strings.xml
rename to core/res/res/values-ms-watch/strings.xml
diff --git a/core/res/res/values-ms-rMY-watch/styles_material.xml b/core/res/res/values-ms-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-ms-rMY-watch/styles_material.xml
rename to core/res/res/values-ms-watch/styles_material.xml
diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms/strings.xml
similarity index 99%
rename from core/res/res/values-ms-rMY/strings.xml
rename to core/res/res/values-ms/strings.xml
index 72daecb..69808069 100644
--- a/core/res/res/values-ms-rMY/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Bunyi penggera"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Bunyi pemberitahuan"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Tidak diketahui"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Rangkaian Wi-Fi tersedia</item>
- <item quantity="one">Rangkaian Wi-Fi tersedia</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Rangkaian Wi-Fi terbuka tersedia</item>
- <item quantity="one">Rangkaian Wi-Fi terbuka tersedia</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Log masuk ke rangkaian Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Log masuk ke rangkaian"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Kerja <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"<xliff:g id="LABEL">%1$s</xliff:g> kerja ke-2"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"<xliff:g id="LABEL">%1$s</xliff:g> kerja ke-3"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Untuk menyahsematkan skrin ni, ketik & tahan Kembali."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Untuk menyahsematkan skrin ini, sentuh & tahan Kembali dan Ikhtisar."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Apl disemat: Nyahsemat tidak dibenarkan pada peranti ini."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Skrin disemat"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Skrin dinyahsemat"</string>
diff --git a/core/res/res/values-my-rMM-watch/strings.xml b/core/res/res/values-my-watch/strings.xml
similarity index 100%
rename from core/res/res/values-my-rMM-watch/strings.xml
rename to core/res/res/values-my-watch/strings.xml
diff --git a/core/res/res/values-my-rMM-watch/styles_material.xml b/core/res/res/values-my-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-my-rMM-watch/styles_material.xml
rename to core/res/res/values-my-watch/styles_material.xml
diff --git a/core/res/res/values-my-rMM/strings.xml b/core/res/res/values-my/strings.xml
similarity index 99%
rename from core/res/res/values-my-rMM/strings.xml
rename to core/res/res/values-my/strings.xml
index c3ebf74..bada9a9 100644
--- a/core/res/res/values-my-rMM/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"နှိုးစက်သံ"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"အကြောင်းကြားချက်အသံ"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"အမျိုးအမည်မသိ"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wi-Fi ကွန်ယက်များရရှိနိုင်သည်</item>
- <item quantity="one">Wi-Fi ကွန်ယက်ရရှိနိုင်သည်</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Wi-Fi ကွန်ယက်များရရှိနိုင်သည်အား ဖွင့်ပါ</item>
- <item quantity="one">Wi-Fi ကွန်ယက်ရရှိနိုင်သည်အား ဖွင့်ပါ</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"ဝိုင်ဖိုင်ကွန်ရက်သို့ လက်မှတ်ထိုးဝင်ပါ"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"ကွန်ယက်သို့ လက်မှတ်ထိုးဝင်ရန်"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"အလုပ် <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"ဒုတိယအလုပ် <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"တတိယအလုပ် <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"ဤမျက်နှာပြင်ကို ပင်ဖြုတ်ရန် \"နောက်သို့\" ကိုထိပြီးဖိထားပါ။"</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"ဤမျက်နှာပြင်ကို ပင်ဖြုတ်ရန်အတွက် Back နှင့် Overview ကိုနှိပ်၍ ဖိထားပါ။"</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"အက်ပ်ကို ပင်ထိုးထားသည်။ ပင်ဖျက်ခြင်းကို ဒီစက်မှာ မရနိုင်ပါ။"</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"မျက်နှာပြင်ကို ပင်ထိုးထား"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"မျက်နှာပြင် ပင်ထိုးမှု ဖြတ်လိုက်ပြီ"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 4e7c4ce..d83e61e 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Alarmlyder"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Varsellyder"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Ukjent"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wi-Fi-nettverk er tilgjengelig</item>
- <item quantity="one">Wi-Fi-nettverk er tilgjengelig</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Åpne Wi-Fi-nettverk er tilgjengelig</item>
- <item quantity="one">Åpent Wi-Fi-nettverk er tilgjengelig</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Logg på Wi-Fi-nettverket"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Logg på nettverk"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Jobb-<xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"Andre <xliff:g id="LABEL">%1$s</xliff:g> for jobben"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"Tredje <xliff:g id="LABEL">%1$s</xliff:g> for jobben"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"For å løsne denne skjermen, trykk og hold inne Tilbake."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"For å løsne denne skjermen, trykk på og hold inne Tilbake og Oversikt."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Appen er festet – du kan ikke løsne apper på denne enheten."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Skjermen er festet"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Skjermen er løsnet"</string>
diff --git a/core/res/res/values-ne-rNP-watch/strings.xml b/core/res/res/values-ne-watch/strings.xml
similarity index 100%
rename from core/res/res/values-ne-rNP-watch/strings.xml
rename to core/res/res/values-ne-watch/strings.xml
diff --git a/core/res/res/values-ne-rNP-watch/styles_material.xml b/core/res/res/values-ne-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-ne-rNP-watch/styles_material.xml
rename to core/res/res/values-ne-watch/styles_material.xml
diff --git a/core/res/res/values-ne-rNP/strings.xml b/core/res/res/values-ne/strings.xml
similarity index 99%
rename from core/res/res/values-ne-rNP/strings.xml
rename to core/res/res/values-ne/strings.xml
index 3af8130..a033cba 100644
--- a/core/res/res/values-ne-rNP/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -1066,14 +1066,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"अलार्मका आवाजहरू"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"सूचना सम्बन्धी आवाजहरू"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"अज्ञात"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wi-Fi सञ्जालहरू उपलब्ध छन्</item>
- <item quantity="one">Wi-Fi सञ्जाल उपलब्ध छ</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other"> खुल्ला Wi-Fi सञ्जालहरू उपलब्ध छन्</item>
- <item quantity="one">खुल्ला Wi-Fi सञ्जाल उपलब्ध छ</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Wi-Fi नेटवर्कमा साइन इन गर्नुहोस्"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"सञ्जालमा साइन इन गर्नुहोस्"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1565,7 +1557,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"कार्य <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"कार्यालयको दोस्रो <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"कार्यालयको तेस्रो <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"यस स्क्रिनलाई अनपिन गर्न पछाडि बटनलाई छोइराख्नुहोस्।"</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"यस स्क्रिनलाई अनपिन गर्न पछाडि र परिदृश्य बटनलाई छोइराख्नुहोस्।"</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"अनुप्रयोग पिन गरियो: यस यन्त्रमा अनपिन गर्ने अनुमति छैन।"</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"स्क्रिन पिन गरियो"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"स्क्रिन अनपिन गरियो"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 39a5a02..b6e2426 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Alarmgeluiden"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Meldingsgeluiden"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Onbekend"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wifi-netwerken beschikbaar</item>
- <item quantity="one">Wifi-netwerk beschikbaar</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Open wifi-netwerken beschikbaar</item>
- <item quantity="one">Open wifi-netwerk beschikbaar</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Inloggen bij wifi-netwerk"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Inloggen bij netwerk"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Werk <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2e <xliff:g id="LABEL">%1$s</xliff:g>, werk"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3e <xliff:g id="LABEL">%1$s</xliff:g>, werk"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Tik op Terug en houd vast om dit scherm los te maken."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Tik op Terug en Overzicht en houd vast om dit scherm los te maken."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"App is vastgezet: losmaken is niet toegestaan op dit apparaat."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Scherm vastgezet"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Scherm losgemaakt"</string>
diff --git a/core/res/res/values-pa-rIN-watch/strings.xml b/core/res/res/values-pa-watch/strings.xml
similarity index 100%
rename from core/res/res/values-pa-rIN-watch/strings.xml
rename to core/res/res/values-pa-watch/strings.xml
diff --git a/core/res/res/values-pa-rIN-watch/styles_material.xml b/core/res/res/values-pa-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-pa-rIN-watch/styles_material.xml
rename to core/res/res/values-pa-watch/styles_material.xml
diff --git a/core/res/res/values-pa-rIN/strings.xml b/core/res/res/values-pa/strings.xml
similarity index 99%
rename from core/res/res/values-pa-rIN/strings.xml
rename to core/res/res/values-pa/strings.xml
index 315e7d5..21aeb9d 100644
--- a/core/res/res/values-pa-rIN/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"ਅਲਾਰਮ ਧੁਨੀਆਂ"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"ਸੂਚਨਾ ਧੁਨੀਆਂ"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"ਅਗਿਆਤ"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Wi-Fi ਨੈੱਟਵਰਕਸ ਉਪਲਬਧ</item>
- <item quantity="other">Wi-Fi ਨੈੱਟਵਰਕਸ ਉਪਲਬਧ</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">ਉਪਲਬਧ Wi-Fi ਨੈੱਟਵਰਕ ਖੋਲ੍ਹੋ</item>
- <item quantity="other">ਉਪਲਬਧ Wi-Fi ਨੈੱਟਵਰਕ ਖੋਲ੍ਹੋ</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Wi-Fi ਨੈੱਟਵਰਕ ਵਿੱਚ ਸਾਈਨ ਇਨ ਕਰੋ"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"ਨੈੱਟਵਰਕ ਤੇ ਸਾਈਨ ਇਨ ਕਰੋ"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"ਕੰਮ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"ਦੂਸਰੀ ਕਾਰਜ-ਸਥਾਨ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"ਤੀਸਰੀ ਕਾਰਜ-ਸਥਾਨ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"ਇਸ ਸਕ੍ਰੀਨ ਨੂੰ ਅਨਪਿੰਨ ਕਰਨ ਲਈ, ਸਪਰਸ਼ ਕਰੋ & ਦਬਾਈ ਰੱਖੋ।"</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"ਇਸ ਸਕ੍ਰੀਨ ਨੂੰ ਅਨਪਿੰਨ ਕਰਨ ਲਈ, \'ਪਿੱਛੇ\' ਅਤੇ \'ਰੂਪ-ਰੇਖਾ\' ਨੂੰ ਸਪੱਰਸ਼ ਕਰੋ ਅਤੇ ਦਬਾ ਕੇ ਰੱਖੋ।"</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"ਐਪ ਪਿੰਨਡ ਹੈ: ਇਸ ਡੀਵਾਈਸ ਤੇ ਅਨਪਿਨ ਕਰਨ ਦੀ ਆਗਿਆ ਨਹੀਂ ਹੈ।"</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"ਸਕ੍ਰੀਨ ਪਿੰਨ ਕੀਤੀ"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"ਸਕ੍ਰੀਨ ਅਨਪਿਨ ਕੀਤੀ"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 77b2bf3..57d64ad 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -1100,18 +1100,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Dźwięki alarmu"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Dźwięki powiadomień"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Nieznany"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="few">Dostępne są sieci Wi-Fi</item>
- <item quantity="many">Dostępne są sieci Wi-Fi</item>
- <item quantity="other">Dostępne są sieci Wi-Fi</item>
- <item quantity="one">Dostępna jest sieć Wi-Fi</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="few">Dostępne są otwarte sieci Wi-Fi</item>
- <item quantity="many">Dostępne są otwarte sieci Wi-Fi</item>
- <item quantity="other">Dostępne są otwarte sieci Wi-Fi</item>
- <item quantity="one">Dostępna jest otwarta sieć Wi-Fi</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Zaloguj się w sieci Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Zaloguj się do sieci"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1607,7 +1595,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> (praca)"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"<xliff:g id="LABEL">%1$s</xliff:g> – praca 2"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"<xliff:g id="LABEL">%1$s</xliff:g> – praca 3"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Aby odpiąć ten ekran, naciśnij i przytrzymaj Wstecz."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Aby odpiąć ten ekran, naciśnij i przytrzymaj Wstecz oraz Przegląd."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Aplikacja jest przypięta. Nie możesz jej odpiąć na tym urządzeniu."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Ekran przypięty"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Ekran odpięty"</string>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index 51519a7..094b30b 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Sons do alarme"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Sons de notificação"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Desconhecido"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Redes Wi-Fi disponíveis</item>
- <item quantity="other">Redes Wi-Fi disponíveis</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">Abrir redes Wi-Fi disponíveis</item>
- <item quantity="other">Abrir redes Wi-Fi disponíveis</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Fazer login na rede Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Fazer login na rede"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Trabalho: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"Segundo <xliff:g id="LABEL">%1$s</xliff:g> de trabalho"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"Terceiro <xliff:g id="LABEL">%1$s</xliff:g> de trabalho"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Para liberar esta tela, toque no botão \"Voltar\" e mantenha-o pressionado."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Para liberar essa tela, toque nos botões Voltar e Visão geral e mantenha-os pressionados."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"O app está fixado. A liberação não é permitida neste dispositivo."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Tela fixada"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Tela liberada"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 5ae5c40..c0a73a0 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Sons de alarme"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Sons de notificação"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Desconhecido"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Redes Wi-Fi disponíveis</item>
- <item quantity="one">Rede Wi-Fi disponível</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Redes Wi-Fi abertas disponíveis</item>
- <item quantity="one">Rede Wi-Fi aberta disponível</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Iniciar sessão na rede Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Início de sessão na rede"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> de trabalho"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2.º <xliff:g id="LABEL">%1$s</xliff:g> de trabalho"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3.º <xliff:g id="LABEL">%1$s</xliff:g> de trabalho"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Para soltar este ecrã, toque sem soltar em Anterior."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Para soltar este ecrã, toque sem soltar em Anterior e Vista geral."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"A aplicação está fixa: não é permitido soltá-la neste dispositivo."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Ecrã fixo"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Ecrã solto"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 51519a7..094b30b 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Sons do alarme"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Sons de notificação"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Desconhecido"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Redes Wi-Fi disponíveis</item>
- <item quantity="other">Redes Wi-Fi disponíveis</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">Abrir redes Wi-Fi disponíveis</item>
- <item quantity="other">Abrir redes Wi-Fi disponíveis</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Fazer login na rede Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Fazer login na rede"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Trabalho: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"Segundo <xliff:g id="LABEL">%1$s</xliff:g> de trabalho"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"Terceiro <xliff:g id="LABEL">%1$s</xliff:g> de trabalho"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Para liberar esta tela, toque no botão \"Voltar\" e mantenha-o pressionado."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Para liberar essa tela, toque nos botões Voltar e Visão geral e mantenha-os pressionados."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"O app está fixado. A liberação não é permitida neste dispositivo."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Tela fixada"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Tela liberada"</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 7af49e8..e809e3b 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -1080,16 +1080,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Sunete de alarmă"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Sunete pentru notificare"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Necunoscut"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="few">Rețele Wi-Fi disponibile</item>
- <item quantity="other">Rețele Wi-Fi disponibile</item>
- <item quantity="one">Rețea Wi-Fi disponibilă</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="few">Rețele Wi-Fi deschise disponibile</item>
- <item quantity="other">Rețele Wi-Fi deschise disponibile</item>
- <item quantity="one">Rețea Wi-Fi deschisă disponibilă</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Conectați-vă la rețeaua Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Conectați-vă la rețea"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1583,7 +1573,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> de serviciu"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"<xliff:g id="LABEL">%1$s</xliff:g> pentru serviciu (2)"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"<xliff:g id="LABEL">%1$s</xliff:g> pentru serviciu (3)"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Pentru a anula fixarea acestui ecran, atingeți lung opțiunea Înapoi."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Pentru a anula fixarea acestui ecran, atingeți lung opțiunile Înapoi și Recente."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Aplicația este fixată: Anularea fixării nu este permisă pe acest dispozitiv."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Ecran fixat"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Fixarea ecranului anulată"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 073033e..44b4c51 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -1100,18 +1100,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Сигнал будильника"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Мелодии уведомлений"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Неизвестно"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Есть доступные сети Wi-Fi</item>
- <item quantity="few">Есть доступные сети Wi-Fi</item>
- <item quantity="many">Есть доступные сети Wi-Fi</item>
- <item quantity="other">Есть доступные сети Wi-Fi</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">Есть открытые сети Wi-Fi</item>
- <item quantity="few">Есть открытые сети Wi-Fi</item>
- <item quantity="many">Есть открытые сети Wi-Fi</item>
- <item quantity="other">Есть открытые сети Wi-Fi</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Подключение к Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Регистрация в сети"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1607,7 +1595,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Рабочий <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"Задача 2: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"Задача 3: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Чтобы открепить экран, нажмите и удерживайте кнопку \"Назад\"."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Чтобы открепить экран, нажмите и удерживайте кнопки \"Назад\"и \"Обзор\""</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Включена блокировка в приложении. Ее отключение запрещено правилами организации."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Блокировка включена"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Блокировка выключена"</string>
diff --git a/core/res/res/values-si-rLK-watch/strings.xml b/core/res/res/values-si-watch/strings.xml
similarity index 100%
rename from core/res/res/values-si-rLK-watch/strings.xml
rename to core/res/res/values-si-watch/strings.xml
diff --git a/core/res/res/values-si-rLK-watch/styles_material.xml b/core/res/res/values-si-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-si-rLK-watch/styles_material.xml
rename to core/res/res/values-si-watch/styles_material.xml
diff --git a/core/res/res/values-si-rLK/strings.xml b/core/res/res/values-si/strings.xml
similarity index 99%
rename from core/res/res/values-si-rLK/strings.xml
rename to core/res/res/values-si/strings.xml
index c9b231a..2e49ec2 100644
--- a/core/res/res/values-si-rLK/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -1062,14 +1062,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"එලාම හඬ"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"දැනුම්දීම් හඬ"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"නොදනී"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Wi-Fi ජාල තිබේ</item>
- <item quantity="other">Wi-Fi ජාල තිබේ</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">විවෘත Wi-Fi ජාල තිබේ</item>
- <item quantity="other">විවෘත Wi-Fi ජාල තිබේ</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Wi-Fi ජාලයට පුරනය වන්න"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"ජාලයට පුරනය වන්න"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1561,7 +1553,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"වැඩ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2වන වැඩ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3වන වැඩ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"මෙම තිරය ඇමුණුම් ඉවත් කිරීමට, ස්පර්ශ කර අල්ලා ගෙන සිටින්න."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"මෙම තිරය ඇමුණුම් ඉවත් කිරීමට, දළ විශ්ලේෂණය ස්පර්ශ කර අල්ලා ගෙන සිටින්න."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"යෙදුම අමුණා ඇත: ගැලවීමට මෙම උපාංගය මත ඉඩ දිය නොහැකිය."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"තිරය අගුළු දමා ඇත"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"තිරයේ අගුළු ඇර ඇත"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 298b70f..71a0373 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -1100,18 +1100,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Zvuky budíka"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Zvuky upozornení"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Neznáme"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="few">K dispozícii sú siete Wi-Fi</item>
- <item quantity="many">K dispozícii sú siete Wi-Fi</item>
- <item quantity="other">K dispozícii sú siete Wi-Fi</item>
- <item quantity="one">K dispozícii je sieť Wi-Fi</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="few">K dispozícii sú verejné siete Wi-Fi</item>
- <item quantity="many">K dispozícii sú verejné siete Wi-Fi</item>
- <item quantity="other">K dispozícii sú verejné siete Wi-Fi</item>
- <item quantity="one">K dispozícii je verejná sieť Wi-Fi</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Prihlásiť sa do siete Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Prihlásenie do siete"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1607,7 +1595,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Práca – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2. <xliff:g id="LABEL">%1$s</xliff:g> do práce"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3. <xliff:g id="LABEL">%1$s</xliff:g> do práce"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Ak chcete uvoľniť túto obrazovku, klepnite na tlačidlo Späť a podržte ho."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Ak chcete odopnúť túto obrazovku, klepnite na tlačidlá Späť a Prehľad a podržte ich."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Aplikácia je pripnutá. Uvoľnenie nie je na tomto zariadení povolené."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Obrazovka bola pripnutá"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Obrazovka bola uvoľnená"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index c972bc0..fbd2fc2 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -1100,18 +1100,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Zvoki alarma"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Zvoki obvestil"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Neznano"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Na voljo so omrežja Wi-Fi</item>
- <item quantity="two">Na voljo so omrežja Wi-Fi</item>
- <item quantity="few">Na voljo so omrežja Wi-Fi</item>
- <item quantity="other">Na voljo so omrežja Wi-Fi</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">Na voljo so odprta omrežja Wi-Fi</item>
- <item quantity="two">Na voljo so odprta omrežja Wi-Fi</item>
- <item quantity="few">Na voljo so odprta omrežja Wi-Fi</item>
- <item quantity="other">Na voljo so odprta omrežja Wi-Fi</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Prijavite se v omrežje Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Prijava v omrežje"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1607,7 +1595,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> za delo"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2. službeni <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3. službeni <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Če želite odpeti ta zaslon, se dotaknite tipke za nazaj in jo pridržite."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Če želite odpeti ta zaslon, hkrati pridržite gumba Nazaj in Pregled."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Aplikacija je pripeta: v tej napravi odpenjanje ni dovoljeno."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Zaslon je pripet"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Zaslon je odpet"</string>
diff --git a/core/res/res/values-sq-rAL-watch/strings.xml b/core/res/res/values-sq-watch/strings.xml
similarity index 100%
rename from core/res/res/values-sq-rAL-watch/strings.xml
rename to core/res/res/values-sq-watch/strings.xml
diff --git a/core/res/res/values-sq-rAL-watch/styles_material.xml b/core/res/res/values-sq-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-sq-rAL-watch/styles_material.xml
rename to core/res/res/values-sq-watch/styles_material.xml
diff --git a/core/res/res/values-sq-rAL/strings.xml b/core/res/res/values-sq/strings.xml
similarity index 99%
rename from core/res/res/values-sq-rAL/strings.xml
rename to core/res/res/values-sq/strings.xml
index bf5110b..51c4b94 100644
--- a/core/res/res/values-sq-rAL/strings.xml
+++ b/core/res/res/values-sq/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Tingujt e alarmeve"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Tingujt e njoftimeve"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"E panjohur"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Rrjete Wi-Fi ofrohen për përdorim</item>
- <item quantity="one">Një rrjet Wi-Fi ofrohet për përdorim</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Rrjete të hapura Wi-Fi në përdorim</item>
- <item quantity="one">Rrjet i hapur Wi-Fi në përdorim</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Identifikohu në rrjetin Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Identifikohu në rrjet"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Puna <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"<xliff:g id="LABEL">%1$s</xliff:g> i dytë i punës"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"<xliff:g id="LABEL">%1$s</xliff:g> i tretë i punës"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Për të hequr gozhdimin e ekranit, prek dhe mbaj të shtypur \"Prapa\"."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Për të hequr gozhdimin e ekranit, prek dhe mbaj të shtypur \"Prapa\" dhe \"Përmbledhja\"."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Ekrani është i gozhduar. Anulimi i mbërthimit nuk lejohet nga organizata jote."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Ekrani u gozhdua"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Ekrani u hoq nga gozhdimi"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index b5adb2c..c23044c 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -1080,16 +1080,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Звуци аларма"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Звуци обавештења"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Непознато"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Wi-Fi мреже су доступне</item>
- <item quantity="few">Wi-Fi мреже су доступне</item>
- <item quantity="other">Wi-Fi мреже су доступне</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">Отворене Wi-Fi мреже су доступне</item>
- <item quantity="few">Отворене Wi-Fi мреже су доступне</item>
- <item quantity="other">Отворене Wi-Fi мреже су доступне</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Пријављивање на Wi-Fi мрежу"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Пријавите се на мрежу"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1583,7 +1573,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> на послу"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2. пословни <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3. пословни имејл <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Да бисте откачили овај екран, додирните и задржите Назад."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Да бисте откачили овај екран, додирните и задржите Назад и Преглед."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Апликација је закачена: откачињање није дозвољено на овом уређају."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Екран је закачен"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Екран је откачен"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index dfedf4c..adfd909 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Ljud för alarm"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Aviseringsljud"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Okänt"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wi-Fi-nätverk är tillgängliga</item>
- <item quantity="one">Wi-Fi-nätverk är tillgängligt</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Öppna Wi-Fi-nätverk är tillgängliga</item>
- <item quantity="one">Öppet Wi-Fi-nätverk är tillgängligt</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Logga in på ett Wi-Fi-nätverk"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Logga in på nätverket"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> för arbetet"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"Andra <xliff:g id="LABEL">%1$s</xliff:g> för jobbet"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"Tredje <xliff:g id="LABEL">%1$s</xliff:g> för jobbet"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Om du vill lossa skärmen trycker du länge på Tillbaka."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Om du vill lossa skärmen trycker du länge på Tillbaka och Översikt."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Appen är fäst. Att lossa den är inte tillåtet på den här enheten."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Skärmen är fäst"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Skärmen är inte längre fäst"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 6cd3b89..d460fe0 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -1058,14 +1058,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Sauti za kengele"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Sauti za arifa"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Haijulikani"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Mitandao ya Wi-Fi inapatikana</item>
- <item quantity="one">Mtandao wa Wi-Fi unapatikana</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Fungua mitandao ya Wi-Fi inayopatikana</item>
- <item quantity="one">Fungua mtandao wa Wi-Fi unaopatikana</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Ingia kwa mtandao wa Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Ingia katika mtandao"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1557,7 +1549,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Ya kazini <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"<xliff:g id="LABEL">%1$s</xliff:g> ya 2 ya Kazini"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"<xliff:g id="LABEL">%1$s</xliff:g> ya 3 ya Kazini"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Ili kubandua skrini hii, gusa na ushikilie Nyuma."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Ili kubandua skrini hii, gusa na ushikilie kitufe cha Nyuma na Muhtasari."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Programu imebanwa: Kubanuliwa hakuruhusiwi kwenye kifaa hiki."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Skrini imebandikwa"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Skrini imebanduliwa"</string>
diff --git a/core/res/res/values-ta-rIN-watch/strings.xml b/core/res/res/values-ta-watch/strings.xml
similarity index 100%
rename from core/res/res/values-ta-rIN-watch/strings.xml
rename to core/res/res/values-ta-watch/strings.xml
diff --git a/core/res/res/values-ta-rIN-watch/styles_material.xml b/core/res/res/values-ta-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-ta-rIN-watch/styles_material.xml
rename to core/res/res/values-ta-watch/styles_material.xml
diff --git a/core/res/res/values-ta-rIN/strings.xml b/core/res/res/values-ta/strings.xml
similarity index 99%
rename from core/res/res/values-ta-rIN/strings.xml
rename to core/res/res/values-ta/strings.xml
index abc9f6e..96a9f48 100644
--- a/core/res/res/values-ta-rIN/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"அலார ஒலிகள்"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"அறிவிப்பு ஒலிகள்"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"தெரியாதது"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">வைஃபை நெட்வொர்க்குகள் உள்ளன</item>
- <item quantity="one">வைஃபை நெட்வொர்க் உள்ளது</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">பொது வைஃபை நெட்வொர்க்குகள் உள்ளன</item>
- <item quantity="one">பொது வைஃபை நெட்வொர்க் உள்ளது</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"வைஃபை நெட்வொர்க்கில் உள்நுழையவும்"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"நெட்வொர்க்கில் உள்நுழையவும்"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"பணியிடம் <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2வது பணி <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3வது பணி <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"இந்தத் திரையை விலக்க, \"முந்தையது\" பொத்தானைத் தொட்டுப் பிடிக்கவும்."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"இந்தத் திரையை அகற்ற, முந்தையது மற்றும் மேலோட்டப் பார்வை ஆகிய இரண்டையும் தொட்டுப் பிடித்திருக்கவும்."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"பயன்பாடு பொருத்தப்பட்டது: பொருத்தியதை நீக்குவதற்கு இந்தச் சாதனத்தில் அனுமதியில்லை."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"திரை பின் செய்யப்பட்டது"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"திரையின் பின் அகற்றப்பட்டது"</string>
diff --git a/core/res/res/values-te-rIN-watch/strings.xml b/core/res/res/values-te-watch/strings.xml
similarity index 100%
rename from core/res/res/values-te-rIN-watch/strings.xml
rename to core/res/res/values-te-watch/strings.xml
diff --git a/core/res/res/values-te-rIN-watch/styles_material.xml b/core/res/res/values-te-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-te-rIN-watch/styles_material.xml
rename to core/res/res/values-te-watch/styles_material.xml
diff --git a/core/res/res/values-te-rIN/strings.xml b/core/res/res/values-te/strings.xml
similarity index 99%
rename from core/res/res/values-te-rIN/strings.xml
rename to core/res/res/values-te/strings.xml
index 90db049..4b93693 100644
--- a/core/res/res/values-te-rIN/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"అలారం ధ్వనులు"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"నోటిఫికేషన్ ధ్వనులు"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"తెలియదు"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wi-Fi నెట్వర్క్లు అందుబాటులో ఉన్నాయి</item>
- <item quantity="one">Wi-Fi నెట్వర్క్ అందుబాటులో ఉంది</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">ఓపెన్ Wi-Fi నెట్వర్క్లు అందుబాటులో ఉన్నాయి</item>
- <item quantity="one">ఓపెన్ Wi-Fi నెట్వర్క్ అందుబాటులో ఉంది</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Wi-Fi నెట్వర్క్కి సైన్ ఇన్ చేయండి"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"నెట్వర్క్కి సైన్ ఇన్ చేయండి"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"కార్యాలయం <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2వ కార్యాలయం <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3వ కార్యాలయం <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"ఈ స్క్రీన్ని అన్పిన్ చేయడానికి, వెనుకకు తాకి & అలాగే పట్టుకోండి."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"ఈ స్క్రీన్ను అన్పిన్ చేయడానికి, వెనుకకు మరియు స్థూలదృష్టి తాకి & అలాగే పట్టుకోండి."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"అనువర్తనం పిన్ చేయబడింది: ఈ పరికరంలో అన్పిన్ చేయడానికి అనుమతి లేదు."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"స్క్రీన్ పిన్ చేయబడింది"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"స్క్రీన్ అన్పిన్ చేయబడింది"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 5395fba..a46935c 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"เสียงปลุก"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"เสียงการแจ้งเตือน"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"ไม่รู้จัก"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">มีหลายเครือข่าย Wi-Fi ที่ใช้งานได้</item>
- <item quantity="one">มี 1 เครือข่าย Wi-Fi ที่ใช้งานได้</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">มีหลายเครือข่าย Wi-Fi สาธารณะที่ใช้งานได้</item>
- <item quantity="one">มี 1 เครือข่าย Wi-Fi สาธารณะที่ใช้งานได้</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"ลงชื่อเข้าใช้เครือข่าย WiFi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"ลงชื่อเข้าใช้เครือข่าย"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g>ที่ทำงาน"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"<xliff:g id="LABEL">%1$s</xliff:g> งานที่ 2"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"<xliff:g id="LABEL">%1$s</xliff:g> งานที่ 3"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"หากต้องการเลิกตรึงหน้าจอนี้ แตะ \"กลับ\" ค้างไว้"</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"หากต้องการเลิกตรึงหน้าจอนี้ ให้แตะ \"กลับ\" และ \"ภาพรวม\" ค้างไว้"</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"มีการตรึงแอป: ไม่อนุญาตให้เลิกตรึงบนอุปกรณ์นี้"</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"ตรึงหน้าจอแล้ว"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"เลิกตรึงหน้าจอแล้ว"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index bbe45f5..b738ada 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Mga tunog ng alarm"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Mga tunog ng notification"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Hindi Alam"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Available ang mga Wi-Fi network</item>
- <item quantity="other">Available ang mga Wi-Fi network</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">Available ang mga bukas na Wi-Fi network</item>
- <item quantity="other">Available ang mga bukas na Wi-Fi network</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Mag-sign in sa Wi-Fi network"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Mag-sign in sa network"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> sa Trabaho"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"Pangalawang <xliff:g id="LABEL">%1$s</xliff:g> sa Trabaho"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"Pangatlong <xliff:g id="LABEL">%1$s</xliff:g> sa Trabaho"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Upang i-unpin ang screen na ito, pindutin nang matagal ang Bumalik."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Upang i-unpin ang screen na ito, pindutin nang matagal ang Bumalik at Pangkalahatang-ideya."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Naka-pin ang app: Hindi pinapayagan ang pag-a-unpin sa device na ito."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Naka-pin ang screen"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Naka-unpin ang screen"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index ac184a4..dea294a 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Alarm sesleri"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Bildirim sesleri"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Bilinmiyor"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Kablosuz ağlar var</item>
- <item quantity="one">Kablosuz ağ var</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Kullanılabilir Kablosuz ağları aç</item>
- <item quantity="one">Kullanılabilir Kablosuz ağı aç</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Kablosuz ağda oturum açın"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Ağda oturum açın"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> (İş)"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"İş için 2. <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"İş için 3. <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Bu ekranın sabitlemesini kaldırmak için Geri\'ye dokunup basılı tutun."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Bu ekranın sabitlemesini kaldırmak için Geri\'ye ve Genel Bakış\'a dokunup basılı tutun."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Uygulama sabitlendi. Bu cihazda sabitlemenin kaldırılmasına izin verilmiyor."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Ekran sabitlendi"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Ekran sabitlemesi kaldırıldı"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index def0cbf..842d06f 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -1100,18 +1100,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Сигнали будильника"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Сигнали сповіщень"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Невідомо"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Мережі Wi-Fi доступні</item>
- <item quantity="few">Мережі Wi-Fi доступні</item>
- <item quantity="many">Мережі Wi-Fi доступні</item>
- <item quantity="other">Мережі Wi-Fi доступні</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">Відкриті мережі Wi-Fi доступні</item>
- <item quantity="few">Відкриті мережі Wi-Fi доступні</item>
- <item quantity="many">Відкриті мережі Wi-Fi доступні</item>
- <item quantity="other">Відкриті мережі Wi-Fi доступні</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Вхід у мережу Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Вхід у мережу"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1607,7 +1595,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Робоча <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2-а робота: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3-я робота: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Щоб відкріпити цей екран, натисніть і утримуйте кнопку \"Назад\"."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Щоб відкріпити цей екран, натисніть і втримуйте кнопки \"Назад\" та \"Огляд\"."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Додаток закріплено. Його не можна відкріпити на цьому пристрої."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Екран закріплено"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Екран відкріплено"</string>
diff --git a/core/res/res/values-ur-rPK-watch/strings.xml b/core/res/res/values-ur-watch/strings.xml
similarity index 100%
rename from core/res/res/values-ur-rPK-watch/strings.xml
rename to core/res/res/values-ur-watch/strings.xml
diff --git a/core/res/res/values-ur-rPK-watch/styles_material.xml b/core/res/res/values-ur-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-ur-rPK-watch/styles_material.xml
rename to core/res/res/values-ur-watch/styles_material.xml
diff --git a/core/res/res/values-ur-rPK/strings.xml b/core/res/res/values-ur/strings.xml
similarity index 99%
rename from core/res/res/values-ur-rPK/strings.xml
rename to core/res/res/values-ur/strings.xml
index 17b657d..bb7a69e 100644
--- a/core/res/res/values-ur-rPK/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"الارم کی آوازیں"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"اطلاعات کی آوازیں"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"نامعلوم"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wi-Fi نیٹ ورکس دستیاب ہیں</item>
- <item quantity="one">Wi-Fi نیٹ ورک دستیاب ہے</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">عوامی Wi-Fi نیٹ ورکس دستیاب ہیں</item>
- <item quantity="one">عوامی Wi-Fi نیٹ ورک دستیاب ہے</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Wi-Fi نیٹ ورک میں سائن ان کریں"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"نیٹ ورک میں سائن ان کریں"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"دفتر <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"دوسرا کام <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"تیسرا کام <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"اس اسکرین سے پن ہٹانے کیلئے، پیچھے کو تھپتھپائیں اور دبا کر رکھیں۔"</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"اس اسکرین سے پن ہٹانے کیلئے، ٹچ کریں، دبائیں اور مجموعی جائزہ۔"</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"ایپ کو پن کر دیا گیا ہے: اس آلہ پر پن ہٹانے کی اجازت نہیں ہے۔"</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"اسکرین کو پن کر دیا گیا"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"اسکرین کا پن ہٹا دیا گیا"</string>
diff --git a/core/res/res/values-uz-rUZ-watch/strings.xml b/core/res/res/values-uz-watch/strings.xml
similarity index 100%
rename from core/res/res/values-uz-rUZ-watch/strings.xml
rename to core/res/res/values-uz-watch/strings.xml
diff --git a/core/res/res/values-uz-rUZ-watch/styles_material.xml b/core/res/res/values-uz-watch/styles_material.xml
similarity index 100%
rename from core/res/res/values-uz-rUZ-watch/styles_material.xml
rename to core/res/res/values-uz-watch/styles_material.xml
diff --git a/core/res/res/values-uz-rUZ/strings.xml b/core/res/res/values-uz/strings.xml
similarity index 99%
rename from core/res/res/values-uz-rUZ/strings.xml
rename to core/res/res/values-uz/strings.xml
index bc17d6e..d8b8e7e 100644
--- a/core/res/res/values-uz-rUZ/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -703,7 +703,7 @@
<string name="lockscreen_transport_stop_description" msgid="5907083260651210034">"To‘xtatish"</string>
<string name="lockscreen_transport_rew_description" msgid="6944412838651990410">"Orqaga o‘tkazish"</string>
<string name="lockscreen_transport_ffw_description" msgid="42987149870928985">"Oldinga o‘tkazish"</string>
- <string name="emergency_calls_only" msgid="6733978304386365407">"Faqat favqulodda qo‘ng‘iroqlar"</string>
+ <string name="emergency_calls_only" msgid="6733978304386365407">"Faqat favqulodda chaqiruvlar"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Tarmoq qulflangan"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM karta PUK kod bilan qulflangan."</string>
<string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"Foydalanuvchi qo‘llanmasiga qarang yoki Abonentlarni qo‘llab-quvvatlash markaziga murojaat qiling."</string>
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Signal ovozlari"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Bildirishnoma ovozlari"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Noma’lum"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Wi-Fi tarmoqlari aniqlandi</item>
- <item quantity="one">Wi-Fi tarmog‘i aniqlandi</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Ochiq Wi-Fi tarmoqlari aniqlandi</item>
- <item quantity="one">Ochiq Wi-Fi tarmog‘i aniqlandi</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Wi-Fi tarmoqqa kirish"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Tarmoqqa kirish"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Ish <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2-ishxona <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3-ishxona <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Bu ekrandan chiqish uchun “Orqaga” tugmasini bosib turing."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Bu ekrandan chiqish uchun “Orqaga” va “Umumiy ma’lumot” tugmalarini bosib turing."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Ilova qadab qo‘yilgan. Uni ekrandan yechish ushbu qurilmada ta’qiqlangan."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Ekran qadab qo‘yildi"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Ekran bo‘shatildi"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 8448f38..9d204c2 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Âm thanh báo thức"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Âm thanh thông báo"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Không xác định"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">Các mạng Wi-Fi khả dụng</item>
- <item quantity="one">Mạng Wi-Fi khả dụng</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">Mở các mạng Wi-Fi khả dụng</item>
- <item quantity="one">Mở mạng Wi-Fi khả dụng</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Đăng nhập vào mạng Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Đăng nhập vào mạng"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> làm việc"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"Công việc thứ 2 <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"Công việc thứ 2 <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Để bỏ ghim màn hình này, nhấn và giữ Quay lại."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Để bỏ ghim màn hình này, chạm và giữ Quay lại và Tổng quan."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Ứng dụng được ghim: Không được phép bỏ ghim trên thiết bị này."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Đã ghim màn hình"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Đã bỏ ghim màn hình"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 4d80c82..6f51494 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -298,9 +298,9 @@
<string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"允许应用读取您的设备收到的小区广播消息。小区广播消息是在某些地区发送的、用于发布紧急情况警告的提醒信息。恶意应用可能会在您收到小区紧急广播时干扰您设备的性能或操作。"</string>
<string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"读取订阅的供稿"</string>
<string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"允许应用获取有关当前同步的 Feed 的详情。"</string>
- <string name="permlab_sendSms" msgid="7544599214260982981">"发送和查看短信"</string>
+ <string name="permlab_sendSms" msgid="7544599214260982981">"发送短信"</string>
<string name="permdesc_sendSms" msgid="7094729298204937667">"允许该应用发送短信。此权限可能会导致意外收费。恶意应用可能会未经您的确认而发送短信,由此产生相关费用。"</string>
- <string name="permlab_readSms" msgid="8745086572213270480">"读取您的讯息(短信或彩信)"</string>
+ <string name="permlab_readSms" msgid="8745086572213270480">"读取短信"</string>
<string name="permdesc_readSms" product="tablet" msgid="4741697454888074891">"此应用可读取您平板电脑上存储的所有短信。"</string>
<string name="permdesc_readSms" product="tv" msgid="5796670395641116592">"此应用可读取您电视上存储的所有短信。"</string>
<string name="permdesc_readSms" product="default" msgid="6826832415656437652">"此应用可读取您手机上存储的所有短信。"</string>
@@ -334,7 +334,7 @@
<string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"允许该应用发送持久广播消息,此类消息在广播结束后仍会保留。过度使用可能会导致平板电脑使用过多内存,从而降低其速度或稳定性。"</string>
<string name="permdesc_broadcastSticky" product="tv" msgid="6839285697565389467">"允许应用发送持久广播消息,此类消息在广播结束后仍会保留。过度使用可能会导致电视使用过多内存,从而降低其速度或稳定性。"</string>
<string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"允许该应用发送持久广播消息,此类消息在广播结束后仍会保留。过度使用可能会导致手机使用过多内存,从而降低其速度或稳定性。"</string>
- <string name="permlab_readContacts" msgid="8348481131899886131">"读取您的通讯录"</string>
+ <string name="permlab_readContacts" msgid="8348481131899886131">"读取联系人"</string>
<string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"允许该应用读取您平板电脑上存储的联系人的相关数据,包括您通过打电话、发送电子邮件或以其他方式与特定个人通信的频率。此权限可让应用保存您的联系人数据,而恶意应用可能会在您不知情的情况下分享联系人数据。"</string>
<string name="permdesc_readContacts" product="tv" msgid="1839238344654834087">"允许应用读取您的电视上存储的联系人相关数据,包括您与特定联系人通话、发送电子邮件或通过其他方式进行通信的频率。此权限可让应用保存您的联系人数据,而且恶意应用可能会在您不知情的情况下分享联系人数据。"</string>
<string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"允许该应用读取您手机上存储的联系人的相关数据,包括您通过打电话、发送电子邮件或以其他方式与特定个人通信的频率。此权限可让应用保存您的联系人数据,而恶意应用可能会在您不知情的情况下分享联系人数据。"</string>
@@ -344,7 +344,7 @@
<string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"允许该应用修改您手机上存储的联系人的相关数据,包括您通过打电话、发送电子邮件或以其他方式与特定联系人通信的频率。此权限可让应用删除联系人数据。"</string>
<string name="permlab_readCallLog" msgid="3478133184624102739">"读取通话记录"</string>
<string name="permdesc_readCallLog" msgid="3204122446463552146">"此应用可读取您的通话记录。"</string>
- <string name="permlab_writeCallLog" msgid="8552045664743499354">"写入通话记录"</string>
+ <string name="permlab_writeCallLog" msgid="8552045664743499354">"新建/修改/删除通话记录"</string>
<string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"允许该应用修改平板电脑的通话记录,包括有关来电和外拨电话的数据。恶意应用可能会借此清除或修改您的通话记录。"</string>
<string name="permdesc_writeCallLog" product="tv" msgid="4225034892248398019">"允许应用修改电视的通话记录,包括有关来电和外拨电话的数据。恶意应用可能会借此清除或修改您的通话记录。"</string>
<string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"允许该应用修改手机的通话记录,包括有关来电和外拨电话的数据。恶意应用可能会借此清除或修改您的通话记录。"</string>
@@ -376,7 +376,7 @@
<string name="permdesc_camera" msgid="5392231870049240670">"此应用可随时使用相机拍摄照片和录制视频。"</string>
<string name="permlab_vibrate" msgid="7696427026057705834">"控制振动"</string>
<string name="permdesc_vibrate" msgid="6284989245902300945">"允许应用控制振动器。"</string>
- <string name="permlab_callPhone" msgid="3925836347681847954">"直接拨打电话号码"</string>
+ <string name="permlab_callPhone" msgid="3925836347681847954">"拨打电话"</string>
<string name="permdesc_callPhone" msgid="3740797576113760827">"允许该应用在您未执行操作的情况下拨打电话号码。此权限可能会导致意外收费或呼叫。请注意,此权限不允许该应用拨打紧急电话号码。恶意应用可通过拨打电话产生相关费用,而无需您的确认。"</string>
<string name="permlab_accessImsCallService" msgid="3574943847181793918">"使用即时通讯通话服务"</string>
<string name="permdesc_accessImsCallService" msgid="8992884015198298775">"允许应用自行使用即时通讯服务拨打电话。"</string>
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"闹钟提示音"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"通知提示音"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"未知"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">有可用的 WLAN 网络</item>
- <item quantity="one">有可用的 WLAN 网络</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">有可用的开放 WLAN 网络</item>
- <item quantity="one">有可用的开放 WLAN 网络</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"登录到WLAN网络"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"登录到网络"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"工作<xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"第二个工作<xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"第三个工作<xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"要取消固定此屏幕,请触摸并按住“返回”按钮。"</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"要取消固定此屏幕,请触摸并按住“返回”和“概览”。"</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"应用处于固定状态:在此设备上不允许退出该模式。"</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"已固定屏幕"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"已取消固定屏幕"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index 410548e..a4723db 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"鬧鐘音效"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"通知音效"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"不明"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">有可用的 Wi-Fi 網絡</item>
- <item quantity="one">有可用的 Wi-Fi 網絡</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">有可用的公開 Wi-Fi 網絡</item>
- <item quantity="one">有可用的公開 Wi-Fi 網絡</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"登入 Wi-Fi 網絡"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"登入網絡"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"公司<xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"第二個工作<xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"第三個工作<xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"如要取消固定這個畫面,請按住 [返回]。"</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"如要取消固定此畫面,請按住 [返回] 和 [概覽]。"</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"應用程式已固定:不允許在此裝置上取消固定。"</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"螢幕已固定"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"已取消固定螢幕"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 51f6d7d..dd37549 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"鬧鐘音效"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"通知音效"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"不明"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="other">有多個可用的 Wi-Fi 網路</item>
- <item quantity="one">有一個可用的 Wi-Fi 網路</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="other">有多個可用的開放 Wi-Fi 網路</item>
- <item quantity="one">有多個可用的開放 Wi-Fi 網路</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"登入 Wi-Fi 網路"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"登入網路"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"公司<xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"第 2 項工作:<xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"第 3 項工作:<xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"如要取消固定這個畫面,請按住「返回」按鈕。"</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"如要取消固定這個畫面,請按住「返回」按鈕和「總覽」按鈕。"</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"應用程式已固定:無法在這部裝置取消固定。"</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"已固定螢幕"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"已取消固定螢幕"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index a26c765..9cb03b8 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -1060,14 +1060,6 @@
<string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Imisindo ye-alamu"</string>
<string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Imisindo yezaziso"</string>
<string name="ringtone_unknown" msgid="3914515995813061520">"Akwaziwa"</string>
- <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
- <item quantity="one">Amanethiwekhi we-Wi-Fi ayatholakala</item>
- <item quantity="other">Amanethiwekhi we-Wi-Fi ayatholakala</item>
- </plurals>
- <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
- <item quantity="one">Vula amanethiwekhi we-Wi-Fi atholakalayo</item>
- <item quantity="other">Vula amanethiwekhi we-Wi-Fi atholakalayo</item>
- </plurals>
<string name="wifi_available_sign_in" msgid="9157196203958866662">"Ngena ngemvume kunethiwekhi ye-Wi-Fi"</string>
<string name="network_available_sign_in" msgid="1848877297365446605">"Ngena ngemvume kunethiwekhi"</string>
<!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
@@ -1559,7 +1551,7 @@
<string name="managed_profile_label_badge" msgid="2355652472854327647">"Umsebenzi <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_2" msgid="5048136430082124036">"Umsebenzi wesibili <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="managed_profile_label_badge_3" msgid="2808305070321719040">"Umsebenzi wesithathu <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="lock_to_app_toast" msgid="1420543809500606964">"Ukuze ususe ukuphina lesi sikrini, thinta futhi ubambe okuthi Emuva."</string>
+ <string name="lock_to_app_toast" msgid="7693684144593484">"Ukuze ususe ukuphina lesi sikrini, thinta futhi ubambe okuthi Emuva nokuthi Buka konke."</string>
<string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Uhlelo lokusebenza luphiniwe: Ukususa ukuphina akuvunyelwe kule divayisi."</string>
<string name="lock_to_app_start" msgid="6643342070839862795">"Isikrini siphiniwe"</string>
<string name="lock_to_app_exit" msgid="8598219838213787430">"Isikrini sisuswe ukuphina"</string>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 37b3ffc..ae727e6 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2912,6 +2912,11 @@
will result when the reference is accessed.-->
<attr name="nextSectionForward" format="reference"/>
+ <!-- Whether this view is a default-focus view.
+ Only one view per keyboard navigation cluster can have this attribute set to true.
+ See {@link android.view.View#setFocusedByDefault(boolean)}. -->
+ <attr name="focusedByDefault" format="boolean" />
+
</declare-styleable>
<!-- Attributes that can be assigned to a tag for a particular View. -->
@@ -3373,6 +3378,8 @@
<flag name="flagRequestFilterKeyEvents" value="0x00000020" />
<!-- Has flag {@link android.accessibilityservice.AccessibilityServiceInfo#FLAG_RETRIEVE_INTERACTIVE_WINDOWS} -->
<flag name="flagRetrieveInteractiveWindows" value="0x00000040" />
+ <!-- Has flag {@link android.accessibilityservice.AccessibilityServiceInfo#FLAG_ENABLE_ACCESSIBILITY_VOLUME} -->
+ <flag name="flagEnableAccessibilityVolume" value="0x00000080" />
</attr>
<!-- Component name of an activity that allows the user to modify
the settings for this service. This setting cannot be changed at runtime. -->
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index c91f0a5..b961394 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -1338,6 +1338,7 @@
any accounts. The type should correspond to the account authenticator type, such as
"com.google". -->
<attr name="requiredAccountType" format="string"/>
+ <!-- @deprecated replaced by setting appCategory attribute to "game" -->
<attr name="isGame" />
<!-- Declare that this application may use cleartext traffic, such as HTTP rather than
HTTPS; WebSockets rather than WebSockets Secure; XMPP, IMAP, STMP without STARTTLS or
@@ -1353,6 +1354,29 @@
<attr name="directBootAware" />
<attr name="resizeableActivity" />
<attr name="networkSecurityConfig" />
+ <!-- Declare the category of this app. Categories are used to cluster multiple apps
+ together into meaningful groups, such as when summarizing battery, network, or
+ disk usage. Apps should only define this value when they fit well into one of
+ the specific categories. -->
+ <attr name="appCategory">
+ <!-- Apps which are primarily games. -->
+ <enum name="game" value="0" />
+ <!-- Apps which primarily work with audio or music, such as music players. -->
+ <enum name="audio" value="1" />
+ <!-- Apps which primarily work with video or movies, such as streaming video apps. -->
+ <enum name="video" value="2" />
+ <!-- Apps which primarily work with images or photos, such as camera or gallery apps. -->
+ <enum name="image" value="3" />
+ <!-- Apps which are primarily social apps, such as messaging, communication, or social network apps. -->
+ <enum name="social" value="4" />
+ <!-- Apps which are primarily news apps, such as newspapers, magazines, or sports apps. -->
+ <enum name="news" value="5" />
+ <!-- Apps which are primarily maps apps, such as navigation apps. -->
+ <enum name="maps" value="6" />
+ <!-- Apps which are primarily productivity apps, such as cloud storage or workplace apps. -->
+ <enum name="productivity" value="7" />
+ </attr>
+
</declare-styleable>
<!-- The <code>permission</code> tag declares a security permission that can be
used to control access from other packages to specific components or
diff --git a/core/res/res/values/bools.xml b/core/res/res/values/bools.xml
index 5c50e73..b49fe49 100644
--- a/core/res/res/values/bools.xml
+++ b/core/res/res/values/bools.xml
@@ -24,4 +24,10 @@
<bool name="show_ongoing_ime_switcher">true</bool>
<bool name="action_bar_expanded_action_views_exclusive">true</bool>
<bool name="target_honeycomb_needs_options_menu">true</bool>
+ <!-- Whether or not to use the drawable/lockscreen_notselected and
+ drawable/lockscreen_selected instead of the generic dots when displaying
+ the LockPatternView.
+ <p>The main purpose is for OEMs to customize the rendering of the
+ lockscreen, setting this to true should come with customized drawables. -->
+ <bool name="use_lock_pattern_drawable">false</bool>
</resources>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 5967c69..89581bb 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -1049,6 +1049,16 @@
Must be in the range specified by minimum and maximum. -->
<integer name="config_screenBrightnessSettingDefault">102</integer>
+ <!-- Default screen brightness for VR setting. -->
+ <integer name="config_screenBrightnessForVrSettingDefault">86</integer>
+
+ <!-- Minimum screen brightness setting allowed for VR. Device panels start increasing pulse
+ width as brightness decreases below this theshold. -->
+ <integer name="config_screenBrightnessForVrSettingMinimum">79</integer>
+
+ <!-- Maximum screen brightness setting allowed for VR. -->
+ <integer name="config_screenBrightnessForVrSettingMaximum">255</integer>
+
<!-- Screen brightness used to dim the screen while dozing in a very low power state.
May be less than the minimum allowed brightness setting
that can be set by the user. -->
@@ -1260,9 +1270,8 @@
<!-- A list of potential packages, in priority order, that may contain a
network recommendation provider. A network recommendation provider must:
* Be granted the SCORE_NETWORKS permission.
- * Include a Receiver for the android.net.scoring.SCORE_NETWORKS action guarded by the
- BROADCAST_NETWORK_PRIVILEGED permission.
- * Include a Service for the android.net.scoring.RECOMMEND_NETWORKS action.
+ * Include a Service for the android.net.scoring.RECOMMEND_NETWORKS action
+ protected by the BIND_NETWORK_RECOMMENDATION_SERVICE permission.
This may be empty if network scoring and recommending isn't supported.
-->
@@ -2697,4 +2706,7 @@
<!-- Flag indicates that whether non-system apps can be installed on internal storage. -->
<bool name="config_allow3rdPartyAppOnInternal">true</bool>
+
+ <!-- Component name of the default cell broadcast receiver -->
+ <string name="config_defaultCellBroadcastReceiverComponent" translatable="false">com.android.cellbroadcastreceiver/.PrivilegedCellBroadcastReceiver</string>
</resources>
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index e3b7f02..bd19521 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -64,6 +64,9 @@
when the user opens homescreen. -->
<dimen name="docked_stack_minimize_thickness">8dp</dimen>
+ <!-- The amount to leave on-screen when the PIP is minimized. -->
+ <dimen name="pip_minimized_visible_size">48dp</dimen>
+
<!-- Min width for a tablet device -->
<dimen name="min_xlarge_screen_width">800dp</dimen>
diff --git a/core/res/res/values/ids.xml b/core/res/res/values/ids.xml
index 5c165e6..5547706 100644
--- a/core/res/res/values/ids.xml
+++ b/core/res/res/values/ids.xml
@@ -129,4 +129,6 @@
<item type="id" name="remote_input_tag" />
<item type="id" name="cross_task_transition" />
+
+ <item type="id" name="accessibilityActionClickOnClickableSpan" />
</resources>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 60e441d..bbc2d14 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2781,6 +2781,8 @@
<public name="nextClusterForward" />
<public name="nextSectionForward" />
<public name="textColorError" />
+ <public name="focusedByDefault" />
+ <public name="appCategory" />
</public-group>
<public-group type="style" first-id="0x010302e0">
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 880944e..87a4732 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -2868,17 +2868,6 @@
<!-- If there is ever a ringtone set for some setting, but that ringtone can no longer be resolved, t his is shown instead. For example, if the ringtone was on a SD card and it had been removed, this woudl be shown for ringtones on that SD card. -->
<string name="ringtone_unknown">Unknown</string>
- <!-- A notification is shown when there are open wireless networks nearby. This is the notification's title. -->
- <plurals name="wifi_available">
- <item quantity="one">Wi-Fi network available</item>
- <item quantity="other">Wi-Fi networks available</item>
- </plurals>
- <!-- A notification is shown when there are open wireless networks nearby. This is the notification's message. -->
- <plurals name="wifi_available_detailed">
- <item quantity="one">Open Wi-Fi network available</item>
- <item quantity="other">Open Wi-Fi networks available</item>
- </plurals>
-
<!-- A notification is shown when a wifi captive portal network is detected. This is the notification's title. -->
<string name="wifi_available_sign_in">Sign in to Wi-Fi network</string>
@@ -4135,7 +4124,7 @@
<string name="date_picker_day_typeface">sans-serif-medium</string>
<!-- Notify use that they are in Lock-to-app -->
- <string name="lock_to_app_toast">To unpin this screen, touch & hold Back.</string>
+ <string name="lock_to_app_toast">To unpin this screen, touch & hold Back and Overview.</string>
<!-- Notify user that they are locked in lock-to-app mode -->
<string name="lock_to_app_toast_locked">App is pinned: Unpinning isn\'t allowed on this device.</string>
<!-- Starting lock-to-app indication. -->
@@ -4405,4 +4394,22 @@
<!-- Window title for a tooltip [CHAR LIMIT=NONE] -->
<string name="tooltip_popup_title">Tooltip</string>
+
+ <!-- Category title for apps which are primarily games. [CHAR LIMIT=32] -->
+ <string name="app_category_game">Games</string>
+ <!-- Category title for apps which primarily work with audio or music, such as music players. [CHAR LIMIT=32] -->
+ <string name="app_category_audio">Music & Audio</string>
+ <!-- Category title for apps which primarily work with video or movies, such as streaming video apps. [CHAR LIMIT=32] -->
+ <string name="app_category_video">Movies & Video</string>
+ <!-- Category title for apps which primarily work with images or photos, such as camera or gallery apps. [CHAR LIMIT=32] -->
+ <string name="app_category_image">Photos & Images</string>
+ <!-- Category title for apps which are primarily social apps, such as messaging, communication, or social network apps. [CHAR LIMIT=32] -->
+ <string name="app_category_social">Social & Communication</string>
+ <!-- Category title for apps which are primarily news apps, such as newspapers, magazines, or sports apps. [CHAR LIMIT=32] -->
+ <string name="app_category_news">News & Magazines</string>
+ <!-- Category title for apps which are primarily maps apps, such as navigation apps. [CHAR LIMIT=32] -->
+ <string name="app_category_maps">Maps & Navigation</string>
+ <!-- Category title for apps which are primarily productivity apps, such as cloud storage or workplace apps. [CHAR LIMIT=32] -->
+ <string name="app_category_productivity">Productivity</string>
+
</resources>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index ce7ab16..842b575 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -1249,7 +1249,7 @@
<item name="collapseContentDescription">@string/toolbar_collapse_description</item>
<item name="contentInsetStart">16dp</item>
<item name="contentInsetStartWithNavigation">@dimen/action_bar_content_inset_with_nav</item>
- <item name="touchscreenBlocksFocus">true</item>
+ <item name="keyboardNavigationCluster">true</item>
</style>
<style name="Widget.Toolbar.Button.Navigation" parent="Widget">
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index d02e156..d46bdcf 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -213,6 +213,7 @@
<java-symbol type="id" name="selection_start_handle" />
<java-symbol type="id" name="selection_end_handle" />
<java-symbol type="id" name="insertion_handle" />
+ <java-symbol type="id" name="accessibilityActionClickOnClickableSpan" />
<java-symbol type="attr" name="actionModeShareDrawable" />
<java-symbol type="attr" name="alertDialogCenterButtons" />
@@ -1542,6 +1543,7 @@
<java-symbol type="dimen" name="docked_stack_divider_thickness" />
<java-symbol type="dimen" name="docked_stack_divider_insets" />
<java-symbol type="dimen" name="docked_stack_minimize_thickness" />
+ <java-symbol type="dimen" name="pip_minimized_visible_size" />
<java-symbol type="integer" name="config_dockedStackDividerSnapMode" />
<java-symbol type="fraction" name="docked_stack_divider_fixed_ratio" />
<java-symbol type="fraction" name="thumbnail_fullscreen_scale" />
@@ -1802,6 +1804,9 @@
<java-symbol type="integer" name="config_screenBrightnessSettingMinimum" />
<java-symbol type="integer" name="config_screenBrightnessSettingMaximum" />
<java-symbol type="integer" name="config_screenBrightnessSettingDefault" />
+ <java-symbol type="integer" name="config_screenBrightnessForVrSettingDefault" />
+ <java-symbol type="integer" name="config_screenBrightnessForVrSettingMaximum" />
+ <java-symbol type="integer" name="config_screenBrightnessForVrSettingMinimum" />
<java-symbol type="integer" name="config_screenBrightnessDark" />
<java-symbol type="integer" name="config_screenBrightnessDim" />
<java-symbol type="integer" name="config_screenBrightnessDoze" />
@@ -1815,8 +1820,6 @@
<java-symbol type="layout" name="safe_mode" />
<java-symbol type="layout" name="simple_list_item_2_single_choice" />
<java-symbol type="layout" name="app_error_dialog" />
- <java-symbol type="plurals" name="wifi_available" />
- <java-symbol type="plurals" name="wifi_available_detailed" />
<java-symbol type="string" name="accessibility_binding_label" />
<java-symbol type="string" name="adb_active_notification_message" />
<java-symbol type="string" name="adb_active_notification_title" />
@@ -2774,4 +2777,22 @@
<!-- Whether allow 3rd party apps on internal storage. -->
<java-symbol type="bool" name="config_allow3rdPartyAppOnInternal" />
+
+ <java-symbol type="bool" name="use_lock_pattern_drawable" />
+ <java-symbol type="drawable" name="lockscreen_notselected" />
+ <java-symbol type="drawable" name="lockscreen_selected" />
+
+ <java-symbol type="string" name="config_defaultCellBroadcastReceiverComponent" />
+
+ <java-symbol type="string" name="app_category_game" />
+ <java-symbol type="string" name="app_category_audio" />
+ <java-symbol type="string" name="app_category_video" />
+ <java-symbol type="string" name="app_category_image" />
+ <java-symbol type="string" name="app_category_social" />
+ <java-symbol type="string" name="app_category_news" />
+ <java-symbol type="string" name="app_category_maps" />
+ <java-symbol type="string" name="app_category_productivity" />
+
+ <java-symbol type="raw" name="fallback_categories" />
+
</resources>
diff --git a/core/tests/coretests/Android.mk b/core/tests/coretests/Android.mk
index 4699fd5..a0a9e01 100644
--- a/core/tests/coretests/Android.mk
+++ b/core/tests/coretests/Android.mk
@@ -33,7 +33,9 @@
mockito-target-minus-junit4 \
espresso-core \
ub-uiautomator \
- platform-test-annotations
+ platform-test-annotations \
+ compatibility-device-util
+
LOCAL_JAVA_LIBRARIES := android.test.runner conscrypt telephony-common org.apache.http.legacy
LOCAL_PACKAGE_NAME := FrameworksCoreTests
diff --git a/core/tests/coretests/AndroidManifest.xml b/core/tests/coretests/AndroidManifest.xml
index cd41987..504541d 100644
--- a/core/tests/coretests/AndroidManifest.xml
+++ b/core/tests/coretests/AndroidManifest.xml
@@ -55,6 +55,8 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.INJECT_EVENTS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
+ <uses-permission android:name="android.permission.READ_DREAM_STATE" />
+ <uses-permission android:name="android.permission.WRITE_DREAM_STATE" />
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_SMS"/>
@@ -831,14 +833,14 @@
</intent-filter>
</activity>
- <activity android:name="android.widget.listview.ListManagedCursor" android:label="ListManagedCursor">
+ <activity android:name="android.widget.listview.ListManagedCursor" android:label="ListManagedCursor">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
</intent-filter>
</activity>
- <activity android:name="android.widget.listview.ListWithEmptyView" android:label="ListWithEmptyView">
+ <activity android:name="android.widget.listview.ListWithEmptyView" android:label="ListWithEmptyView">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
@@ -1107,6 +1109,13 @@
</intent-filter>
</activity>
+ <activity android:name="android.app.Activity" android:label="Empty Activity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
<!-- Activity-level metadata -->
<meta-data android:name="com.android.frameworks.coretests.isApp" android:value="true" />
<meta-data android:name="com.android.frameworks.coretests.string" android:value="foo" />
@@ -1324,6 +1333,27 @@
</meta-data>
</service>
+ <activity
+ android:name="android.print.mockservice.SettingsActivity"
+ android:permission="android.permission.START_PRINT_SERVICE_CONFIG_ACTIVITY"
+ android:exported="true">
+ </activity>
+
+ <activity
+ android:name="android.os.TestVrActivity"
+ android:enableVrMode="com.android.frameworks.coretests/android.os.TestVrActivity$TestVrListenerService">
+ </activity>
+
+ <service android:name="android.os.TestVrActivity$TestVrListenerService"
+ android:exported="true"
+ android:enabled="true"
+ android:label="Test Vr Listener Service"
+ android:permission="android.permission.BIND_VR_LISTENER_SERVICE">
+ <intent-filter>
+ <action android:name="android.service.vr.VrListenerService" />
+ </intent-filter>
+ </service>
+
</application>
<instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
diff --git a/core/tests/coretests/src/android/os/PowerManagerVrTest.java b/core/tests/coretests/src/android/os/PowerManagerVrTest.java
new file mode 100644
index 0000000..e01e5fa
--- /dev/null
+++ b/core/tests/coretests/src/android/os/PowerManagerVrTest.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.os;
+
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.os.PowerManager;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.provider.Settings;
+import android.service.dreams.IDreamManager;
+import android.service.dreams.DreamService;
+import android.support.test.filters.MediumTest;
+import android.support.test.filters.SmallTest;
+import android.test.ActivityInstrumentationTestCase2;
+
+/**
+ * Tests dream aspects of PowerManager.
+ */
+@MediumTest
+public class PowerManagerVrTest extends ActivityInstrumentationTestCase2<TestVrActivity> {
+ private PowerManager mPm;
+ private IDreamManager mDm;
+ private String mOldVrListener;
+
+ public PowerManagerVrTest() {
+ super(TestVrActivity.class);
+ }
+
+ /**
+ * Setup any common data for the upcoming tests.
+ */
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ Context context = getInstrumentation().getTargetContext();
+ mPm = (PowerManager) getInstrumentation().getTargetContext().getSystemService(
+ Context.POWER_SERVICE);
+ mDm = IDreamManager.Stub.asInterface(
+ ServiceManager.getService(DreamService.DREAM_SERVICE));
+
+ mOldVrListener = setTestVrListener(new ComponentName(
+ context, TestVrActivity.TestVrListenerService.class).flattenToString());
+ }
+
+ @Override
+ public void tearDown() throws Exception {
+ if (mDm != null) {
+ mDm.awaken(); // Don't leave the device in the dream state.
+ }
+
+ setTestVrListener(mOldVrListener);
+ }
+
+ /**
+ * Confirm that the setup is good.
+ *
+ * @throws Exception
+ */
+ @SmallTest
+ public void testPreconditions() throws Exception {
+ assertNotNull(mPm);
+ assertNotNull(mDm);
+ }
+
+ /**
+ * Confirm that the system prevents napping while in VR.
+ * Dreaming is controlled by PowerManager, but we use dreamManager to access those features
+ * in order to not require DEVICE_POWER permissions which other tests expect not to have.
+ *
+ * @throws Exception
+ */
+ @SmallTest
+ public void testNap() throws Exception {
+ // For dream to work, we need to wake up the system
+ wakeUpDevice();
+
+ mDm.dream();
+ waitForDreamState(true);
+ assertTrue(mDm.isDreaming());
+ mDm.awaken();
+
+ // awaken() is not immediate so we have to wait for dreaming to stop
+ // before continuing with the test.
+ waitForDreamState(false);
+
+ // set VR Mode to true by starting our VR Activity, then retest the dream.
+ TestVrActivity activity = getActivity();
+ assertTrue(activity.waitForActivityStart());
+
+ try {
+ mDm.dream();
+ waitForDreamState(true); // wait for dream to turn true with a timeout
+ assertFalse(mDm.isDreaming()); // ensure dream is still false after waiting.
+ mDm.awaken();
+ } finally {
+ activity.finish();
+ }
+ }
+
+ /**
+ * Waits synchronously for the system to be set to the specified dream state.
+ */
+ private void waitForDreamState(boolean isDreaming) throws Exception {
+ final int MAX_ATTEMPTS = 10;
+ final int WAIT_TIME_PER_ATTEMPT_MILLIS = 100;
+ for (int i = 0; i < MAX_ATTEMPTS; i++) {
+ if (mDm.isDreaming() == isDreaming) {
+ break;
+ }
+ Thread.sleep(WAIT_TIME_PER_ATTEMPT_MILLIS);
+ }
+ }
+
+ private void wakeUpDevice() {
+ PowerManager.WakeLock wl = mPm.newWakeLock(
+ PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP
+ | PowerManager.ON_AFTER_RELEASE, "FULL_WAKE_LOCK");
+ wl.acquire();
+ wl.release();
+ }
+
+ /**
+ * Sets a new value for the enabled VrListenerService and returns the previous value.
+ */
+ private String setTestVrListener(String newValue) {
+ final String ENABLED_VR_LISTENERS = "enabled_vr_listeners";
+ Context context = getInstrumentation().getTargetContext();
+ ContentResolver cr = context.getContentResolver();
+ String oldVrListeners = Settings.Secure.getString(cr, ENABLED_VR_LISTENERS);
+ Settings.Secure.putString(cr, ENABLED_VR_LISTENERS, newValue);
+ return oldVrListeners;
+ }
+}
diff --git a/core/tests/coretests/src/android/os/TestVrActivity.java b/core/tests/coretests/src/android/os/TestVrActivity.java
new file mode 100644
index 0000000..33ff164
--- /dev/null
+++ b/core/tests/coretests/src/android/os/TestVrActivity.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package android.os;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.service.vr.VrListenerService;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * An activity for enabling/disabling VrMode.
+ */
+public class TestVrActivity extends Activity {
+ private CountDownLatch mLatch;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mLatch = new CountDownLatch(1);
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ mLatch.countDown();
+ }
+
+ public static class TestVrListenerService extends VrListenerService {
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ }
+ }
+
+ public boolean waitForActivityStart() {
+ boolean result = false;
+ try {
+ result = mLatch.await(2L, TimeUnit.SECONDS);
+ } catch (InterruptedException e) {
+ }
+ return result;
+ }
+}
diff --git a/core/tests/coretests/src/android/view/RenderNodeAnimatorTest.java b/core/tests/coretests/src/android/view/RenderNodeAnimatorTest.java
new file mode 100644
index 0000000..b52d98c
--- /dev/null
+++ b/core/tests/coretests/src/android/view/RenderNodeAnimatorTest.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.view;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import android.app.Activity;
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.annotation.UiThreadTest;
+import android.support.test.filters.MediumTest;
+import android.support.test.rule.ActivityTestRule;
+
+import org.junit.Rule;
+import org.junit.Test;
+
+@MediumTest
+public class RenderNodeAnimatorTest {
+ @Rule
+ public ActivityTestRule<Activity> mActivityRule = new ActivityTestRule<>(Activity.class);
+
+ private Context getContext() {
+ return InstrumentationRegistry.getTargetContext();
+ }
+
+ private Activity getActivity() {
+ return mActivityRule.getActivity();
+ }
+
+ @UiThreadTest
+ @Test
+ public void testAlphaTransformationInfo() throws Throwable {
+ View view = new View(getContext());
+
+ // attach the view, since otherwise the RenderNodeAnimator won't accept view as target
+ getActivity().setContentView(view);
+
+ RenderNodeAnimator anim = new RenderNodeAnimator(RenderNodeAnimator.ALPHA, 0.5f);
+ anim.setTarget(view);
+ assertNull(view.mTransformationInfo);
+ anim.start(); // should initialize mTransformationInfo
+ assertNotNull(view.mTransformationInfo);
+ }
+}
diff --git a/core/tests/coretests/src/android/view/ViewInvalidateTest.java b/core/tests/coretests/src/android/view/ViewInvalidateTest.java
new file mode 100644
index 0000000..4db70ec
--- /dev/null
+++ b/core/tests/coretests/src/android/view/ViewInvalidateTest.java
@@ -0,0 +1,265 @@
+/*
+ * Copyright (C) 2016 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.view;
+
+import static junit.framework.Assert.assertFalse;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Rect;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.annotation.UiThreadTest;
+import android.support.test.filters.LargeTest;
+import android.support.test.rule.ActivityTestRule;
+import android.support.test.runner.AndroidJUnit4;
+import android.widget.FrameLayout;
+
+import com.android.compatibility.common.util.WidgetTestUtils;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Test of invalidates, drawing, and the flags that support them
+ */
+@LargeTest
+@RunWith(AndroidJUnit4.class)
+public class ViewInvalidateTest {
+ @Rule
+ public ActivityTestRule<Activity> mActivityRule = new ActivityTestRule<>(Activity.class);
+
+ private static final int INVAL_TEST_FLAG_MASK = View.PFLAG_DIRTY
+ | View.PFLAG_DIRTY_OPAQUE
+ | View.PFLAG_DRAWN
+ | View.PFLAG_DRAWING_CACHE_VALID
+ | View.PFLAG_INVALIDATED
+ | View.PFLAG_DRAW_ANIMATION;
+
+ @Before
+ public void setup() throws Throwable {
+ // separate runnable to initialize, so ref is safe to pass to runOnMainAndDrawSync
+ mActivityRule.runOnUiThread(() -> {
+ mParent = new FrameLayout(getContext());
+ mChild = new View(getContext());
+ });
+
+ // attached view is drawn once
+ WidgetTestUtils.runOnMainAndDrawSync(mActivityRule, mParent, () -> {
+ mParent.addView(mChild);
+ getActivity().setContentView(mParent);
+
+ // 'invalidated', but not yet drawn
+ validateInvalFlags(mChild, View.PFLAG_INVALIDATED);
+ });
+ }
+
+ @After
+ public void teardown() {
+ // ensure we don't share views between tests
+ mParent = null;
+ mChild = null;
+ }
+
+ Context getContext() {
+ return InstrumentationRegistry.getTargetContext();
+ }
+
+ Activity getActivity() {
+ return mActivityRule.getActivity();
+ }
+
+ private ViewGroup mParent;
+ private View mChild;
+
+ private static void validateInvalFlags(View view, int... expectedFlagArray) {
+ int expectedFlags = 0;
+ for (int expectedFlag : expectedFlagArray) {
+ expectedFlags |= expectedFlag;
+ }
+
+ final int observedFlags = view.mPrivateFlags & INVAL_TEST_FLAG_MASK;
+ assertEquals(String.format("expect %x, observed %x", expectedFlags, observedFlags),
+ expectedFlags, observedFlags);
+ }
+
+ private static ViewRootImpl getViewRoot(View view) {
+ ViewParent parent = view.getParent();
+ while (parent != null) {
+ if (parent instanceof ViewRootImpl) {
+ return (ViewRootImpl) parent;
+ }
+ parent = parent.getParent();
+ }
+ return null;
+ }
+
+ @UiThreadTest
+ @Test
+ public void testInvalidate_behavior() throws Throwable {
+ validateInvalFlags(mChild,
+ View.PFLAG_DRAWING_CACHE_VALID,
+ View.PFLAG_DRAWN);
+ validateInvalFlags(mParent,
+ View.PFLAG_DRAWING_CACHE_VALID,
+ View.PFLAG_DRAWN);
+ assertFalse(getViewRoot(mParent).mTraversalScheduled);
+
+ mChild.invalidate();
+
+ // no longer drawn, is now invalidated
+ validateInvalFlags(mChild,
+ View.PFLAG_DIRTY,
+ View.PFLAG_INVALIDATED);
+
+ // parent drawing cache no longer valid, marked dirty
+ validateInvalFlags(mParent,
+ View.PFLAG_DRAWN,
+ View.PFLAG_DIRTY);
+ assertTrue(getViewRoot(mParent).mTraversalScheduled);
+ }
+
+ @UiThreadTest
+ @Test
+ public void testInvalidate_false() {
+ // Invalidate makes it invalid
+ validateInvalFlags(mChild,
+ View.PFLAG_DRAWING_CACHE_VALID,
+ View.PFLAG_DRAWN);
+
+ mChild.invalidate(/*don't invalidate cache*/ false);
+
+ // drawn is cleared, dirty set, nothing else changed
+ validateInvalFlags(mChild,
+ View.PFLAG_DRAWING_CACHE_VALID,
+ View.PFLAG_DIRTY);
+ }
+
+ @Test
+ public void testInvalidate_simple() throws Throwable {
+ // simple invalidate, which marks the view invalid
+ WidgetTestUtils.runOnMainAndDrawSync(mActivityRule, mParent, () -> {
+ validateInvalFlags(mChild,
+ View.PFLAG_DRAWING_CACHE_VALID,
+ View.PFLAG_DRAWN);
+
+ mChild.invalidate();
+
+ validateInvalFlags(mChild,
+ View.PFLAG_DIRTY,
+ View.PFLAG_INVALIDATED);
+ });
+
+ // after draw pass, view has drawn, no longer invalid
+ mActivityRule.runOnUiThread(() -> {
+ validateInvalFlags(mChild,
+ View.PFLAG_DRAWING_CACHE_VALID,
+ View.PFLAG_DRAWN);
+ });
+ }
+
+ @UiThreadTest
+ @Test
+ public void testInvalidate_manualUpdateDisplayList() {
+ // Invalidate makes it invalid
+ validateInvalFlags(mChild,
+ View.PFLAG_DRAWING_CACHE_VALID,
+ View.PFLAG_DRAWN);
+
+ mChild.invalidate();
+ validateInvalFlags(mChild,
+ View.PFLAG_DIRTY,
+ View.PFLAG_INVALIDATED);
+
+ // updateDisplayListIfDirty makes it valid again, but invalidate still set,
+ // since it's cleared by View#draw(canvas, parent, drawtime)
+ mChild.updateDisplayListIfDirty();
+ validateInvalFlags(mChild,
+ View.PFLAG_DRAWING_CACHE_VALID,
+ View.PFLAG_DRAWN,
+ View.PFLAG_INVALIDATED);
+ }
+
+ @UiThreadTest
+ @Test
+ public void testInvalidateChild_simple() {
+ validateInvalFlags(mParent,
+ View.PFLAG_DRAWING_CACHE_VALID,
+ View.PFLAG_DRAWN);
+ assertFalse(getViewRoot(mParent).mTraversalScheduled);
+
+ mParent.invalidateChild(mChild, new Rect(0, 0, 1, 1));
+
+ validateInvalFlags(mParent,
+ View.PFLAG_DIRTY,
+ View.PFLAG_DRAWN);
+ assertTrue(getViewRoot(mParent).mTraversalScheduled);
+ }
+
+ @Test
+ public void testInvalidateChild_childHardwareLayer() throws Throwable {
+ WidgetTestUtils.runOnMainAndDrawSync(mActivityRule, mParent, () -> {
+ // do in runnable, so tree won't be dirty
+ mChild.setLayerType(View.LAYER_TYPE_HARDWARE, null);
+ });
+
+ mActivityRule.runOnUiThread(() -> {
+ validateInvalFlags(mParent,
+ View.PFLAG_DRAWING_CACHE_VALID,
+ View.PFLAG_DRAWN);
+
+ mParent.invalidateChild(mChild, new Rect(0, 0, 1, 1));
+
+ validateInvalFlags(mParent,
+ View.PFLAG_DIRTY,
+ View.PFLAG_DRAWN,
+ View.PFLAG_INVALIDATED);
+ });
+ }
+
+ @UiThreadTest
+ @Test
+ public void testInvalidateChild_legacyAnimation() throws Throwable {
+ mChild.mPrivateFlags |= View.PFLAG_DRAW_ANIMATION;
+
+ validateInvalFlags(mChild,
+ View.PFLAG_DRAW_ANIMATION,
+ View.PFLAG_DRAWING_CACHE_VALID,
+ View.PFLAG_DRAWN);
+ validateInvalFlags(mParent,
+ View.PFLAG_DRAWING_CACHE_VALID,
+ View.PFLAG_DRAWN);
+ assertFalse(getViewRoot(mParent).mIsAnimating);
+
+ mParent.invalidateChild(mChild, new Rect(0, 0, 1, 1));
+
+ validateInvalFlags(mChild,
+ View.PFLAG_DRAW_ANIMATION,
+ View.PFLAG_DRAWING_CACHE_VALID,
+ View.PFLAG_DRAWN);
+ validateInvalFlags(mParent,
+ View.PFLAG_DIRTY,
+ View.PFLAG_DRAW_ANIMATION, // carried up to parent
+ View.PFLAG_DRAWN);
+ assertTrue(getViewRoot(mParent).mIsAnimating);
+ }
+}
diff --git a/core/tests/coretests/src/android/widget/AppWidgetHostViewTest.java b/core/tests/coretests/src/android/widget/AppWidgetHostViewTest.java
new file mode 100644
index 0000000..1e55fb1
--- /dev/null
+++ b/core/tests/coretests/src/android/widget/AppWidgetHostViewTest.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package android.widget;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import android.appwidget.AppWidgetHostView;
+import android.appwidget.AppWidgetManager;
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.view.View;
+import android.view.ViewGroup.OnHierarchyChangeListener;
+
+import com.android.frameworks.coretests.R;
+
+import java.util.ArrayList;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Future;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+
+/**
+ * Tests for AppWidgetHostView
+ */
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class AppWidgetHostViewTest {
+
+ @Rule
+ public final ExpectedException exception = ExpectedException.none();
+
+ private Context mContext;
+ private String mPackage;
+ private AppWidgetHostView mHostView;
+
+ private ViewAddListener mViewAddListener;
+ private RemoteViews mViews;
+
+ @Before
+ public void setup() {
+ mContext = InstrumentationRegistry.getContext();
+ mPackage = mContext.getPackageName();
+ mHostView = new AppWidgetHostView(mContext);
+ mHostView.setAppWidget(0, AppWidgetManager.getInstance(
+ mContext).getInstalledProviders().get(0));
+
+ mViewAddListener = new ViewAddListener();
+ mHostView.setOnHierarchyChangeListener(mViewAddListener);
+
+ mViews = new RemoteViews(mPackage, R.layout.remote_views_test);
+ }
+
+ @Test
+ public void syncInflation() {
+ mHostView.updateAppWidget(mViews);
+ assertNotNull(mHostView.findViewById(R.id.image));
+ }
+
+ @Test
+ public void asyncInflation() throws Exception {
+ RunnableList executor = new RunnableList();
+ mHostView.setAsyncExecutor(executor);
+
+ mHostView.updateAppWidget(mViews);
+ assertNull(mHostView.findViewById(R.id.image));
+
+ // Task queued.
+ assertEquals(1, executor.size());
+
+ // Execute the pending task
+ executor.get(0).run();
+ mViewAddListener.addLatch.await();
+ assertNotNull(mHostView.findViewById(R.id.image));
+ }
+
+ @Test
+ public void asyncInflation_cancelled() throws Exception {
+ RunnableList executor = new RunnableList();
+ mHostView.setAsyncExecutor(executor);
+
+ mHostView.updateAppWidget(mViews.clone());
+ mHostView.updateAppWidget(mViews.clone());
+ assertNull(mHostView.findViewById(R.id.image));
+
+ // Tasks queued.
+ assertEquals(2, executor.size());
+ // First task cancelled
+ assertTrue(((Future) executor.get(0)).isCancelled());
+
+ // Execute the pending task
+ executor.get(0).run();
+ executor.get(1).run();
+ mViewAddListener.addLatch.await();
+ assertNotNull(mHostView.findViewById(R.id.image));
+ }
+
+ private static class RunnableList extends ArrayList<Runnable> implements Executor {
+
+ @Override
+ public void execute(Runnable runnable) {
+ add(runnable);
+ }
+ }
+
+ private class ViewAddListener implements OnHierarchyChangeListener {
+
+ public final CountDownLatch addLatch = new CountDownLatch(1);
+
+
+ @Override
+ public void onChildViewAdded(View parent, View child) {
+ addLatch.countDown();
+ }
+
+ @Override
+ public void onChildViewRemoved(View parent, View child) {
+ }
+ }
+}
diff --git a/core/tests/coretests/src/com/android/internal/logging/LogBuilderTest.java b/core/tests/coretests/src/com/android/internal/logging/LogBuilderTest.java
new file mode 100644
index 0000000..e3f754c
--- /dev/null
+++ b/core/tests/coretests/src/com/android/internal/logging/LogBuilderTest.java
@@ -0,0 +1,43 @@
+package com.android.internal.logging;
+
+import junit.framework.TestCase;
+
+public class LogBuilderTest extends TestCase {
+
+ public void testSerialize() {
+ LogBuilder builder = new LogBuilder(0);
+ builder.addTaggedData(1, "one");
+ builder.addTaggedData(2, "two");
+ Object[] out = builder.serialize();
+ assertEquals(1, out[0]);
+ assertEquals("one", out[1]);
+ assertEquals(2, out[2]);
+ assertEquals("two", out[3]);
+ }
+
+ public void testInvalidInputThrows() {
+ LogBuilder builder = new LogBuilder(0);
+ boolean threw = false;
+ try {
+ builder.addTaggedData(0, new Object());
+ } catch (IllegalArgumentException e) {
+ threw = true;
+ }
+ assertTrue(threw);
+ assertEquals(0, builder.serialize().length);
+ }
+
+ public void testValidInputTypes() {
+ LogBuilder builder = new LogBuilder(0);
+ builder.addTaggedData(1, "onetwothree");
+ builder.addTaggedData(2, 123);
+ builder.addTaggedData(3, 123L);
+ builder.addTaggedData(4, 123.0F);
+ Object[] out = builder.serialize();
+ assertEquals("onetwothree", out[1]);
+ assertEquals(123, out[3]);
+ assertEquals(123L, out[5]);
+ assertEquals(123.0F, out[7]);
+ }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyAndException/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyAndException/Android.mk
index 9b2b9f1..836ede6 100644
--- a/core/tests/hosttests/test-apps/MultiDexLegacyAndException/Android.mk
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyAndException/Android.mk
@@ -23,7 +23,7 @@
LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_SDK_VERSION := current
+LOCAL_SDK_VERSION := 8
LOCAL_PACKAGE_NAME := MultiDexLegacyAndException
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.mk
index 874263f..2915914 100644
--- a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.mk
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.mk
@@ -23,7 +23,7 @@
LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_SDK_VERSION := current
+LOCAL_SDK_VERSION := 8
LOCAL_PACKAGE_NAME := MultiDexLegacyTestApp
@@ -45,7 +45,7 @@
LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_SDK_VERSION := current
+LOCAL_SDK_VERSION := 8
LOCAL_PACKAGE_NAME := MultiDexLegacyTestApp2
diff --git a/data/etc/privapp-permissions-platform.xml b/data/etc/privapp-permissions-platform.xml
index 3fc7914..05db9b0 100644
--- a/data/etc/privapp-permissions-platform.xml
+++ b/data/etc/privapp-permissions-platform.xml
@@ -104,6 +104,12 @@
<permission name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
</privapp-permissions>
+ <privapp-permissions package="com.android.networkrecommendation">
+ <permission name="android.permission.SCORE_NETWORKS"/>
+ <permission name="android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME"/>
+ <permission name="android.permission.WRITE_SECURE_SETTINGS"/>
+ </privapp-permissions>
+
<privapp-permissions package="com.android.packageinstaller">
<permission name="android.permission.CLEAR_APP_CACHE"/>
<permission name="android.permission.DELETE_PACKAGES"/>
@@ -321,4 +327,4 @@
<permission name="android.permission.CONTROL_VPN"/>
</privapp-permissions>
-</permissions>
\ No newline at end of file
+</permissions>
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index a259937..ba7f05d 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -655,6 +655,17 @@
}
/**
+ * Create hardware bitmap backed GraphicBuffer.
+ *
+ * @return Bitmap or null if this GraphicBuffer has unsupported PixelFormat.
+ * currently PIXEL_FORMAT_RGBA_8888 is the only supported format
+ * @hide
+ */
+ public static Bitmap createHardwareBitmap(GraphicBuffer graphicBuffer) {
+ return nativeCreateHardwareBitmap(graphicBuffer);
+ }
+
+ /**
* Creates a new bitmap, scaled from an existing bitmap, when possible. If the
* specified width and height are the same as the current width and height of
* the source bitmap, the source bitmap is returned and no new bitmap is
@@ -1735,6 +1746,15 @@
nativePrepareToDraw(mNativePtr);
}
+ /**
+ *
+ * @return {@link GraphicBuffer} which is internally used by hardware bitmap
+ * @hide
+ */
+ public GraphicBuffer createGraphicBufferHandle() {
+ return nativeCreateGraphicBufferHandle(mNativePtr);
+ }
+
//////////// native methods
private static native Bitmap nativeCreate(int[] colors, int offset,
@@ -1794,4 +1814,6 @@
private static native void nativePrepareToDraw(long nativeBitmap);
private static native int nativeGetAllocationByteCount(long nativeBitmap);
private static native Bitmap nativeCopyPreserveInternalConfig(long nativeBitmap);
+ private static native Bitmap nativeCreateHardwareBitmap(GraphicBuffer buffer);
+ private static native GraphicBuffer nativeCreateGraphicBufferHandle(long nativeBitmap);
}
diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java
index b093458..cc5cc7b 100644
--- a/graphics/java/android/graphics/Canvas.java
+++ b/graphics/java/android/graphics/Canvas.java
@@ -801,12 +801,13 @@
* @param op How the clip is modified
* @return true if the resulting is non-empty
*
+ * @removed
* @deprecated Unlike all other clip calls this API does not respect the
* current matrix. Use {@link #clipRect(Rect)} as an alternative.
*/
@Deprecated
public boolean clipRegion(@NonNull Region region, @NonNull Region.Op op) {
- return nClipRegion(mNativeCanvasWrapper, region.ni(), op.nativeInt);
+ return false;
}
/**
@@ -819,12 +820,13 @@
* @param region The region to operate on the current clip, based on op
* @return true if the resulting is non-empty
*
+ * @removed
* @deprecated Unlike all other clip calls this API does not respect the
* current matrix. Use {@link #clipRect(Rect)} as an alternative.
*/
@Deprecated
public boolean clipRegion(@NonNull Region region) {
- return clipRegion(region, Region.Op.INTERSECT);
+ return false;
}
public @Nullable DrawFilter getDrawFilter() {
@@ -1115,10 +1117,6 @@
long nativePath,
int regionOp);
@FastNative
- private static native boolean nClipRegion(long nativeCanvas,
- long nativeRegion,
- int regionOp);
- @FastNative
private static native void nSetDrawFilter(long nativeCanvas,
long nativeFilter);
@FastNative
diff --git a/graphics/java/android/graphics/FontFamily.java b/graphics/java/android/graphics/FontFamily.java
index e48bf79..2733c43f 100644
--- a/graphics/java/android/graphics/FontFamily.java
+++ b/graphics/java/android/graphics/FontFamily.java
@@ -18,6 +18,7 @@
import android.content.res.AssetManager;
import android.util.Log;
+import dalvik.annotation.optimization.CriticalNative;
import java.io.FileInputStream;
import java.io.IOException;
@@ -39,11 +40,11 @@
*/
public long mNativePtr;
+ // Points native font family builder. Must be zero after freezing this family.
+ private long mBuilderPtr;
+
public FontFamily() {
- mNativePtr = nCreateFamily(null, 0);
- if (mNativePtr == 0) {
- throw new IllegalStateException("error creating native FontFamily");
- }
+ mBuilderPtr = nInitBuilder(null, 0);
}
public FontFamily(String lang, String variant) {
@@ -53,10 +54,15 @@
} else if ("elegant".equals(variant)) {
varEnum = 2;
}
- mNativePtr = nCreateFamily(lang, varEnum);
- if (mNativePtr == 0) {
- throw new IllegalStateException("error creating native FontFamily");
+ mBuilderPtr = nInitBuilder(lang, varEnum);
+ }
+
+ public void freeze() {
+ if (mBuilderPtr == 0) {
+ throw new IllegalStateException("This FontFamily is already frozen");
}
+ mNativePtr = nCreateFamily(mBuilderPtr);
+ mBuilderPtr = 0;
}
@Override
@@ -69,11 +75,14 @@
}
public boolean addFont(String path, int ttcIndex) {
+ if (mBuilderPtr == 0) {
+ throw new IllegalStateException("Unable to call addFont after freezing.");
+ }
try (FileInputStream file = new FileInputStream(path)) {
FileChannel fileChannel = file.getChannel();
long fontSize = fileChannel.size();
ByteBuffer fontBuffer = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, fontSize);
- return nAddFont(mNativePtr, fontBuffer, ttcIndex);
+ return nAddFont(mBuilderPtr, fontBuffer, ttcIndex);
} catch (IOException e) {
Log.e(TAG, "Error mapping font file " + path);
return false;
@@ -82,19 +91,29 @@
public boolean addFontWeightStyle(ByteBuffer font, int ttcIndex, List<FontListParser.Axis> axes,
int weight, boolean style) {
- return nAddFontWeightStyle(mNativePtr, font, ttcIndex, axes, weight, style);
+ if (mBuilderPtr == 0) {
+ throw new IllegalStateException("Unable to call addFontWeightStyle after freezing.");
+ }
+ return nAddFontWeightStyle(mBuilderPtr, font, ttcIndex, axes, weight, style);
}
public boolean addFontFromAsset(AssetManager mgr, String path) {
- return nAddFontFromAsset(mNativePtr, mgr, path);
+ if (mBuilderPtr == 0) {
+ throw new IllegalStateException("Unable to call addFontFromAsset after freezing.");
+ }
+ return nAddFontFromAsset(mBuilderPtr, mgr, path);
}
- private static native long nCreateFamily(String lang, int variant);
+ private static native long nInitBuilder(String lang, int variant);
+
+ @CriticalNative
+ private static native long nCreateFamily(long mBuilderPtr);
+
+ @CriticalNative
private static native void nUnrefFamily(long nativePtr);
- private static native boolean nAddFont(long nativeFamily, ByteBuffer font, int ttcIndex);
- private static native boolean nAddFontWeightStyle(long nativeFamily, ByteBuffer font,
+ private static native boolean nAddFont(long builderPtr, ByteBuffer font, int ttcIndex);
+ private static native boolean nAddFontWeightStyle(long builderPtr, ByteBuffer font,
int ttcIndex, List<FontListParser.Axis> listOfAxis,
int weight, boolean isItalic);
- private static native boolean nAddFontFromAsset(long nativeFamily, AssetManager mgr,
- String path);
+ private static native boolean nAddFontFromAsset(long builderPtr, AssetManager mgr, String path);
}
diff --git a/graphics/java/android/graphics/FontListParser.java b/graphics/java/android/graphics/FontListParser.java
index 9490436..5b53296 100644
--- a/graphics/java/android/graphics/FontListParser.java
+++ b/graphics/java/android/graphics/FontListParser.java
@@ -21,6 +21,7 @@
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
+import android.annotation.Nullable;
import com.android.internal.annotations.VisibleForTesting;
import java.io.IOException;
@@ -104,9 +105,12 @@
// Note that a well-formed variation contains a four-character tag and a float as styleValue,
// with spacers in between. The tag is enclosd either by double quotes or single quotes.
@VisibleForTesting
- public static Axis[] parseFontVariationSettings(String settings) {
- String[] settingList = settings.split(",");
+ public static ArrayList<Axis> parseFontVariationSettings(@Nullable String settings) {
ArrayList<Axis> axisList = new ArrayList<>();
+ if (settings == null) {
+ return axisList;
+ }
+ String[] settingList = settings.split(",");
settingLoop:
for (String setting : settingList) {
int pos = 0;
@@ -150,7 +154,7 @@
tagString.charAt(3));
axisList.add(new Axis(tag, styleValue));
}
- return axisList.toArray(new Axis[axisList.size()]);
+ return axisList;
}
@VisibleForTesting
diff --git a/core/java/android/view/GraphicBuffer.aidl b/graphics/java/android/graphics/GraphicBuffer.aidl
similarity index 95%
rename from core/java/android/view/GraphicBuffer.aidl
rename to graphics/java/android/graphics/GraphicBuffer.aidl
index 6dc6bed..134699a 100644
--- a/core/java/android/view/GraphicBuffer.aidl
+++ b/graphics/java/android/graphics/GraphicBuffer.aidl
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-package android.view;
+package android.graphics;
parcelable GraphicBuffer;
diff --git a/core/java/android/view/GraphicBuffer.java b/graphics/java/android/graphics/GraphicBuffer.java
similarity index 93%
rename from core/java/android/view/GraphicBuffer.java
rename to graphics/java/android/graphics/GraphicBuffer.java
index 64611d0..3be9216 100644
--- a/core/java/android/view/GraphicBuffer.java
+++ b/graphics/java/android/graphics/GraphicBuffer.java
@@ -14,12 +14,8 @@
* limitations under the License.
*/
-package android.view;
+package android.graphics;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.PixelFormat;
-import android.graphics.Rect;
import android.os.Parcel;
import android.os.Parcelable;
@@ -265,16 +261,6 @@
nWriteGraphicBufferToParcel(mNativeObject, dest);
}
- /**
- * Create hardware bitmap backed by this GraphicBuffer.
- *
- * @return Bitmap or null if this GraphicBuffer has unsupported PixelFormat.
- * currently PIXEL_FORMAT_RGBA_8888 is the only supported format
- */
- public Bitmap createHardwareBitmap() {
- return nCreateHardwareBitmap(mNativeObject);
- }
-
public static final Parcelable.Creator<GraphicBuffer> CREATOR =
new Parcelable.Creator<GraphicBuffer>() {
public GraphicBuffer createFromParcel(Parcel in) {
@@ -300,5 +286,4 @@
private static native long nReadGraphicBufferFromParcel(Parcel in);
private static native boolean nLockCanvas(long nativeObject, Canvas canvas, Rect dirty);
private static native boolean nUnlockCanvasAndPost(long nativeObject, Canvas canvas);
- private static native Bitmap nCreateHardwareBitmap(long nativeObject);
}
diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java
index 7815ae1..4ee0c34 100644
--- a/graphics/java/android/graphics/Paint.java
+++ b/graphics/java/android/graphics/Paint.java
@@ -71,6 +71,7 @@
private LocaleList mLocales;
private String mFontFeatureSettings;
+ private String mFontVariationSettings;
private static final Object sCacheLock = new Object();
@@ -1494,6 +1495,37 @@
}
/**
+ * Returns the font variation settings.
+ *
+ * @return the paint's currently set font variation settings. Default is null.
+ *
+ * @see #setFontVariationSettings(String)
+ */
+ public String getFontVariationSettings() {
+ return mFontVariationSettings;
+ }
+
+ /**
+ * Set font variation settings.
+ *
+ * @param settings font variation settings, e.g. "'wdth' 300, 'wght' 1.8"
+ *
+ * @see #getFontVariationSettings()
+ *
+ * @param settings the font variation settings. You can pass null or empty string as no
+ * variation settings.
+ */
+ public void setFontVariationSettings(String settings) {
+ settings = TextUtils.nullIfEmpty(settings);
+ if (settings == mFontVariationSettings
+ || (settings != null && settings.equals(mFontVariationSettings))) {
+ return;
+ }
+ mFontVariationSettings = settings;
+ setTypeface(Typeface.createFromTypefaceWithVariation(mTypeface, settings));
+ }
+
+ /**
* Get the current value of hyphen edit.
*
* @return the current hyphen edit value
diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java
index 2886f0d..166ef1b 100644
--- a/graphics/java/android/graphics/Typeface.java
+++ b/graphics/java/android/graphics/Typeface.java
@@ -21,6 +21,7 @@
import android.util.LongSparseArray;
import android.util.LruCache;
import android.util.SparseArray;
+import android.graphics.FontListParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -171,6 +172,15 @@
return typeface;
}
+ /** @hide */
+ public static Typeface createFromTypefaceWithVariation(Typeface family,
+ String fontVariationSettings) {
+ final long ni = family == null ? 0 : family.native_instance;
+ ArrayList<FontListParser.Axis> axes =
+ FontListParser.parseFontVariationSettings(fontVariationSettings);
+ return new Typeface(nativeCreateFromTypefaceWithVariation(ni, axes));
+ }
+
/**
* Returns one of the default typeface objects, based on the specified style
*
@@ -196,6 +206,7 @@
FontFamily fontFamily = new FontFamily();
if (fontFamily.addFontFromAsset(mgr, path)) {
+ fontFamily.freeze();
FontFamily[] families = { fontFamily };
typeface = createFromFamiliesWithDefault(families);
sDynamicTypefaceCache.put(key, typeface);
@@ -245,6 +256,7 @@
if (sFallbackFonts != null) {
FontFamily fontFamily = new FontFamily();
if (fontFamily.addFont(path, 0 /* ttcIndex */)) {
+ fontFamily.freeze();
FontFamily[] families = { fontFamily };
return createFromFamiliesWithDefault(families);
}
@@ -315,6 +327,7 @@
Log.e(TAG, "Error creating font " + font.fontName + "#" + font.ttcIndex);
}
}
+ fontFamily.freeze();
return fontFamily;
}
@@ -440,6 +453,8 @@
}
private static native long nativeCreateFromTypeface(long native_instance, int style);
+ private static native long nativeCreateFromTypefaceWithVariation(
+ long native_instance, List<FontListParser.Axis> axes);
private static native long nativeCreateWeightAlias(long native_instance, int weight);
private static native void nativeUnref(long native_instance);
private static native int nativeGetStyle(long native_instance);
diff --git a/graphics/tests/graphicstests/src/android/graphics/VariationParserTest.java b/graphics/tests/graphicstests/src/android/graphics/VariationParserTest.java
index d046c11..23de416 100644
--- a/graphics/tests/graphicstests/src/android/graphics/VariationParserTest.java
+++ b/graphics/tests/graphicstests/src/android/graphics/VariationParserTest.java
@@ -17,6 +17,7 @@
package android.graphics;
import android.test.suitebuilder.annotation.SmallTest;
+import java.util.List;
import junit.framework.TestCase;
@@ -25,92 +26,92 @@
@SmallTest
public void testParseFontVariationSetting() {
int tag = FontListParser.makeTag('w', 'd', 't', 'h');
- FontListParser.Axis[] axis = FontListParser.parseFontVariationSettings("'wdth' 1");
- assertEquals(tag, axis[0].tag);
- assertEquals(1.0f, axis[0].styleValue);
+ List<FontListParser.Axis> axes = FontListParser.parseFontVariationSettings("'wdth' 1");
+ assertEquals(tag, axes.get(0).tag);
+ assertEquals(1.0f, axes.get(0).styleValue);
- axis = FontListParser.parseFontVariationSettings("\"wdth\" 100");
- assertEquals(tag, axis[0].tag);
- assertEquals(100.0f, axis[0].styleValue);
+ axes = FontListParser.parseFontVariationSettings("\"wdth\" 100");
+ assertEquals(tag, axes.get(0).tag);
+ assertEquals(100.0f, axes.get(0).styleValue);
- axis = FontListParser.parseFontVariationSettings(" 'wdth' 100");
- assertEquals(tag, axis[0].tag);
- assertEquals(100.0f, axis[0].styleValue);
+ axes = FontListParser.parseFontVariationSettings(" 'wdth' 100");
+ assertEquals(tag, axes.get(0).tag);
+ assertEquals(100.0f, axes.get(0).styleValue);
- axis = FontListParser.parseFontVariationSettings("\t'wdth' 0.5");
- assertEquals(tag, axis[0].tag);
- assertEquals(0.5f, axis[0].styleValue);
+ axes = FontListParser.parseFontVariationSettings("\t'wdth' 0.5");
+ assertEquals(tag, axes.get(0).tag);
+ assertEquals(0.5f, axes.get(0).styleValue);
tag = FontListParser.makeTag('A', 'X', ' ', ' ');
- axis = FontListParser.parseFontVariationSettings("'AX ' 1");
- assertEquals(tag, axis[0].tag);
- assertEquals(1.0f, axis[0].styleValue);
+ axes = FontListParser.parseFontVariationSettings("'AX ' 1");
+ assertEquals(tag, axes.get(0).tag);
+ assertEquals(1.0f, axes.get(0).styleValue);
- axis = FontListParser.parseFontVariationSettings("'AX '\t1");
- assertEquals(tag, axis[0].tag);
- assertEquals(1.0f, axis[0].styleValue);
+ axes = FontListParser.parseFontVariationSettings("'AX '\t1");
+ assertEquals(tag, axes.get(0).tag);
+ assertEquals(1.0f, axes.get(0).styleValue);
- axis = FontListParser.parseFontVariationSettings("'AX '\n1");
- assertEquals(tag, axis[0].tag);
- assertEquals(1.0f, axis[0].styleValue);
+ axes = FontListParser.parseFontVariationSettings("'AX '\n1");
+ assertEquals(tag, axes.get(0).tag);
+ assertEquals(1.0f, axes.get(0).styleValue);
- axis = FontListParser.parseFontVariationSettings("'AX '\r1");
- assertEquals(tag, axis[0].tag);
- assertEquals(1.0f, axis[0].styleValue);
+ axes = FontListParser.parseFontVariationSettings("'AX '\r1");
+ assertEquals(tag, axes.get(0).tag);
+ assertEquals(1.0f, axes.get(0).styleValue);
- axis = FontListParser.parseFontVariationSettings("'AX '\r\t\n 1");
- assertEquals(tag, axis[0].tag);
- assertEquals(1.0f, axis[0].styleValue);
+ axes = FontListParser.parseFontVariationSettings("'AX '\r\t\n 1");
+ assertEquals(tag, axes.get(0).tag);
+ assertEquals(1.0f, axes.get(0).styleValue);
// Test for invalid input
- axis = FontListParser.parseFontVariationSettings("");
- assertEquals(0, axis.length);
- axis = FontListParser.parseFontVariationSettings("invalid_form");
- assertEquals(0, axis.length);
+ axes = FontListParser.parseFontVariationSettings("");
+ assertEquals(0, axes.size());
+ axes = FontListParser.parseFontVariationSettings("invalid_form");
+ assertEquals(0, axes.size());
// Test with invalid tag
- axis = FontListParser.parseFontVariationSettings("'' 1");
- assertEquals(0, axis.length);
- axis = FontListParser.parseFontVariationSettings("'invalid' 1");
- assertEquals(0, axis.length);
+ axes = FontListParser.parseFontVariationSettings("'' 1");
+ assertEquals(0, axes.size());
+ axes = FontListParser.parseFontVariationSettings("'invalid' 1");
+ assertEquals(0, axes.size());
// Test with invalid styleValue
- axis = FontListParser.parseFontVariationSettings("'wdth' ");
- assertEquals(0, axis.length);
- axis = FontListParser.parseFontVariationSettings("'wdth' x");
- assertEquals(0, axis.length);
- axis = FontListParser.parseFontVariationSettings("'wdth' \t");
- assertEquals(0, axis.length);
- axis = FontListParser.parseFontVariationSettings("'wdth' \n\r");
- assertEquals(0, axis.length);
+ axes = FontListParser.parseFontVariationSettings("'wdth' ");
+ assertEquals(0, axes.size());
+ axes = FontListParser.parseFontVariationSettings("'wdth' x");
+ assertEquals(0, axes.size());
+ axes = FontListParser.parseFontVariationSettings("'wdth' \t");
+ assertEquals(0, axes.size());
+ axes = FontListParser.parseFontVariationSettings("'wdth' \n\r");
+ assertEquals(0, axes.size());
}
@SmallTest
public void testParseFontVariationStyleSettings() {
- FontListParser.Axis[] axis =
+ List<FontListParser.Axis> axes =
FontListParser.parseFontVariationSettings("'wdth' 10,'AX '\r1");
int tag1 = FontListParser.makeTag('w', 'd', 't', 'h');
int tag2 = FontListParser.makeTag('A', 'X', ' ', ' ');
- assertEquals(tag1, axis[0].tag);
- assertEquals(10.0f, axis[0].styleValue);
- assertEquals(tag2, axis[1].tag);
- assertEquals(1.0f, axis[1].styleValue);
+ assertEquals(tag1, axes.get(0).tag);
+ assertEquals(10.0f, axes.get(0).styleValue);
+ assertEquals(tag2, axes.get(1).tag);
+ assertEquals(1.0f, axes.get(1).styleValue);
// Test only spacers are allowed before tag
- axis = FontListParser.parseFontVariationSettings(" 'wdth' 10,ab'wdth' 1");
+ axes = FontListParser.parseFontVariationSettings(" 'wdth' 10,ab'wdth' 1");
tag1 = FontListParser.makeTag('w', 'd', 't', 'h');
- assertEquals(tag1, axis[0].tag);
- assertEquals(10.0f, axis[0].styleValue);
- assertEquals(1, axis.length);
+ assertEquals(tag1, axes.get(0).tag);
+ assertEquals(10.0f, axes.get(0).styleValue);
+ assertEquals(1, axes.size());
}
@SmallTest
public void testInvalidTagCharacters() {
- FontListParser.Axis[] axis =
+ List<FontListParser.Axis> axes =
FontListParser.parseFontVariationSettings("'\u0000\u0000\u0000\u0000' 10");
- assertEquals(0, axis.length);
- axis = FontListParser.parseFontVariationSettings("'\u3042\u3044\u3046\u3048' 10");
- assertEquals(0, axis.length);
+ assertEquals(0, axes.size());
+ axes = FontListParser.parseFontVariationSettings("'\u3042\u3044\u3046\u3048' 10");
+ assertEquals(0, axes.size());
}
@SmallTest
diff --git a/libs/androidfw/AttributeResolution.cpp b/libs/androidfw/AttributeResolution.cpp
index f5aef05..2771ade 100644
--- a/libs/androidfw/AttributeResolution.cpp
+++ b/libs/androidfw/AttributeResolution.cpp
@@ -18,7 +18,7 @@
#include <cstdint>
-#include <android/log.h>
+#include <log/log.h>
#include "androidfw/AttributeFinder.h"
#include "androidfw/ResourceTypes.h"
@@ -418,8 +418,10 @@
out_values[STYLE_CHANGING_CONFIGURATIONS] = type_set_flags;
out_values[STYLE_DENSITY] = config.density;
- if (out_indices != nullptr && value.dataType != Res_value::TYPE_NULL) {
+ if (value.dataType != Res_value::TYPE_NULL) {
indices_idx++;
+
+ // out_indices must NOT be nullptr.
out_indices[indices_idx] = ii;
}
@@ -428,9 +430,8 @@
res.unlock();
- if (out_indices != nullptr) {
- out_indices[0] = indices_idx;
- }
+ // out_indices must NOT be nullptr.
+ out_indices[0] = indices_idx;
}
bool RetrieveAttributes(const ResTable* res, ResXMLParser* xml_parser,
diff --git a/libs/androidfw/BackupData.cpp b/libs/androidfw/BackupData.cpp
index ba4a4ff..76a430e 100644
--- a/libs/androidfw/BackupData.cpp
+++ b/libs/androidfw/BackupData.cpp
@@ -16,14 +16,13 @@
#define LOG_TAG "backup_data"
-#include <androidfw/BackupHelpers.h>
-#include <utils/ByteOrder.h>
-
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <cutils/log.h>
+#include <androidfw/BackupHelpers.h>
+#include <log/log.h>
+#include <utils/ByteOrder.h>
namespace android {
diff --git a/libs/androidfw/BackupHelpers.cpp b/libs/androidfw/BackupHelpers.cpp
index 78e9d91..8bfe2b6 100644
--- a/libs/androidfw/BackupHelpers.cpp
+++ b/libs/androidfw/BackupHelpers.cpp
@@ -18,23 +18,22 @@
#include <androidfw/BackupHelpers.h>
-#include <utils/KeyedVector.h>
-#include <utils/ByteOrder.h>
-#include <utils/String8.h>
-
#include <errno.h>
-#include <sys/types.h>
-#include <sys/uio.h>
-#include <sys/stat.h>
-#include <sys/time.h> // for utimes
+#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/time.h> // for utimes
+#include <sys/uio.h>
#include <unistd.h>
#include <utime.h>
-#include <fcntl.h>
#include <zlib.h>
-#include <cutils/log.h>
+#include <log/log.h>
+#include <utils/ByteOrder.h>
+#include <utils/KeyedVector.h>
+#include <utils/String8.h>
namespace android {
diff --git a/libs/androidfw/include/androidfw/AttributeResolution.h b/libs/androidfw/include/androidfw/AttributeResolution.h
index 8d5ff46..69b76041 100644
--- a/libs/androidfw/include/androidfw/AttributeResolution.h
+++ b/libs/androidfw/include/androidfw/AttributeResolution.h
@@ -40,14 +40,20 @@
// TODO(adamlesinski): Run performance tests against these methods and a new, single method
// that uses all the sources and branches to the right ones within the inner loop.
+// `out_values` must NOT be nullptr.
+// `out_indices` may be nullptr.
bool ResolveAttrs(ResTable::Theme* theme, uint32_t def_style_attr, uint32_t def_style_res,
uint32_t* src_values, size_t src_values_length, uint32_t* attrs,
size_t attrs_length, uint32_t* out_values, uint32_t* out_indices);
+// `out_values` must NOT be nullptr.
+// `out_indices` is NOT optional and must NOT be nullptr.
void ApplyStyle(ResTable::Theme* theme, ResXMLParser* xml_parser, uint32_t def_style_attr,
uint32_t def_style_res, const uint32_t* attrs, size_t attrs_length,
uint32_t* out_values, uint32_t* out_indices);
+// `out_values` must NOT be nullptr.
+// `out_indices` may be nullptr.
bool RetrieveAttributes(const ResTable* res, ResXMLParser* xml_parser, uint32_t* attrs,
size_t attrs_length, uint32_t* out_values, uint32_t* out_indices);
diff --git a/libs/androidfw/include/androidfw/CursorWindow.h b/libs/androidfw/include/androidfw/CursorWindow.h
index 8a2979a..f543565 100644
--- a/libs/androidfw/include/androidfw/CursorWindow.h
+++ b/libs/androidfw/include/androidfw/CursorWindow.h
@@ -17,11 +17,11 @@
#ifndef _ANDROID__DATABASE_WINDOW_H
#define _ANDROID__DATABASE_WINDOW_H
-#include <cutils/log.h>
#include <stddef.h>
#include <stdint.h>
#include <binder/Parcel.h>
+#include <log/log.h>
#include <utils/String8.h>
#if LOG_NDEBUG
diff --git a/libs/androidfw/tests/AttributeResolution_test.cpp b/libs/androidfw/tests/AttributeResolution_test.cpp
index d417aba..7550517 100644
--- a/libs/androidfw/tests/AttributeResolution_test.cpp
+++ b/libs/androidfw/tests/AttributeResolution_test.cpp
@@ -16,6 +16,8 @@
#include "androidfw/AttributeResolution.h"
+#include <array>
+
#include "android-base/file.h"
#include "android-base/logging.h"
#include "android-base/macros.h"
@@ -67,15 +69,13 @@
ResTable::Theme theme(table_);
ASSERT_EQ(NO_ERROR, theme.applyStyle(R::style::StyleTwo));
- uint32_t attrs[] = {R::attr::attr_one, R::attr::attr_two, R::attr::attr_three,
- R::attr::attr_four};
- std::vector<uint32_t> values;
- values.resize(arraysize(attrs) * 6);
+ std::array<uint32_t, 4> attrs{
+ {R::attr::attr_one, R::attr::attr_two, R::attr::attr_three, R::attr::attr_four}};
+ std::array<uint32_t, attrs.size() * STYLE_NUM_ENTRIES> values;
ASSERT_TRUE(ResolveAttrs(&theme, 0 /*def_style_attr*/, 0 /*def_style_res*/,
- nullptr /*src_values*/, 0 /*src_values_length*/,
- attrs, arraysize(attrs), values.data(),
- nullptr /*out_indices*/));
+ nullptr /*src_values*/, 0 /*src_values_length*/, attrs.data(),
+ attrs.size(), values.data(), nullptr /*out_indices*/));
const uint32_t public_flag = ResTable_typeSpec::SPEC_PUBLIC;
@@ -112,13 +112,12 @@
}
TEST_F(AttributeResolutionXmlTest, XmlParser) {
- uint32_t attrs[] = {R::attr::attr_one, R::attr::attr_two, R::attr::attr_three,
- R::attr::attr_four};
- std::vector<uint32_t> values;
- values.resize(arraysize(attrs) * 6);
+ std::array<uint32_t, 4> attrs{
+ {R::attr::attr_one, R::attr::attr_two, R::attr::attr_three, R::attr::attr_four}};
+ std::array<uint32_t, attrs.size() * STYLE_NUM_ENTRIES> values;
- ASSERT_TRUE(RetrieveAttributes(&table_, &xml_parser_, attrs, arraysize(attrs),
- values.data(), nullptr /*out_indices*/));
+ ASSERT_TRUE(RetrieveAttributes(&table_, &xml_parser_, attrs.data(), attrs.size(), values.data(),
+ nullptr /*out_indices*/));
uint32_t* values_cursor = values.data();
EXPECT_EQ(Res_value::TYPE_NULL, values_cursor[STYLE_TYPE]);
@@ -157,14 +156,13 @@
ResTable::Theme theme(table_);
ASSERT_EQ(NO_ERROR, theme.applyStyle(R::style::StyleTwo));
- uint32_t attrs[] = {R::attr::attr_one, R::attr::attr_two, R::attr::attr_three,
- R::attr::attr_four, R::attr::attr_five};
- std::vector<uint32_t> values;
- values.resize(arraysize(attrs) * 6);
+ std::array<uint32_t, 5> attrs{{R::attr::attr_one, R::attr::attr_two, R::attr::attr_three,
+ R::attr::attr_four, R::attr::attr_five}};
+ std::array<uint32_t, attrs.size() * STYLE_NUM_ENTRIES> values;
+ std::array<uint32_t, attrs.size()> indices;
- ApplyStyle(&theme, &xml_parser_, 0 /*def_style_attr*/,
- 0 /*def_style_res*/, attrs, arraysize(attrs),
- values.data(), nullptr /*out_indices*/);
+ ApplyStyle(&theme, &xml_parser_, 0 /*def_style_attr*/, 0 /*def_style_res*/, attrs.data(),
+ attrs.size(), values.data(), indices.data());
const uint32_t public_flag = ResTable_typeSpec::SPEC_PUBLIC;
diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk
index 18e59e5..8f7787b 100644
--- a/libs/hwui/Android.mk
+++ b/libs/hwui/Android.mk
@@ -75,6 +75,7 @@
FrameInfo.cpp \
FrameInfoVisualizer.cpp \
GammaFontRenderer.cpp \
+ GlLayer.cpp \
GlopBuilder.cpp \
GpuMemoryTracker.cpp \
GradientCache.cpp \
@@ -115,6 +116,7 @@
Texture.cpp \
TextureCache.cpp \
VectorDrawable.cpp \
+ VkLayer.cpp \
protos/hwui.proto
hwui_test_common_src_files := \
diff --git a/libs/hwui/Animator.cpp b/libs/hwui/Animator.cpp
index 74aa303..b6fbf89 100644
--- a/libs/hwui/Animator.cpp
+++ b/libs/hwui/Animator.cpp
@@ -317,7 +317,7 @@
const RenderPropertyAnimator::PropertyAccessors RenderPropertyAnimator::PROPERTY_ACCESSOR_LUT[] = {
{RenderNode::TRANSLATION_X, &RenderProperties::getTranslationX, &RenderProperties::setTranslationX },
{RenderNode::TRANSLATION_Y, &RenderProperties::getTranslationY, &RenderProperties::setTranslationY },
- {RenderNode::TRANSLATION_X, &RenderProperties::getTranslationZ, &RenderProperties::setTranslationZ },
+ {RenderNode::TRANSLATION_Z, &RenderProperties::getTranslationZ, &RenderProperties::setTranslationZ },
{RenderNode::SCALE_X, &RenderProperties::getScaleX, &RenderProperties::setScaleX },
{RenderNode::SCALE_Y, &RenderProperties::getScaleY, &RenderProperties::setScaleY },
{RenderNode::ROTATION, &RenderProperties::getRotation, &RenderProperties::setRotation },
diff --git a/libs/hwui/AnimatorManager.cpp b/libs/hwui/AnimatorManager.cpp
index 9d5860c..f5bb821 100644
--- a/libs/hwui/AnimatorManager.cpp
+++ b/libs/hwui/AnimatorManager.cpp
@@ -142,7 +142,7 @@
}
uint32_t AnimatorManager::animateCommon(TreeInfo& info) {
- uint32_t dirtyMask;
+ uint32_t dirtyMask = 0;
AnimateFunctor functor(info, mAnimationHandle->context(), &dirtyMask);
auto newEnd = std::remove_if(mAnimators.begin(), mAnimators.end(), functor);
mAnimators.erase(newEnd, mAnimators.end());
diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp
index b463e45..a0366de 100644
--- a/libs/hwui/Caches.cpp
+++ b/libs/hwui/Caches.cpp
@@ -17,7 +17,7 @@
#include "Caches.h"
#include "GammaFontRenderer.h"
-#include "Layer.h"
+#include "GlLayer.h"
#include "Properties.h"
#include "renderstate/RenderState.h"
#include "ShadowTessellator.h"
@@ -170,9 +170,11 @@
for (std::set<Layer*>::iterator it = mRenderState->mActiveLayers.begin();
it != mRenderState->mActiveLayers.end(); it++) {
const Layer* layer = *it;
- log.appendFormat(" Layer size %dx%d; texid=%u refs=%d\n",
+ LOG_ALWAYS_FATAL_IF(layer->getApi() != Layer::Api::OpenGL);
+ const GlLayer* glLayer = static_cast<const GlLayer*>(layer);
+ log.appendFormat(" GlLayer size %dx%d; texid=%u refs=%d\n",
layer->getWidth(), layer->getHeight(),
- layer->getTextureId(),
+ glLayer->getTextureId(),
layer->getStrongCount());
memused += layer->getWidth() * layer->getHeight() * 4;
}
diff --git a/libs/hwui/CanvasState.cpp b/libs/hwui/CanvasState.cpp
index dbbf00d..9c068b0 100644
--- a/libs/hwui/CanvasState.cpp
+++ b/libs/hwui/CanvasState.cpp
@@ -212,11 +212,6 @@
return !mSnapshot->clipIsEmpty();
}
-bool CanvasState::clipRegion(const SkRegion* region, SkClipOp op) {
- mSnapshot->clipRegionTransformed(*region, op);
- return !mSnapshot->clipIsEmpty();
-}
-
void CanvasState::setClippingOutline(LinearAllocator& allocator, const Outline* outline) {
Rect bounds;
float radius;
diff --git a/libs/hwui/CanvasState.h b/libs/hwui/CanvasState.h
index a805597..b1fe09e 100644
--- a/libs/hwui/CanvasState.h
+++ b/libs/hwui/CanvasState.h
@@ -124,7 +124,6 @@
bool clipRect(float left, float top, float right, float bottom, SkClipOp op);
bool clipPath(const SkPath* path, SkClipOp op);
- bool clipRegion(const SkRegion* region, SkClipOp op);
/**
* Sets a "clipping outline", which is independent from the regular clip.
diff --git a/libs/hwui/ClipArea.h b/libs/hwui/ClipArea.h
index 2e56160..cf57516 100644
--- a/libs/hwui/ClipArea.h
+++ b/libs/hwui/ClipArea.h
@@ -146,7 +146,6 @@
void setClip(float left, float top, float right, float bottom);
void clipRectWithTransform(const Rect& r, const mat4* transform,
SkRegion::Op op);
- void clipRegion(const SkRegion& region, SkRegion::Op op);
void clipPathWithTransform(const SkPath& path, const mat4* transform,
SkRegion::Op op);
@@ -195,6 +194,7 @@
void regionModeClipRectWithTransform(const Rect& r, const mat4* transform,
SkRegion::Op op);
+ void clipRegion(const SkRegion& region, SkRegion::Op op);
void ensureClipRegion();
void onClipRegionUpdated();
diff --git a/libs/hwui/DamageAccumulator.cpp b/libs/hwui/DamageAccumulator.cpp
index 6d5833b..2b4fe17 100644
--- a/libs/hwui/DamageAccumulator.cpp
+++ b/libs/hwui/DamageAccumulator.cpp
@@ -16,7 +16,7 @@
#include "DamageAccumulator.h"
-#include <cutils/log.h>
+#include <log/log.h>
#include "RenderNode.h"
#include "utils/MathUtils.h"
diff --git a/libs/hwui/DeferredLayerUpdater.cpp b/libs/hwui/DeferredLayerUpdater.cpp
index a7d5f60..3e8e8a1 100644
--- a/libs/hwui/DeferredLayerUpdater.cpp
+++ b/libs/hwui/DeferredLayerUpdater.cpp
@@ -15,6 +15,8 @@
*/
#include "DeferredLayerUpdater.h"
+#include "GlLayer.h"
+#include "VkLayer.h"
#include "renderthread/EglManager.h"
#include "renderthread/RenderTask.h"
#include "utils/PaintUtils.h"
@@ -55,13 +57,23 @@
mLayer->setAlpha(mAlpha, mMode);
if (mSurfaceTexture.get()) {
- if (mNeedsGLContextAttach) {
- mNeedsGLContextAttach = false;
- mSurfaceTexture->attachToContext(mLayer->getTextureId());
- }
- if (mUpdateTexImage) {
- mUpdateTexImage = false;
- doUpdateTexImage();
+ if (mLayer->getApi() == Layer::Api::Vulkan) {
+ if (mUpdateTexImage) {
+ mUpdateTexImage = false;
+ doUpdateVkTexImage();
+ }
+ } else {
+ LOG_ALWAYS_FATAL_IF(mLayer->getApi() != Layer::Api::OpenGL,
+ "apply surfaceTexture with non GL backend %x, GL %x, VK %x",
+ mLayer->getApi(), Layer::Api::OpenGL, Layer::Api::Vulkan);
+ if (mNeedsGLContextAttach) {
+ mNeedsGLContextAttach = false;
+ mSurfaceTexture->attachToContext(static_cast<GlLayer*>(mLayer)->getTextureId());
+ }
+ if (mUpdateTexImage) {
+ mUpdateTexImage = false;
+ doUpdateTexImage();
+ }
}
if (mTransform) {
mLayer->getTransform().load(*mTransform);
@@ -71,6 +83,9 @@
}
void DeferredLayerUpdater::doUpdateTexImage() {
+ LOG_ALWAYS_FATAL_IF(mLayer->getApi() != Layer::Api::OpenGL,
+ "doUpdateTexImage non GL backend %x, GL %x, VK %x",
+ mLayer->getApi(), Layer::Api::OpenGL, Layer::Api::Vulkan);
if (mSurfaceTexture->updateTexImage() == NO_ERROR) {
float transform[16];
@@ -110,30 +125,53 @@
}
}
+void DeferredLayerUpdater::doUpdateVkTexImage() {
+ LOG_ALWAYS_FATAL_IF(mLayer->getApi() != Layer::Api::Vulkan,
+ "updateLayer non Vulkan backend %x, GL %x, VK %x",
+ mLayer->getApi(), Layer::Api::OpenGL, Layer::Api::Vulkan);
+
+ static const mat4 identityMatrix;
+ updateLayer(false, identityMatrix.data);
+
+ VkLayer* vkLayer = static_cast<VkLayer*>(mLayer);
+ vkLayer->updateTexture();
+}
+
void DeferredLayerUpdater::updateLayer(bool forceFilter, GLenum renderTarget,
const float* textureTransform) {
+ LOG_ALWAYS_FATAL_IF(mLayer->getApi() != Layer::Api::OpenGL,
+ "updateLayer non GL backend %x, GL %x, VK %x",
+ mLayer->getApi(), Layer::Api::OpenGL, Layer::Api::Vulkan);
+
+ updateLayer(forceFilter, textureTransform);
+
+ GlLayer* glLayer = static_cast<GlLayer*>(mLayer);
+ if (renderTarget != glLayer->getRenderTarget()) {
+ glLayer->setRenderTarget(renderTarget);
+ glLayer->bindTexture();
+ glLayer->setFilter(GL_NEAREST, false, true);
+ glLayer->setWrap(GL_CLAMP_TO_EDGE, false, true);
+ }
+}
+
+void DeferredLayerUpdater::updateLayer(bool forceFilter, const float* textureTransform) {
mLayer->setBlend(mBlend);
mLayer->setForceFilter(forceFilter);
mLayer->setSize(mWidth, mHeight);
mLayer->getTexTransform().load(textureTransform);
-
- if (renderTarget != mLayer->getRenderTarget()) {
- mLayer->setRenderTarget(renderTarget);
- mLayer->bindTexture();
- mLayer->setFilter(GL_NEAREST, false, true);
- mLayer->setWrap(GL_CLAMP_TO_EDGE, false, true);
- }
}
void DeferredLayerUpdater::detachSurfaceTexture() {
if (mSurfaceTexture.get()) {
- status_t err = mSurfaceTexture->detachFromContext();
- if (err != 0) {
- // TODO: Elevate to fatal exception
- ALOGE("Failed to detach SurfaceTexture from context %d", err);
+ if (mLayer->getApi() == Layer::Api::OpenGL) {
+ status_t err = mSurfaceTexture->detachFromContext();
+ if (err != 0) {
+ // TODO: Elevate to fatal exception
+ ALOGE("Failed to detach SurfaceTexture from context %d", err);
+ }
+ static_cast<GlLayer*>(mLayer)->clearTexture();
}
mSurfaceTexture = nullptr;
- mLayer->clearTexture();
}
}
diff --git a/libs/hwui/DeferredLayerUpdater.h b/libs/hwui/DeferredLayerUpdater.h
index 7335008..ead8314 100644
--- a/libs/hwui/DeferredLayerUpdater.h
+++ b/libs/hwui/DeferredLayerUpdater.h
@@ -22,6 +22,9 @@
#include <SkMatrix.h>
#include <utils/StrongPointer.h>
+#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
+
#include "Layer.h"
#include "Rect.h"
#include "renderthread/RenderThread.h"
@@ -110,6 +113,8 @@
Layer* mLayer;
void doUpdateTexImage();
+ void doUpdateVkTexImage();
+ void updateLayer(bool forceFilter, const float* textureTransform);
};
} /* namespace uirenderer */
diff --git a/libs/hwui/DeviceInfo.cpp b/libs/hwui/DeviceInfo.cpp
index 700642e..d180ba5 100644
--- a/libs/hwui/DeviceInfo.cpp
+++ b/libs/hwui/DeviceInfo.cpp
@@ -13,16 +13,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
#include <DeviceInfo.h>
#include "Extensions.h"
-#include <GLES2/gl2.h>
-#include <log/log.h>
-
#include <thread>
#include <mutex>
+#include <log/log.h>
+
+#include <GLES2/gl2.h>
+
namespace android {
namespace uirenderer {
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index effc65e..4f9a3de 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -22,6 +22,7 @@
#include "Caches.h"
#include "Debug.h"
#include "Extensions.h"
+#include "font/Font.h"
#include "Glop.h"
#include "GlopBuilder.h"
#include "PixelBuffer.h"
diff --git a/libs/hwui/GlLayer.cpp b/libs/hwui/GlLayer.cpp
new file mode 100644
index 0000000..c0ab895
--- /dev/null
+++ b/libs/hwui/GlLayer.cpp
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "GlLayer.h"
+
+#include "Caches.h"
+#include "RenderNode.h"
+#include "renderstate/RenderState.h"
+#include "utils/TraceUtils.h"
+
+#include <utils/Log.h>
+
+#define ATRACE_LAYER_WORK(label) \
+ ATRACE_FORMAT("%s HW Layer DisplayList %s %ux%u", \
+ label, \
+ (renderNode.get() != NULL) ? renderNode->getName() : "", \
+ getWidth(), getHeight())
+
+namespace android {
+namespace uirenderer {
+
+GlLayer::GlLayer(RenderState& renderState, uint32_t layerWidth, uint32_t layerHeight)
+ : Layer(renderState, Api::OpenGL)
+ , caches(Caches::getInstance())
+ , texture(caches) {
+ texture.mWidth = layerWidth;
+ texture.mHeight = layerHeight;
+}
+
+GlLayer::~GlLayer() {
+ if (texture.mId) {
+ texture.deleteTexture();
+ }
+}
+
+void GlLayer::onGlContextLost() {
+ texture.deleteTexture();
+}
+
+void GlLayer::bindTexture() const {
+ if (texture.mId) {
+ caches.textureState().bindTexture(texture.target(), texture.mId);
+ }
+}
+
+void GlLayer::generateTexture() {
+ if (!texture.mId) {
+ glGenTextures(1, &texture.mId);
+ }
+}
+
+void GlLayer::clearTexture() {
+ // There's a rare possibility that Caches could have been destroyed already
+ // since this method is queued up as a task.
+ // Since this is a reset method, treat this as non-fatal.
+ if (caches.isInitialized()) {
+ caches.textureState().unbindTexture(texture.mId);
+ }
+ texture.mId = 0;
+}
+
+}; // namespace uirenderer
+}; // namespace android
diff --git a/libs/hwui/GlLayer.h b/libs/hwui/GlLayer.h
new file mode 100644
index 0000000..54bf5ad
--- /dev/null
+++ b/libs/hwui/GlLayer.h
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include "Layer.h"
+
+#include "Texture.h"
+
+namespace android {
+namespace uirenderer {
+
+// Forward declarations
+class Caches;
+
+/**
+ * A layer has dimensions and is backed by an OpenGL texture or FBO.
+ */
+class GlLayer : public Layer {
+public:
+ GlLayer(RenderState& renderState, uint32_t layerWidth, uint32_t layerHeight);
+ virtual ~GlLayer();
+
+ uint32_t getWidth() const override {
+ return texture.mWidth;
+ }
+
+ uint32_t getHeight() const override {
+ return texture.mHeight;
+ }
+
+ void setSize(uint32_t width, uint32_t height) override {
+ texture.updateSize(width, height, texture.internalFormat(), texture.format(),
+ texture.target());
+ }
+
+ void setBlend(bool blend) override {
+ texture.blend = blend;
+ }
+
+ bool isBlend() const override {
+ return texture.blend;
+ }
+
+ inline GLuint getTextureId() const {
+ return texture.id();
+ }
+
+ inline Texture& getTexture() {
+ return texture;
+ }
+
+ inline GLenum getRenderTarget() const {
+ return texture.target();
+ }
+
+ inline void setRenderTarget(GLenum renderTarget) {
+ texture.mTarget = renderTarget;
+ }
+
+ inline bool isRenderable() const {
+ return texture.target() != GL_NONE;
+ }
+
+ void setWrap(GLenum wrap, bool bindTexture = false, bool force = false) {
+ texture.setWrap(wrap, bindTexture, force);
+ }
+
+ void setFilter(GLenum filter, bool bindTexture = false, bool force = false) {
+ texture.setFilter(filter, bindTexture, force);
+ }
+
+ void bindTexture() const;
+ void generateTexture();
+
+ /**
+ * When the caller frees the texture itself, the caller
+ * must call this method to tell this layer that it lost
+ * the texture.
+ */
+ void clearTexture();
+
+ /**
+ * Lost the GL context but the layer is still around, mark it invalid internally
+ * so the dtor knows not to do any GL work
+ */
+ void onGlContextLost();
+
+private:
+ Caches& caches;
+
+ /**
+ * The texture backing this layer.
+ */
+ Texture texture;
+}; // struct GlLayer
+
+}; // namespace uirenderer
+}; // namespace android
diff --git a/libs/hwui/GlopBuilder.cpp b/libs/hwui/GlopBuilder.cpp
index 34e6d39..8a6e038 100644
--- a/libs/hwui/GlopBuilder.cpp
+++ b/libs/hwui/GlopBuilder.cpp
@@ -16,6 +16,7 @@
#include "GlopBuilder.h"
#include "Caches.h"
+#include "GlLayer.h"
#include "Glop.h"
#include "Layer.h"
#include "Matrix.h"
@@ -440,7 +441,7 @@
return *this;
}
-GlopBuilder& GlopBuilder::setFillTextureLayer(Layer& layer, float alpha) {
+GlopBuilder& GlopBuilder::setFillTextureLayer(GlLayer& layer, float alpha) {
TRIGGER_STAGE(kFillStage);
REQUIRE_STAGES(kMeshStage | kRoundRectClipStage);
diff --git a/libs/hwui/GlopBuilder.h b/libs/hwui/GlopBuilder.h
index 8a8b652..87b1568 100644
--- a/libs/hwui/GlopBuilder.h
+++ b/libs/hwui/GlopBuilder.h
@@ -28,6 +28,7 @@
namespace uirenderer {
class Caches;
+class GlLayer;
class Matrix4;
class Patch;
class RenderState;
@@ -71,7 +72,7 @@
GlopBuilder& setFillClear();
GlopBuilder& setFillLayer(Texture& texture, const SkColorFilter* colorFilter,
float alpha, SkBlendMode mode, Blend::ModeOrderSwap modeUsage);
- GlopBuilder& setFillTextureLayer(Layer& layer, float alpha);
+ GlopBuilder& setFillTextureLayer(GlLayer& layer, float alpha);
// TODO: setFillLayer normally forces its own wrap & filter mode,
// which isn't always correct.
GlopBuilder& setFillExternalTexture(Texture& texture, Matrix4& textureTransform);
diff --git a/libs/hwui/GpuMemoryTracker.cpp b/libs/hwui/GpuMemoryTracker.cpp
index 4fb5701..a52ec87 100644
--- a/libs/hwui/GpuMemoryTracker.cpp
+++ b/libs/hwui/GpuMemoryTracker.cpp
@@ -67,13 +67,13 @@
gObjectStats[static_cast<int>(mType)].count--;
}
-void GpuMemoryTracker::onGLContextCreated() {
- LOG_ALWAYS_FATAL_IF(gGpuThread != 0, "We already have a GL thread? "
- "current = %lu, gl thread = %lu", pthread_self(), gGpuThread);
+void GpuMemoryTracker::onGpuContextCreated() {
+ LOG_ALWAYS_FATAL_IF(gGpuThread != 0, "We already have a gpu thread? "
+ "current = %lu, gpu thread = %lu", pthread_self(), gGpuThread);
gGpuThread = pthread_self();
}
-void GpuMemoryTracker::onGLContextDestroyed() {
+void GpuMemoryTracker::onGpuContextDestroyed() {
gGpuThread = 0;
if (CC_UNLIKELY(gObjectSet.size() > 0)) {
std::stringstream os;
diff --git a/libs/hwui/GpuMemoryTracker.h b/libs/hwui/GpuMemoryTracker.h
index bfb1bf1..18e2330 100644
--- a/libs/hwui/GpuMemoryTracker.h
+++ b/libs/hwui/GpuMemoryTracker.h
@@ -15,10 +15,11 @@
*/
#pragma once
-#include <cutils/log.h>
#include <pthread.h>
#include <ostream>
+#include <log/log.h>
+
namespace android {
namespace uirenderer {
@@ -43,8 +44,8 @@
GpuObjectType objectType() { return mType; }
int objectSize() { return mSize; }
- static void onGLContextCreated();
- static void onGLContextDestroyed();
+ static void onGpuContextCreated();
+ static void onGpuContextDestroyed();
static void dump();
static void dump(std::ostream& stream);
static int getInstanceCount(GpuObjectType type);
diff --git a/libs/hwui/Interpolator.cpp b/libs/hwui/Interpolator.cpp
index f94a22d..d740c03 100644
--- a/libs/hwui/Interpolator.cpp
+++ b/libs/hwui/Interpolator.cpp
@@ -16,10 +16,11 @@
#include "Interpolator.h"
-#include "utils/MathUtils.h"
-
#include <algorithm>
-#include <cutils/log.h>
+
+#include <log/log.h>
+
+#include "utils/MathUtils.h"
namespace android {
namespace uirenderer {
diff --git a/libs/hwui/JankTracker.cpp b/libs/hwui/JankTracker.cpp
index ed6b211..2132c2b 100644
--- a/libs/hwui/JankTracker.cpp
+++ b/libs/hwui/JankTracker.cpp
@@ -13,21 +13,24 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
#include "JankTracker.h"
+#include <errno.h>
+#include <inttypes.h>
+#include <sys/mman.h>
+
+#include <algorithm>
+#include <cmath>
+#include <cstdio>
+#include <limits>
+
+#include <cutils/ashmem.h>
+#include <log/log.h>
+
#include "Properties.h"
#include "utils/TimeUtils.h"
-#include <algorithm>
-#include <cutils/ashmem.h>
-#include <cutils/log.h>
-#include <cstdio>
-#include <errno.h>
-#include <inttypes.h>
-#include <limits>
-#include <cmath>
-#include <sys/mman.h>
-
namespace android {
namespace uirenderer {
diff --git a/libs/hwui/Layer.cpp b/libs/hwui/Layer.cpp
index 88817ef..331bb81 100644
--- a/libs/hwui/Layer.cpp
+++ b/libs/hwui/Layer.cpp
@@ -16,77 +16,36 @@
#include "Layer.h"
-#include "Caches.h"
-#include "RenderNode.h"
#include "renderstate/RenderState.h"
-#include "utils/TraceUtils.h"
-#include <utils/Log.h>
-
-#define ATRACE_LAYER_WORK(label) \
- ATRACE_FORMAT("%s HW Layer DisplayList %s %ux%u", \
- label, \
- (renderNode.get() != NULL) ? renderNode->getName() : "", \
- getWidth(), getHeight())
+#include <SkColorFilter.h>
namespace android {
namespace uirenderer {
-Layer::Layer(RenderState& renderState, uint32_t layerWidth, uint32_t layerHeight)
+Layer::Layer(RenderState& renderState, Api api)
: GpuMemoryTracker(GpuObjectType::Layer)
- , state(State::Uncached)
- , caches(Caches::getInstance())
- , renderState(renderState)
- , texture(caches) {
+ , mRenderState(renderState)
+ , mApi(api) {
// TODO: This is a violation of Android's typical ref counting, but it
// preserves the old inc/dec ref locations. This should be changed...
incStrong(nullptr);
- texture.mWidth = layerWidth;
- texture.mHeight = layerHeight;
+
renderState.registerLayer(this);
}
Layer::~Layer() {
- renderState.unregisterLayer(this);
SkSafeUnref(colorFilter);
- if (texture.mId) {
- texture.deleteTexture();
- }
-}
-
-void Layer::onGlContextLost() {
- texture.deleteTexture();
+ mRenderState.unregisterLayer(this);
}
void Layer::setColorFilter(SkColorFilter* filter) {
SkRefCnt_SafeAssign(colorFilter, filter);
}
-void Layer::bindTexture() const {
- if (texture.mId) {
- caches.textureState().bindTexture(texture.target(), texture.mId);
- }
-}
-
-void Layer::generateTexture() {
- if (!texture.mId) {
- glGenTextures(1, &texture.mId);
- }
-}
-
-void Layer::clearTexture() {
- // There's a rare possibility that Caches could have been destroyed already
- // since this method is queued up as a task.
- // Since this is a reset method, treat this as non-fatal.
- if (caches.isInitialized()) {
- caches.textureState().unbindTexture(texture.mId);
- }
- texture.mId = 0;
-}
-
void Layer::postDecStrong() {
- renderState.postDecStrong(this);
+ mRenderState.postDecStrong(this);
}
}; // namespace uirenderer
diff --git a/libs/hwui/Layer.h b/libs/hwui/Layer.h
index 8e71cd1..3b639ee 100644
--- a/libs/hwui/Layer.h
+++ b/libs/hwui/Layer.h
@@ -16,25 +16,13 @@
#pragma once
-#include <cutils/compiler.h>
-#include <sys/types.h>
-#include <utils/StrongPointer.h>
#include <utils/RefBase.h>
-#include <memory>
-
-#include <GLES2/gl2.h>
#include <GpuMemoryTracker.h>
-#include <ui/Region.h>
-
#include <SkPaint.h>
#include <SkBlendMode.h>
#include "Matrix.h"
-#include "Rect.h"
-#include "RenderBuffer.h"
-#include "Texture.h"
-#include "Vertex.h"
namespace android {
namespace uirenderer {
@@ -43,49 +31,33 @@
// Layers
///////////////////////////////////////////////////////////////////////////////
-// Forward declarations
-class Caches;
class RenderState;
/**
- * A layer has dimensions and is backed by an OpenGL texture or FBO.
+ * A layer has dimensions and is backed by a backend specific texture or framebuffer.
*/
class Layer : public VirtualLightRefBase, GpuMemoryTracker {
public:
- // layer lifecycle, controlled from outside
- enum class State {
- Uncached = 0,
- InCache = 1,
- FailedToCache = 2,
- RemovedFromCache = 3,
- DeletedFromCache = 4,
- InGarbageList = 5,
+ enum class Api {
+ OpenGL = 0,
+ Vulkan = 1,
};
- State state; // public for logging/debugging purposes
- Layer(RenderState& renderState, uint32_t layerWidth, uint32_t layerHeight);
+ Api getApi() const {
+ return mApi;
+ }
+
~Layer();
- inline uint32_t getWidth() const {
- return texture.mWidth;
- }
+ virtual uint32_t getWidth() const = 0;
- inline uint32_t getHeight() const {
- return texture.mHeight;
- }
+ virtual uint32_t getHeight() const = 0;
- void setSize(uint32_t width, uint32_t height) {
- texture.updateSize(width, height, texture.internalFormat(), texture.format(),
- texture.target());
- }
+ virtual void setSize(uint32_t width, uint32_t height) = 0;
- inline void setBlend(bool blend) {
- texture.blend = blend;
- }
+ virtual void setBlend(bool blend) = 0;
- inline bool isBlend() const {
- return texture.blend;
- }
+ virtual bool isBlend() const = 0;
inline void setForceFilter(bool forceFilter) {
this->forceFilter = forceFilter;
@@ -112,50 +84,12 @@
return mode;
}
- inline GLuint getTextureId() const {
- return texture.id();
- }
-
- inline Texture& getTexture() {
- return texture;
- }
-
- inline GLenum getRenderTarget() const {
- return texture.target();
- }
-
- inline void setRenderTarget(GLenum renderTarget) {
- texture.mTarget = renderTarget;
- }
-
- inline bool isRenderable() const {
- return texture.target() != GL_NONE;
- }
-
- void setWrap(GLenum wrap, bool bindTexture = false, bool force = false) {
- texture.setWrap(wrap, bindTexture, force);
- }
-
- void setFilter(GLenum filter, bool bindTexture = false, bool force = false) {
- texture.setFilter(filter, bindTexture, force);
- }
-
inline SkColorFilter* getColorFilter() const {
return colorFilter;
}
void setColorFilter(SkColorFilter* filter);
- void bindTexture() const;
- void generateTexture();
-
- /**
- * When the caller frees the texture itself, the caller
- * must call this method to tell this layer that it lost
- * the texture.
- */
- void clearTexture();
-
inline mat4& getTexTransform() {
return texTransform;
}
@@ -170,21 +104,13 @@
*/
void postDecStrong();
- /**
- * Lost the GL context but the layer is still around, mark it invalid internally
- * so the dtor knows not to do any GL work
- */
- void onGlContextLost();
+protected:
+ Layer(RenderState& renderState, Api api);
+
+ RenderState& mRenderState;
private:
- Caches& caches;
-
- RenderState& renderState;
-
- /**
- * The texture backing this layer.
- */
- Texture texture;
+ Api mApi;
/**
* Color filter used to draw this layer. Optional.
diff --git a/libs/hwui/OpenGLReadback.cpp b/libs/hwui/OpenGLReadback.cpp
index 938b6ef..c460c0d 100644
--- a/libs/hwui/OpenGLReadback.cpp
+++ b/libs/hwui/OpenGLReadback.cpp
@@ -19,7 +19,7 @@
#include "Caches.h"
#include "Image.h"
#include "GlopBuilder.h"
-#include "Layer.h"
+#include "GlLayer.h"
#include "renderstate/RenderState.h"
#include "renderthread/EglManager.h"
#include "utils/GLUtils.h"
@@ -262,7 +262,7 @@
}
bool OpenGLReadbackImpl::copyLayerInto(renderthread::RenderThread& renderThread,
- Layer& layer, SkBitmap* bitmap) {
+ GlLayer& layer, SkBitmap* bitmap) {
return CopyResult::Success == copyTextureInto(Caches::getInstance(),
renderThread.renderState(), layer.getTexture(), layer.getTexTransform(),
Rect(), bitmap);
diff --git a/libs/hwui/OpenGLReadback.h b/libs/hwui/OpenGLReadback.h
index f4ebabc..c9222cf 100644
--- a/libs/hwui/OpenGLReadback.h
+++ b/libs/hwui/OpenGLReadback.h
@@ -22,7 +22,7 @@
namespace uirenderer {
class Matrix4;
-class Layer;
+class GlLayer;
class OpenGLReadback : public Readback {
public:
@@ -49,7 +49,7 @@
/**
* Copies the layer's contents into the provided bitmap.
*/
- static bool copyLayerInto(renderthread::RenderThread& renderThread, Layer& layer,
+ static bool copyLayerInto(renderthread::RenderThread& renderThread, GlLayer& layer,
SkBitmap* bitmap);
protected:
diff --git a/libs/hwui/PixelBuffer.h b/libs/hwui/PixelBuffer.h
index 9536bc8..77d5e41 100644
--- a/libs/hwui/PixelBuffer.h
+++ b/libs/hwui/PixelBuffer.h
@@ -18,7 +18,8 @@
#define ANDROID_HWUI_PIXEL_BUFFER_H
#include <GLES3/gl3.h>
-#include <cutils/log.h>
+
+#include <log/log.h>
namespace android {
namespace uirenderer {
diff --git a/libs/hwui/Properties.cpp b/libs/hwui/Properties.cpp
index 848161e..0702010 100644
--- a/libs/hwui/Properties.cpp
+++ b/libs/hwui/Properties.cpp
@@ -13,17 +13,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
#include "Properties.h"
-
#include "Debug.h"
-#include <cutils/compiler.h>
-#include <cutils/log.h>
-#include <cutils/properties.h>
-
#include <algorithm>
#include <cstdlib>
+#include <cutils/compiler.h>
+#include <cutils/properties.h>
+#include <log/log.h>
+
namespace android {
namespace uirenderer {
diff --git a/libs/hwui/RecordedOp.h b/libs/hwui/RecordedOp.h
index f9a7c36f2..dea2be6 100644
--- a/libs/hwui/RecordedOp.h
+++ b/libs/hwui/RecordedOp.h
@@ -17,6 +17,7 @@
#pragma once
#include "font/FontUtil.h"
+#include "GlLayer.h"
#include "Matrix.h"
#include "Rect.h"
#include "RenderNode.h"
@@ -413,7 +414,7 @@
};
struct TextureLayerOp : RecordedOp {
- TextureLayerOp(BASE_PARAMS_PAINTLESS, Layer* layer)
+ TextureLayerOp(BASE_PARAMS_PAINTLESS, GlLayer* layer)
: SUPER_PAINTLESS(TextureLayerOp)
, layer(layer) {}
@@ -424,7 +425,7 @@
, layer(op.layer) {
}
- Layer* layer;
+ GlLayer* layer;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/libs/hwui/RecordingCanvas.cpp b/libs/hwui/RecordingCanvas.cpp
index 96c6d29..b5e5d68 100644
--- a/libs/hwui/RecordingCanvas.cpp
+++ b/libs/hwui/RecordingCanvas.cpp
@@ -240,9 +240,6 @@
bool RecordingCanvas::clipPath(const SkPath* path, SkClipOp op) {
return mState.clipPath(path, op);
}
-bool RecordingCanvas::clipRegion(const SkRegion* region, SkClipOp op) {
- return mState.clipRegion(region, op);
-}
// ----------------------------------------------------------------------------
// android/graphics/Canvas draw operations
@@ -609,13 +606,14 @@
// We ref the DeferredLayerUpdater due to its thread-safe ref-counting semantics.
mDisplayList->ref(layerHandle);
+ LOG_ALWAYS_FATAL_IF(layerHandle->backingLayer()->getApi() != Layer::Api::OpenGL);
// Note that the backing layer has *not* yet been updated, so don't trust
// its width, height, transform, etc...!
addOp(alloc().create_trivial<TextureLayerOp>(
Rect(layerHandle->getWidth(), layerHandle->getHeight()),
*(mState.currentSnapshot()->transform),
getRecordedClip(),
- layerHandle->backingLayer()));
+ static_cast<GlLayer*>(layerHandle->backingLayer())));
}
void RecordingCanvas::callDrawGLFunction(Functor* functor,
diff --git a/libs/hwui/RecordingCanvas.h b/libs/hwui/RecordingCanvas.h
index 5d49385..44181bd 100644
--- a/libs/hwui/RecordingCanvas.h
+++ b/libs/hwui/RecordingCanvas.h
@@ -134,7 +134,6 @@
virtual bool clipRect(float left, float top, float right, float bottom,
SkClipOp op) override;
virtual bool clipPath(const SkPath* path, SkClipOp op) override;
- virtual bool clipRegion(const SkRegion* region, SkClipOp op) override;
// Misc
virtual SkDrawFilter* getDrawFilter() override { return mDrawFilter.get(); }
diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp
index 8cae771..344df0a 100644
--- a/libs/hwui/SkiaCanvas.cpp
+++ b/libs/hwui/SkiaCanvas.cpp
@@ -416,23 +416,6 @@
return !mCanvas->isClipEmpty();
}
-bool SkiaCanvas::clipRegion(const SkRegion* region, SkClipOp op) {
- SkPath rgnPath;
- if (region->getBoundaryPath(&rgnPath)) {
- // The region is specified in device space.
- SkMatrix savedMatrix = mCanvas->getTotalMatrix();
- mCanvas->resetMatrix();
- this->recordClip(rgnPath, op);
- mCanvas->clipPath(rgnPath, op);
- mCanvas->setMatrix(savedMatrix);
- } else {
- const auto emptyClip = SkRect::MakeEmpty();
- this->recordClip(emptyClip, op);
- mCanvas->clipRect(emptyClip, op);
- }
- return !mCanvas->isClipEmpty();
-}
-
// ----------------------------------------------------------------------------
// Canvas state operations: Filters
// ----------------------------------------------------------------------------
diff --git a/libs/hwui/SkiaCanvas.h b/libs/hwui/SkiaCanvas.h
index 9639ebd..34c3717 100644
--- a/libs/hwui/SkiaCanvas.h
+++ b/libs/hwui/SkiaCanvas.h
@@ -94,7 +94,6 @@
virtual bool clipRect(float left, float top, float right, float bottom,
SkClipOp op) override;
virtual bool clipPath(const SkPath* path, SkClipOp op) override;
- virtual bool clipRegion(const SkRegion* region, SkClipOp op) override;
virtual SkDrawFilter* getDrawFilter() override;
virtual void setDrawFilter(SkDrawFilter* drawFilter) override;
diff --git a/libs/hwui/SkiaCanvasProxy.cpp b/libs/hwui/SkiaCanvasProxy.cpp
index 75396f7..f32612d 100644
--- a/libs/hwui/SkiaCanvasProxy.cpp
+++ b/libs/hwui/SkiaCanvasProxy.cpp
@@ -16,9 +16,12 @@
#include "SkiaCanvasProxy.h"
-#include "hwui/Bitmap.h"
+#include <memory>
-#include <cutils/log.h>
+#include <log/log.h>
+
+#include "hwui/Bitmap.h"
+#include <SkLatticeIter.h>
#include <SkPatchUtils.h>
#include <SkPaint.h>
#include <SkPath.h>
@@ -29,8 +32,6 @@
#include <SkSurface.h>
#include <SkTextBlobRunIterator.h>
-#include <memory>
-
namespace android {
namespace uirenderer {
@@ -140,6 +141,39 @@
SkDEBUGFAIL("SkiaCanvasProxy::onDrawBitmapNine is not yet supported");
}
+void SkiaCanvasProxy::onDrawImage(const SkImage* image, SkScalar left, SkScalar top,
+ const SkPaint* paint) {
+ SkBitmap skiaBitmap;
+ if (image->asLegacyBitmap(&skiaBitmap, SkImage::kRO_LegacyBitmapMode)) {
+ onDrawBitmap(skiaBitmap, left, top, paint);
+ }
+}
+
+void SkiaCanvasProxy::onDrawImageRect(const SkImage* image, const SkRect* srcPtr, const SkRect& dst,
+ const SkPaint* paint, SrcRectConstraint constraint) {
+ SkBitmap skiaBitmap;
+ if (image->asLegacyBitmap(&skiaBitmap, SkImage::kRO_LegacyBitmapMode)) {
+ sk_sp<Bitmap> bitmap = Bitmap::createFrom(skiaBitmap.info(), *skiaBitmap.pixelRef());
+ SkRect src = (srcPtr) ? *srcPtr : SkRect::MakeWH(image->width(), image->height());
+ mCanvas->drawBitmap(*bitmap, src.fLeft, src.fTop, src.fRight, src.fBottom,
+ dst.fLeft, dst.fTop, dst.fRight, dst.fBottom, paint);
+ }
+}
+
+void SkiaCanvasProxy::onDrawImageNine(const SkImage*, const SkIRect& center, const SkRect& dst,
+ const SkPaint*) {
+ SkDEBUGFAIL("SkiaCanvasProxy::onDrawImageNine is not yet supported");
+}
+
+void SkiaCanvasProxy::onDrawImageLattice(const SkImage* image, const Lattice& lattice,
+ const SkRect& dst, const SkPaint* paint) {
+ SkLatticeIter iter(lattice, dst);
+ SkRect srcR, dstR;
+ while (iter.next(&srcR, &dstR)) {
+ onDrawImageRect(image, &srcR, dstR, paint, SkCanvas::kStrict_SrcRectConstraint);
+ }
+}
+
void SkiaCanvasProxy::onDrawVertices(VertexMode mode, int vertexCount, const SkPoint vertices[],
const SkPoint texs[], const SkColor colors[], SkBlendMode, const uint16_t indices[],
int indexCount, const SkPaint& paint) {
@@ -444,9 +478,5 @@
mCanvas->clipPath(&path, op);
}
-void SkiaCanvasProxy::onClipRegion(const SkRegion& region, SkClipOp op) {
- mCanvas->clipRegion(®ion, op);
-}
-
}; // namespace uirenderer
}; // namespace android
diff --git a/libs/hwui/SkiaCanvasProxy.h b/libs/hwui/SkiaCanvasProxy.h
index badcc1d..b3f6c07 100644
--- a/libs/hwui/SkiaCanvasProxy.h
+++ b/libs/hwui/SkiaCanvasProxy.h
@@ -66,6 +66,13 @@
const SkPaint* paint, SrcRectConstraint) override;
virtual void onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
const SkRect& dst, const SkPaint*) override;
+ virtual void onDrawImage(const SkImage*, SkScalar dx, SkScalar dy, const SkPaint*);
+ virtual void onDrawImageRect(const SkImage*, const SkRect*, const SkRect&, const SkPaint*,
+ SrcRectConstraint);
+ virtual void onDrawImageNine(const SkImage*, const SkIRect& center, const SkRect& dst,
+ const SkPaint*);
+ virtual void onDrawImageLattice(const SkImage*, const Lattice& lattice, const SkRect& dst,
+ const SkPaint*);
virtual void onDrawVertices(VertexMode, int vertexCount, const SkPoint vertices[],
const SkPoint texs[], const SkColor colors[], SkBlendMode,
const uint16_t indices[], int indexCount,
@@ -93,7 +100,6 @@
virtual void onClipRect(const SkRect&, SkClipOp, ClipEdgeStyle) override;
virtual void onClipRRect(const SkRRect&, SkClipOp, ClipEdgeStyle) override;
virtual void onClipPath(const SkPath&, SkClipOp, ClipEdgeStyle) override;
- virtual void onClipRegion(const SkRegion&, SkClipOp) override;
private:
Canvas* mCanvas;
diff --git a/libs/hwui/SkiaShader.cpp b/libs/hwui/SkiaShader.cpp
index fadb960..9239986 100644
--- a/libs/hwui/SkiaShader.cpp
+++ b/libs/hwui/SkiaShader.cpp
@@ -18,7 +18,6 @@
#include "Caches.h"
#include "Extensions.h"
-#include "Layer.h"
#include "Matrix.h"
#include "Texture.h"
#include "hwui/Bitmap.h"
@@ -317,42 +316,6 @@
return true;
}
-bool tryStoreLayer(Caches& caches, const SkShader& shader, const Matrix4& modelViewMatrix,
- GLuint* textureUnit, ProgramDescription* description,
- SkiaShaderData::LayerShaderData* outData) {
- Layer* layer;
- if (!shader.asACustomShader(reinterpret_cast<void**>(&layer))) {
- return false;
- }
-
- description->hasBitmap = true;
- outData->layer = layer;
- outData->bitmapSampler = (*textureUnit)++;
-
- const float width = layer->getWidth();
- const float height = layer->getHeight();
-
- computeScreenSpaceMatrix(outData->textureTransform, SkMatrix::I(), shader.getLocalMatrix(),
- modelViewMatrix);
-
- outData->textureDimension[0] = 1.0f / width;
- outData->textureDimension[1] = 1.0f / height;
- return true;
-}
-
-void applyLayer(Caches& caches, const SkiaShaderData::LayerShaderData& data) {
- caches.textureState().activateTexture(data.bitmapSampler);
-
- data.layer->bindTexture();
- data.layer->setWrap(GL_CLAMP_TO_EDGE);
- data.layer->setFilter(GL_LINEAR);
-
- glUniform1i(caches.program().getUniform("bitmapSampler"), data.bitmapSampler);
- glUniformMatrix4fv(caches.program().getUniform("textureTransform"), 1,
- GL_FALSE, &data.textureTransform.data[0]);
- glUniform2fv(caches.program().getUniform("textureDimension"), 1, &data.textureDimension[0]);
-}
-
void SkiaShader::store(Caches& caches, const SkShader& shader, const Matrix4& modelViewMatrix,
GLuint* textureUnit, ProgramDescription* description,
SkiaShaderData* outData) {
@@ -374,12 +337,6 @@
return;
}
- if (tryStoreLayer(caches, shader, modelViewMatrix,
- textureUnit, description, &outData->layerData)) {
- outData->skiaShaderType = kLayer_SkiaShaderType;
- return;
- }
-
// Unknown/unsupported type, so explicitly ignore shader
outData->skiaShaderType = kNone_SkiaShaderType;
}
@@ -394,10 +351,6 @@
if (data.skiaShaderType & kBitmap_SkiaShaderType) {
applyBitmap(caches, data.bitmapData);
}
-
- if (data.skiaShaderType == kLayer_SkiaShaderType) {
- applyLayer(caches, data.layerData);
- }
}
}; // namespace uirenderer
diff --git a/libs/hwui/SkiaShader.h b/libs/hwui/SkiaShader.h
index d2f37cd..ab578d5 100644
--- a/libs/hwui/SkiaShader.h
+++ b/libs/hwui/SkiaShader.h
@@ -29,7 +29,6 @@
class Caches;
class Extensions;
-class Layer;
class Texture;
struct ProgramDescription;
@@ -45,7 +44,6 @@
kBitmap_SkiaShaderType = 1,
kGradient_SkiaShaderType = 2,
kCompose_SkiaShaderType = kBitmap_SkiaShaderType | kGradient_SkiaShaderType,
- kLayer_SkiaShaderType = 4,
};
struct SkiaShaderData {
@@ -71,15 +69,6 @@
GLuint gradientSampler;
GLenum wrapST;
} gradientData;
- struct LayerShaderData {
- Layer* layer;
- GLuint bitmapSampler;
- GLenum wrapS;
- GLenum wrapT;
-
- Matrix4 textureTransform;
- float textureDimension[2];
- } layerData;
};
class SkiaShader {
diff --git a/libs/hwui/Snapshot.cpp b/libs/hwui/Snapshot.cpp
index 3f08009..9d719bd 100644
--- a/libs/hwui/Snapshot.cpp
+++ b/libs/hwui/Snapshot.cpp
@@ -72,11 +72,6 @@
// Clipping
///////////////////////////////////////////////////////////////////////////////
-void Snapshot::clipRegionTransformed(const SkRegion& region, SkClipOp op) {
- flags |= Snapshot::kFlagClipSet;
- mClipArea->clipRegion(region, static_cast<SkRegion::Op>(op));
-}
-
void Snapshot::clip(const Rect& localClip, SkClipOp op) {
flags |= Snapshot::kFlagClipSet;
mClipArea->clipRectWithTransform(localClip, transform, static_cast<SkRegion::Op>(op));
diff --git a/libs/hwui/Snapshot.h b/libs/hwui/Snapshot.h
index 4f92657..8cd90a6 100644
--- a/libs/hwui/Snapshot.h
+++ b/libs/hwui/Snapshot.h
@@ -118,12 +118,6 @@
void clipTransformed(const Rect& r, SkClipOp op = SkClipOp::kIntersect);
/**
- * Modifies the current clip with the specified region and operation.
- * The specified region is considered already transformed.
- */
- void clipRegionTransformed(const SkRegion& region, SkClipOp op);
-
- /**
* Modifies the current clip with the specified path and operation.
*/
void clipPath(const SkPath& path, SkClipOp op);
diff --git a/libs/hwui/Texture.h b/libs/hwui/Texture.h
index c75e88f..b8397cc 100644
--- a/libs/hwui/Texture.h
+++ b/libs/hwui/Texture.h
@@ -159,10 +159,10 @@
*/
void* isInUse = nullptr;
private:
- // TODO: Temporarily grant private access to Layer, remove once
- // Layer can be de-tangled from being a dual-purpose render target
+ // TODO: Temporarily grant private access to GlLayer, remove once
+ // GlLayer can be de-tangled from being a dual-purpose render target
// and external texture wrapper
- friend class Layer;
+ friend class GlLayer;
// Returns true if the size changed, false if it was the same
bool updateSize(uint32_t width, uint32_t height, GLint internalFormat,
diff --git a/libs/hwui/VkLayer.cpp b/libs/hwui/VkLayer.cpp
new file mode 100644
index 0000000..537b3ea
--- /dev/null
+++ b/libs/hwui/VkLayer.cpp
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "VkLayer.h"
+
+#include "renderstate/RenderState.h"
+
+#include <SkCanvas.h>
+#include <SkSurface.h>
+
+namespace android {
+namespace uirenderer {
+
+void VkLayer::updateTexture() {
+ sk_sp<SkSurface> surface;
+ SkImageInfo info = SkImageInfo::MakeS32(mWidth, mHeight, kPremul_SkAlphaType);
+ surface = SkSurface::MakeRenderTarget(mRenderState.getGrContext(), SkBudgeted::kNo, info);
+ surface->getCanvas()->clear(SK_ColorBLUE);
+ mImage = surface->makeImageSnapshot(SkBudgeted::kNo);
+}
+
+void VkLayer::onVkContextDestroyed() {
+ mImage = nullptr;
+}
+
+}; // namespace uirenderer
+}; // namespace android
diff --git a/libs/hwui/VkLayer.h b/libs/hwui/VkLayer.h
new file mode 100644
index 0000000..39522b3
--- /dev/null
+++ b/libs/hwui/VkLayer.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include "Layer.h"
+
+#include <SkImage.h>
+
+namespace android {
+namespace uirenderer {
+/**
+ * A layer has dimensions and is backed by a VkImage.
+ */
+class VkLayer : public Layer {
+public:
+ VkLayer(RenderState& renderState, uint32_t layerWidth, uint32_t layerHeight)
+ : Layer(renderState, Api::Vulkan) {}
+
+ virtual ~VkLayer() {}
+
+ uint32_t getWidth() const override {
+ return mWidth;
+ }
+
+ uint32_t getHeight() const override {
+ return mHeight;
+ }
+
+ void setSize(uint32_t width, uint32_t height) override {
+ mWidth = width;
+ mHeight = height;
+ }
+
+ void setBlend(bool blend) override {
+ mBlend = blend;
+ }
+
+ bool isBlend() const override {
+ return mBlend;
+ }
+
+ sk_sp<SkImage> getImage() {
+ return mImage;
+ }
+
+ void updateTexture();
+
+ // If we've destroyed the vulkan context (VkInstance, VkDevice, etc.), we must make sure to
+ // destroy any VkImages that were made with that context.
+ void onVkContextDestroyed();
+
+private:
+ int mWidth;
+ int mHeight;
+ bool mBlend;
+
+ sk_sp<SkImage> mImage;
+
+}; // struct VkLayer
+
+}; // namespace uirenderer
+}; // namespace android
diff --git a/libs/hwui/debug/FatalBaseDriver.cpp b/libs/hwui/debug/FatalBaseDriver.cpp
index 99ac358..4c38fac 100644
--- a/libs/hwui/debug/FatalBaseDriver.cpp
+++ b/libs/hwui/debug/FatalBaseDriver.cpp
@@ -16,7 +16,7 @@
#include "FatalBaseDriver.h"
-#include <cutils/log.h>
+#include <log/log.h>
namespace android {
namespace uirenderer {
diff --git a/libs/hwui/debug/GlesErrorCheckWrapper.cpp b/libs/hwui/debug/GlesErrorCheckWrapper.cpp
index 8366387..7ededaa 100644
--- a/libs/hwui/debug/GlesErrorCheckWrapper.cpp
+++ b/libs/hwui/debug/GlesErrorCheckWrapper.cpp
@@ -16,7 +16,7 @@
#include "GlesErrorCheckWrapper.h"
-#include <cutils/log.h>
+#include <log/log.h>
namespace android {
namespace uirenderer {
diff --git a/libs/hwui/hwui/Bitmap.cpp b/libs/hwui/hwui/Bitmap.cpp
index f6585d6..a34b61b 100644
--- a/libs/hwui/hwui/Bitmap.cpp
+++ b/libs/hwui/hwui/Bitmap.cpp
@@ -20,8 +20,9 @@
#include "renderthread/RenderThread.h"
#include "renderthread/RenderProxy.h"
-#include <cutils/log.h>
#include <sys/mman.h>
+
+#include <log/log.h>
#include <cutils/ashmem.h>
#include <GLES2/gl2.h>
@@ -29,7 +30,6 @@
#include <EGL/egl.h>
#include <EGL/eglext.h>
-
#include <gui/IGraphicBufferAlloc.h>
#include <gui/ISurfaceComposer.h>
#include <private/gui/ComposerService.h>
diff --git a/libs/hwui/hwui/Canvas.h b/libs/hwui/hwui/Canvas.h
index e7b6b2d..969d877 100644
--- a/libs/hwui/hwui/Canvas.h
+++ b/libs/hwui/hwui/Canvas.h
@@ -184,7 +184,6 @@
virtual bool clipRect(float left, float top, float right, float bottom,
SkClipOp op) = 0;
virtual bool clipPath(const SkPath* path, SkClipOp op) = 0;
- virtual bool clipRegion(const SkRegion* region, SkClipOp op) = 0;
// filters
virtual SkDrawFilter* getDrawFilter() = 0;
diff --git a/libs/hwui/hwui/MinikinSkia.cpp b/libs/hwui/hwui/MinikinSkia.cpp
index f172473..6a00379 100644
--- a/libs/hwui/hwui/MinikinSkia.cpp
+++ b/libs/hwui/hwui/MinikinSkia.cpp
@@ -16,9 +16,11 @@
#include "MinikinSkia.h"
+#include <log/log.h>
+#include <SkFontDescriptor.h>
+#include <SkFontMgr.h>
#include <SkPaint.h>
#include <SkTypeface.h>
-#include <cutils/log.h>
namespace android {
@@ -85,6 +87,28 @@
return mTtcIndex;
}
+minikin::MinikinFont* MinikinFontSkia::createFontWithVariation(
+ const std::vector<minikin::FontVariation>& variations) const {
+ SkFontMgr::FontParameters params;
+
+ int ttcIndex;
+ SkStreamAsset* stream = mTypeface->openStream(&ttcIndex);
+ LOG_ALWAYS_FATAL_IF(stream == nullptr, "openStream failed");
+
+ params.setCollectionIndex(ttcIndex);
+ std::vector<SkFontMgr::FontParameters::Axis> skAxes;
+ skAxes.resize(variations.size());
+ for (size_t i = 0; i < variations.size(); i++) {
+ skAxes[i].fTag = variations[i].axisTag;
+ skAxes[i].fStyleValue = SkFloatToScalar(variations[i].value);
+ }
+ params.setAxes(skAxes.data(), skAxes.size());
+ sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
+ sk_sp<SkTypeface> face(fm->createFromStream(stream, params));
+
+ return new MinikinFontSkia(std::move(face), mFontData, mFontSize, ttcIndex);
+}
+
uint32_t MinikinFontSkia::packPaintFlags(const SkPaint* paint) {
uint32_t flags = paint->getFlags();
SkPaint::Hinting hinting = paint->getHinting();
diff --git a/libs/hwui/hwui/MinikinSkia.h b/libs/hwui/hwui/MinikinSkia.h
index 3ee916c..249b0cb 100644
--- a/libs/hwui/hwui/MinikinSkia.h
+++ b/libs/hwui/hwui/MinikinSkia.h
@@ -44,6 +44,8 @@
const void* GetFontData() const;
size_t GetFontSize() const;
int GetFontIndex() const;
+ minikin::MinikinFont* createFontWithVariation(
+ const std::vector<minikin::FontVariation>&) const;
static uint32_t packPaintFlags(const SkPaint* paint);
static void unpackPaintFlags(SkPaint* paint, uint32_t paintFlags);
diff --git a/libs/hwui/hwui/MinikinUtils.cpp b/libs/hwui/hwui/MinikinUtils.cpp
index 8dd165c..713e509 100644
--- a/libs/hwui/hwui/MinikinUtils.cpp
+++ b/libs/hwui/hwui/MinikinUtils.cpp
@@ -13,15 +13,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
#include "MinikinUtils.h"
+#include <string>
+
+#include <log/log.h>
+
#include "Paint.h"
#include "SkPathMeasure.h"
#include "Typeface.h"
-#include <cutils/log.h>
-#include <string>
-
namespace android {
minikin::FontStyle MinikinUtils::prepareMinikinPaint(minikin::MinikinPaint* minikinPaint,
diff --git a/libs/hwui/hwui/Typeface.cpp b/libs/hwui/hwui/Typeface.cpp
index ca43156..b69b0cb 100644
--- a/libs/hwui/hwui/Typeface.cpp
+++ b/libs/hwui/hwui/Typeface.cpp
@@ -62,7 +62,7 @@
Typeface* Typeface::createFromTypeface(Typeface* src, SkTypeface::Style style) {
Typeface* resolvedFace = Typeface::resolveDefault(src);
Typeface* result = new Typeface;
- if (result != 0) {
+ if (result != nullptr) {
result->fFontCollection = resolvedFace->fFontCollection;
result->fFontCollection->Ref();
result->fSkiaStyle = style;
@@ -72,10 +72,30 @@
return result;
}
+Typeface* Typeface::createFromTypefaceWithVariation(Typeface* src,
+ const std::vector<minikin::FontVariation>& variations) {
+ Typeface* resolvedFace = Typeface::resolveDefault(src);
+ Typeface* result = new Typeface();
+ if (result != nullptr) {
+ result->fFontCollection =
+ resolvedFace->fFontCollection->createCollectionWithVariation(variations);
+ if (result->fFontCollection == nullptr) {
+ // None of passed axes are supported by this collection.
+ // So we will reuse the same collection with incrementing reference count.
+ result->fFontCollection = resolvedFace->fFontCollection;
+ result->fFontCollection->Ref();
+ }
+ result->fSkiaStyle = resolvedFace->fSkiaStyle;
+ result->fBaseWeight = resolvedFace->fBaseWeight;
+ resolveStyle(result);
+ }
+ return result;
+}
+
Typeface* Typeface::createWeightAlias(Typeface* src, int weight) {
Typeface* resolvedFace = Typeface::resolveDefault(src);
Typeface* result = new Typeface;
- if (result != 0) {
+ if (result != nullptr) {
result->fFontCollection = resolvedFace->fFontCollection;
result->fFontCollection->Ref();
result->fSkiaStyle = resolvedFace->fSkiaStyle;
@@ -130,9 +150,9 @@
sk_sp<SkTypeface> typeface = SkTypeface::MakeFromStream(fontData.release());
LOG_ALWAYS_FATAL_IF(typeface == nullptr, "Failed to make typeface from %s", kRobotoFont);
- minikin::FontFamily* family = new minikin::FontFamily();
minikin::MinikinFont* font = new MinikinFontSkia(std::move(typeface), data, st.st_size, 0);
- family->addFont(font);
+ minikin::FontFamily* family = new minikin::FontFamily(
+ std::vector<minikin::Font>({ minikin::Font(font, minikin::FontStyle()) }));
font->Unref();
std::vector<minikin::FontFamily*> typefaces = { family };
diff --git a/libs/hwui/hwui/Typeface.h b/libs/hwui/hwui/Typeface.h
index 1be630c..4392ebc 100644
--- a/libs/hwui/hwui/Typeface.h
+++ b/libs/hwui/hwui/Typeface.h
@@ -43,6 +43,9 @@
static Typeface* createFromTypeface(Typeface* src, SkTypeface::Style style);
+ static Typeface* createFromTypefaceWithVariation(Typeface* src,
+ const std::vector<minikin::FontVariation>& variations);
+
static Typeface* createWeightAlias(Typeface* src, int baseweight);
static Typeface* createFromFamilies(const std::vector<minikin::FontFamily*>& families);
diff --git a/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp b/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp
index fb2134c..419c8a9 100644
--- a/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp
+++ b/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp
@@ -52,6 +52,11 @@
canvas->flush();
+ if (Properties::getRenderPipelineType() == RenderPipelineType::SkiaVulkan) {
+ canvas->clear(SK_ColorRED);
+ return;
+ }
+
SkImageInfo canvasInfo = canvas->imageInfo();
SkMatrix44 mat4(canvas->getTotalMatrix());
diff --git a/libs/hwui/pipeline/skia/LayerDrawable.cpp b/libs/hwui/pipeline/skia/LayerDrawable.cpp
index f2af4a8..2ebfbcc 100644
--- a/libs/hwui/pipeline/skia/LayerDrawable.cpp
+++ b/libs/hwui/pipeline/skia/LayerDrawable.cpp
@@ -14,8 +14,12 @@
* limitations under the License.
*/
+#include "GlLayer.h"
#include "LayerDrawable.h"
+#include "VkLayer.h"
+
#include "SkColorFilter.h"
+#include "SkSurface.h"
#include "gl/GrGLTypes.h"
namespace android {
@@ -35,16 +39,27 @@
layer->getTransform().copyTo(transform);
canvas->concat(transform);
}
- GrGLTextureInfo externalTexture;
- externalTexture.fTarget = layer->getRenderTarget();
- externalTexture.fID = layer->getTextureId();
- GrBackendTextureDesc textureDescription;
- textureDescription.fWidth = layer->getWidth();
- textureDescription.fHeight = layer->getHeight();
- textureDescription.fConfig = kRGBA_8888_GrPixelConfig;
- textureDescription.fOrigin = kTopLeft_GrSurfaceOrigin;
- textureDescription.fTextureHandle = reinterpret_cast<GrBackendObject>(&externalTexture);
- sk_sp<SkImage> layerImage = SkImage::MakeFromTexture(context, textureDescription);
+
+ sk_sp<SkImage> layerImage;
+ if (layer->getApi() == Layer::Api::OpenGL) {
+ GlLayer* glLayer = static_cast<GlLayer*>(layer);
+ GrGLTextureInfo externalTexture;
+ externalTexture.fTarget = glLayer->getRenderTarget();
+ externalTexture.fID = glLayer->getTextureId();
+ GrBackendTextureDesc textureDescription;
+ textureDescription.fWidth = glLayer->getWidth();
+ textureDescription.fHeight = glLayer->getHeight();
+ textureDescription.fConfig = kRGBA_8888_GrPixelConfig;
+ textureDescription.fOrigin = kTopLeft_GrSurfaceOrigin;
+ textureDescription.fTextureHandle = reinterpret_cast<GrBackendObject>(&externalTexture);
+ layerImage = SkImage::MakeFromTexture(context, textureDescription);
+ } else {
+ SkASSERT(layer->getApi() == Layer::Api::Vulkan);
+ VkLayer* vkLayer = static_cast<VkLayer*>(layer);
+ canvas->clear(SK_ColorGREEN);
+ layerImage = vkLayer->getImage();
+ }
+
if (layerImage) {
SkPaint paint;
paint.setAlpha(layer->getAlpha());
diff --git a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp
index c8258f7..65a1dc3 100644
--- a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp
+++ b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp
@@ -17,6 +17,7 @@
#include "SkiaOpenGLPipeline.h"
#include "DeferredLayerUpdater.h"
+#include "GlLayer.h"
#include "LayerDrawable.h"
#include "renderthread/EglManager.h"
#include "renderthread/Frame.h"
@@ -136,7 +137,7 @@
DeferredLayerUpdater* SkiaOpenGLPipeline::createTextureLayer() {
mEglManager.initialize();
- Layer* layer = new Layer(mRenderThread.renderState(), 0, 0);
+ GlLayer* layer = new GlLayer(mRenderThread.renderState(), 0, 0);
layer->generateTexture();
return new DeferredLayerUpdater(layer);
}
diff --git a/libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp b/libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp
index 0d3f4ef..910c339 100644
--- a/libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp
+++ b/libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp
@@ -22,6 +22,7 @@
#include "renderstate/RenderState.h"
#include "SkiaPipeline.h"
#include "SkiaProfileRenderer.h"
+#include "VkLayer.h"
#include <SkSurface.h>
#include <SkTypes.h>
@@ -119,7 +120,8 @@
DeferredLayerUpdater* SkiaVulkanPipeline::createTextureLayer() {
mVkManager.initialize();
- Layer* layer = new Layer(mRenderThread.renderState(), 0, 0);
+
+ VkLayer* layer = new VkLayer(mRenderThread.renderState(), 0, 0);
return new DeferredLayerUpdater(layer);
}
diff --git a/libs/hwui/renderstate/RenderState.cpp b/libs/hwui/renderstate/RenderState.cpp
index 72af7c9..17ee390 100644
--- a/libs/hwui/renderstate/RenderState.cpp
+++ b/libs/hwui/renderstate/RenderState.cpp
@@ -13,6 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+#include "GlLayer.h"
+#include "VkLayer.h"
#include <GpuMemoryTracker.h>
#include "renderstate/RenderState.h"
@@ -40,7 +42,7 @@
void RenderState::onGLContextCreated() {
LOG_ALWAYS_FATAL_IF(mBlend || mMeshState || mScissor || mStencil,
"State object lifecycle not managed correctly");
- GpuMemoryTracker::onGLContextCreated();
+ GpuMemoryTracker::onGpuContextCreated();
mBlend = new Blend();
mMeshState = new MeshState();
@@ -55,7 +57,9 @@
}
static void layerLostGlContext(Layer* layer) {
- layer->onGlContextLost();
+ LOG_ALWAYS_FATAL_IF(layer->getApi() != Layer::Api::OpenGL,
+ "layerLostGlContext on non GL layer");
+ static_cast<GlLayer*>(layer)->onGlContextLost();
}
void RenderState::onGLContextDestroyed() {
@@ -75,7 +79,29 @@
delete mStencil;
mStencil = nullptr;
- GpuMemoryTracker::onGLContextDestroyed();
+ GpuMemoryTracker::onGpuContextDestroyed();
+}
+
+void RenderState::onVkContextCreated() {
+ LOG_ALWAYS_FATAL_IF(mBlend || mMeshState || mScissor || mStencil,
+ "State object lifecycle not managed correctly");
+ GpuMemoryTracker::onGpuContextCreated();
+}
+
+static void layerDestroyedVkContext(Layer* layer) {
+ LOG_ALWAYS_FATAL_IF(layer->getApi() != Layer::Api::Vulkan,
+ "layerLostVkContext on non Vulkan layer");
+ static_cast<VkLayer*>(layer)->onVkContextDestroyed();
+}
+
+void RenderState::onVkContextDestroyed() {
+ mLayerPool.clear();
+ std::for_each(mActiveLayers.begin(), mActiveLayers.end(), layerDestroyedVkContext);
+ GpuMemoryTracker::onGpuContextDestroyed();
+}
+
+GrContext* RenderState::getGrContext() const {
+ return mRenderThread.getGrContext();
}
void RenderState::flush(Caches::FlushMode mode) {
diff --git a/libs/hwui/renderstate/RenderState.h b/libs/hwui/renderstate/RenderState.h
index 3d119dc..d183a15 100644
--- a/libs/hwui/renderstate/RenderState.h
+++ b/libs/hwui/renderstate/RenderState.h
@@ -35,6 +35,8 @@
#include <utils/RefBase.h>
#include <private/hwui/DrawGlInfo.h>
+class GrContext;
+
namespace android {
namespace uirenderer {
@@ -56,6 +58,9 @@
void onGLContextCreated();
void onGLContextDestroyed();
+ void onVkContextCreated();
+ void onVkContextDestroyed();
+
void flush(Caches::FlushMode flushMode);
void setViewport(GLsizei width, GLsizei height);
@@ -98,6 +103,8 @@
OffscreenBufferPool& layerPool() { return mLayerPool; }
+ GrContext* getGrContext() const;
+
void dump();
private:
diff --git a/libs/hwui/renderthread/EglManager.cpp b/libs/hwui/renderthread/EglManager.cpp
index 02021fc..7020be0 100644
--- a/libs/hwui/renderthread/EglManager.cpp
+++ b/libs/hwui/renderthread/EglManager.cpp
@@ -16,20 +16,23 @@
#include "EglManager.h"
-#include "Texture.h"
+#include <string>
+
+#include "utils/StringUtils.h"
+#include <cutils/properties.h>
+#include <log/log.h>
+
#include "Caches.h"
#include "DeviceInfo.h"
#include "Frame.h"
#include "Properties.h"
#include "RenderThread.h"
#include "renderstate/RenderState.h"
-#include "utils/StringUtils.h"
-#include <cutils/log.h>
-#include <cutils/properties.h>
+#include "Texture.h"
+
#include <EGL/eglext.h>
#include <GrContextOptions.h>
#include <gl/GrGLInterface.h>
-#include <string>
#ifdef HWUI_GLES_WRAP_ENABLED
#include "debug/GlesDriver.h"
diff --git a/libs/hwui/renderthread/OpenGLPipeline.cpp b/libs/hwui/renderthread/OpenGLPipeline.cpp
index df08599..df40a44 100644
--- a/libs/hwui/renderthread/OpenGLPipeline.cpp
+++ b/libs/hwui/renderthread/OpenGLPipeline.cpp
@@ -19,6 +19,7 @@
#include "DeferredLayerUpdater.h"
#include "EglManager.h"
#include "Frame.h"
+#include "GlLayer.h"
#include "ProfileRenderer.h"
#include "renderstate/RenderState.h"
#include "OpenGLReadback.h"
@@ -120,12 +121,13 @@
bool OpenGLPipeline::copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap) {
ATRACE_CALL();
layer->apply();
- return OpenGLReadbackImpl::copyLayerInto(mRenderThread, *(layer->backingLayer()), bitmap);
+ return OpenGLReadbackImpl::copyLayerInto(mRenderThread,
+ static_cast<GlLayer&>(*layer->backingLayer()), bitmap);
}
DeferredLayerUpdater* OpenGLPipeline::createTextureLayer() {
mEglManager.initialize();
- Layer* layer = new Layer(mRenderThread.renderState(), 0, 0);
+ GlLayer* layer = new GlLayer(mRenderThread.renderState(), 0, 0);
Caches::getInstance().textureState().activateTexture(0);
layer->generateTexture();
diff --git a/libs/hwui/renderthread/VulkanManager.cpp b/libs/hwui/renderthread/VulkanManager.cpp
index 68c04af..454ce4d 100644
--- a/libs/hwui/renderthread/VulkanManager.cpp
+++ b/libs/hwui/renderthread/VulkanManager.cpp
@@ -19,6 +19,8 @@
#include "DeviceInfo.h"
#include "Properties.h"
#include "RenderThread.h"
+#include "renderstate/RenderState.h"
+#include "utils/FatVector.h"
#include <GrContext.h>
#include <GrTypes.h>
@@ -37,10 +39,14 @@
void VulkanManager::destroy() {
if (!hasVkContext()) return;
+ mRenderThread.renderState().onVkContextDestroyed();
+ mRenderThread.setGrContext(nullptr);
+
if (VK_NULL_HANDLE != mCommandPool) {
mDestroyCommandPool(mBackendContext->fDevice, mCommandPool, nullptr);
mCommandPool = VK_NULL_HANDLE;
}
+ mBackendContext.reset();
}
void VulkanManager::initialize() {
@@ -105,6 +111,8 @@
if (Properties::enablePartialUpdates && Properties::useBufferAge) {
mSwapBehavior = SwapBehavior::BufferAge;
}
+
+ mRenderThread.renderState().onVkContextCreated();
}
// Returns the next BackbufferInfo to use for the next draw. The function will make sure all
@@ -156,6 +164,9 @@
if (!createSwapchain(surface)) {
return nullptr;
}
+ backbuffer = getAvailableBackbuffer(surface);
+ res = mResetFences(mBackendContext->fDevice, 2, backbuffer->mUsageFences);
+ SkASSERT(VK_SUCCESS == res);
// acquire the image
res = mAcquireNextImageKHR(mBackendContext->fDevice, surface->mSwapchain, UINT64_MAX,
@@ -371,10 +382,9 @@
return false;
}
- SkAutoMalloc surfaceFormatAlloc(surfaceFormatCount * sizeof(VkSurfaceFormatKHR));
- VkSurfaceFormatKHR* surfaceFormats = (VkSurfaceFormatKHR*)surfaceFormatAlloc.get();
+ FatVector<VkSurfaceFormatKHR, 4> surfaceFormats(surfaceFormatCount);
res = mGetPhysicalDeviceSurfaceFormatsKHR(mBackendContext->fPhysicalDevice, surface->mVkSurface,
- &surfaceFormatCount, surfaceFormats);
+ &surfaceFormatCount, surfaceFormats.data());
if (VK_SUCCESS != res) {
return false;
}
@@ -386,10 +396,9 @@
return false;
}
- SkAutoMalloc presentModeAlloc(presentModeCount * sizeof(VkPresentModeKHR));
- VkPresentModeKHR* presentModes = (VkPresentModeKHR*)presentModeAlloc.get();
+ FatVector<VkPresentModeKHR, VK_PRESENT_MODE_RANGE_SIZE_KHR> presentModes(presentModeCount);
res = mGetPhysicalDeviceSurfacePresentModesKHR(mBackendContext->fPhysicalDevice,
- surface->mVkSurface, &presentModeCount, presentModes);
+ surface->mVkSurface, &presentModeCount, presentModes.data());
if (VK_SUCCESS != res) {
return false;
}
diff --git a/libs/hwui/tests/macrobench/TestSceneRunner.cpp b/libs/hwui/tests/macrobench/TestSceneRunner.cpp
index f3b7b51..396e896 100644
--- a/libs/hwui/tests/macrobench/TestSceneRunner.cpp
+++ b/libs/hwui/tests/macrobench/TestSceneRunner.cpp
@@ -23,8 +23,8 @@
#include "renderthread/RenderTask.h"
#include <benchmark/benchmark.h>
-#include <cutils/log.h>
#include <gui/Surface.h>
+#include <log/log.h>
#include <ui/PixelFormat.h>
using namespace android;
diff --git a/libs/hwui/tests/unit/DeferredLayerUpdaterTests.cpp b/libs/hwui/tests/unit/DeferredLayerUpdaterTests.cpp
index 0326aa9..f1b8882 100644
--- a/libs/hwui/tests/unit/DeferredLayerUpdaterTests.cpp
+++ b/libs/hwui/tests/unit/DeferredLayerUpdaterTests.cpp
@@ -15,6 +15,7 @@
*/
#include "DeferredLayerUpdater.h"
+#include "GlLayer.h"
#include "renderthread/OpenGLPipeline.h"
#include "tests/common/TestUtils.h"
@@ -32,7 +33,10 @@
// updates are deferred so the backing layer should still be in its default state
- EXPECT_EQ((uint32_t)GL_NONE, layerUpdater->backingLayer()->getRenderTarget());
+ if (layerUpdater->backingLayer()->getApi() == Layer::Api::OpenGL) {
+ GlLayer* glLayer = static_cast<GlLayer*>(layerUpdater->backingLayer());
+ EXPECT_EQ((uint32_t)GL_NONE, glLayer->getRenderTarget());
+ }
EXPECT_EQ(0u, layerUpdater->backingLayer()->getWidth());
EXPECT_EQ(0u, layerUpdater->backingLayer()->getHeight());
EXPECT_FALSE(layerUpdater->backingLayer()->getForceFilter());
@@ -45,7 +49,10 @@
layerUpdater->updateLayer(true, GL_TEXTURE_EXTERNAL_OES, scaledMatrix.data);
// the backing layer should now have all the properties applied.
- EXPECT_EQ((uint32_t)GL_TEXTURE_EXTERNAL_OES, layerUpdater->backingLayer()->getRenderTarget());
+ if (layerUpdater->backingLayer()->getApi() == Layer::Api::OpenGL) {
+ GlLayer* glLayer = static_cast<GlLayer*>(layerUpdater->backingLayer());
+ EXPECT_EQ((uint32_t)GL_TEXTURE_EXTERNAL_OES, glLayer->getRenderTarget());
+ }
EXPECT_EQ(100u, layerUpdater->backingLayer()->getWidth());
EXPECT_EQ(100u, layerUpdater->backingLayer()->getHeight());
EXPECT_TRUE(layerUpdater->backingLayer()->getForceFilter());
diff --git a/libs/hwui/tests/unit/FrameBuilderTests.cpp b/libs/hwui/tests/unit/FrameBuilderTests.cpp
index 21394ae..71c7516 100644
--- a/libs/hwui/tests/unit/FrameBuilderTests.cpp
+++ b/libs/hwui/tests/unit/FrameBuilderTests.cpp
@@ -19,6 +19,7 @@
#include <BakedOpState.h>
#include <DeferredLayerUpdater.h>
#include <FrameBuilder.h>
+#include <GlLayer.h>
#include <LayerUpdateQueue.h>
#include <RecordedOp.h>
#include <RecordingCanvas.h>
@@ -698,7 +699,10 @@
RENDERTHREAD_TEST(FrameBuilder, textureLayer_reject) {
auto layerUpdater = TestUtils::createTextureLayerUpdater(renderThread, 100, 100,
SkMatrix::MakeTrans(5, 5));
- layerUpdater->backingLayer()->setRenderTarget(GL_NONE); // Should be rejected
+ if (layerUpdater->backingLayer()->getApi() != Layer::Api::OpenGL) return;
+
+ GlLayer* glLayer = static_cast<GlLayer*>(layerUpdater->backingLayer());
+ glLayer->setRenderTarget(GL_NONE); // Should be rejected
auto node = TestUtils::createNode<RecordingCanvas>(0, 0, 200, 200,
[&layerUpdater](RenderProperties& props, RecordingCanvas& canvas) {
diff --git a/libs/hwui/tests/unit/GpuMemoryTrackerTests.cpp b/libs/hwui/tests/unit/GpuMemoryTrackerTests.cpp
index aa1dcb2..8cbd24e 100644
--- a/libs/hwui/tests/unit/GpuMemoryTrackerTests.cpp
+++ b/libs/hwui/tests/unit/GpuMemoryTrackerTests.cpp
@@ -51,7 +51,7 @@
TEST(GpuMemoryTracker, sizeCheck) {
destroyEglContext();
- GpuMemoryTracker::onGLContextCreated();
+ GpuMemoryTracker::onGpuContextCreated();
ASSERT_EQ(0, GpuMemoryTracker::getTotalSize(GpuObjectType::Texture));
ASSERT_EQ(0, GpuMemoryTracker::getInstanceCount(GpuObjectType::Texture));
{
@@ -66,5 +66,5 @@
}
ASSERT_EQ(0, GpuMemoryTracker::getTotalSize(GpuObjectType::Texture));
ASSERT_EQ(0, GpuMemoryTracker::getInstanceCount(GpuObjectType::Texture));
- GpuMemoryTracker::onGLContextDestroyed();
+ GpuMemoryTracker::onGpuContextDestroyed();
}
diff --git a/libs/hwui/tests/unit/RenderNodeDrawableTests.cpp b/libs/hwui/tests/unit/RenderNodeDrawableTests.cpp
index 0906cc8..f5ff058 100644
--- a/libs/hwui/tests/unit/RenderNodeDrawableTests.cpp
+++ b/libs/hwui/tests/unit/RenderNodeDrawableTests.cpp
@@ -392,7 +392,7 @@
sk_sp<SkSurface> onNewSurface(const SkImageInfo&) override {
return sk_sp<SkSurface>();
}
- sk_sp<SkImage> onNewImageSnapshot(SkBudgeted, SkCopyPixelsMode) override {
+ sk_sp<SkImage> onNewImageSnapshot(SkBudgeted) override {
return sk_sp<SkImage>();
}
void onCopyOnWrite(ContentChangeMode) override {}
diff --git a/libs/hwui/tests/unit/SkiaPipelineTests.cpp b/libs/hwui/tests/unit/SkiaPipelineTests.cpp
index f3a663e..494585a 100644
--- a/libs/hwui/tests/unit/SkiaPipelineTests.cpp
+++ b/libs/hwui/tests/unit/SkiaPipelineTests.cpp
@@ -201,16 +201,16 @@
template <typename T>
class DeferLayer : public SkSurface_Base {
public:
- DeferLayer()
- : SkSurface_Base(T().imageInfo(), nullptr) {
- }
+ DeferLayer() : SkSurface_Base(T().imageInfo(), nullptr) {}
+ virtual ~DeferLayer() {}
+
SkCanvas* onNewCanvas() override {
return new T();
}
sk_sp<SkSurface> onNewSurface(const SkImageInfo&) override {
return sk_sp<SkSurface>();
}
- sk_sp<SkImage> onNewImageSnapshot(SkBudgeted, SkCopyPixelsMode) override {
+ sk_sp<SkImage> onNewImageSnapshot(SkBudgeted) override {
return sk_sp<SkImage>();
}
T* canvas() { return static_cast<T*>(getCanvas()); }
diff --git a/libs/hwui/utils/GLUtils.h b/libs/hwui/utils/GLUtils.h
index 94818b2..c127478 100644
--- a/libs/hwui/utils/GLUtils.h
+++ b/libs/hwui/utils/GLUtils.h
@@ -18,7 +18,7 @@
#include "Debug.h"
-#include <cutils/log.h>
+#include <log/log.h>
namespace android {
namespace uirenderer {
diff --git a/libs/input/PointerController.cpp b/libs/input/PointerController.cpp
index 0b22ad5..7c60467 100644
--- a/libs/input/PointerController.cpp
+++ b/libs/input/PointerController.cpp
@@ -15,7 +15,6 @@
*/
#define LOG_TAG "PointerController"
-
//#define LOG_NDEBUG 0
// Log debug messages about pointer updates
@@ -23,8 +22,9 @@
#include "PointerController.h"
-#include <cutils/log.h>
+#include <log/log.h>
+// ToDo: Fix code to be warning free
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
#include <SkBitmap.h>
diff --git a/libs/input/SpriteController.cpp b/libs/input/SpriteController.cpp
index 18ebd47..4991f04 100644
--- a/libs/input/SpriteController.cpp
+++ b/libs/input/SpriteController.cpp
@@ -15,15 +15,15 @@
*/
#define LOG_TAG "Sprites"
-
//#define LOG_NDEBUG 0
#include "SpriteController.h"
-#include <cutils/log.h>
+#include <log/log.h>
#include <utils/String8.h>
#include <gui/Surface.h>
+// ToDo: Fix code to be warning free
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
#include <SkBitmap.h>
diff --git a/media/java/android/media/AudioManagerInternal.java b/media/java/android/media/AudioManagerInternal.java
index ac59ace..b60dbd5 100644
--- a/media/java/android/media/AudioManagerInternal.java
+++ b/media/java/android/media/AudioManagerInternal.java
@@ -41,8 +41,6 @@
public abstract void setRingerModeInternal(int ringerMode, String caller);
- public abstract int getVolumeControllerUid();
-
public abstract void updateRingerModeAffectedStreamsInternal();
public interface RingerModeDelegate {
diff --git a/media/java/android/media/ExternalRingtonesCursorWrapper.java b/media/java/android/media/ExternalRingtonesCursorWrapper.java
new file mode 100644
index 0000000..dd4c77a
--- /dev/null
+++ b/media/java/android/media/ExternalRingtonesCursorWrapper.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2016 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.content.ContentProvider;
+import android.database.Cursor;
+import android.database.CursorWrapper;
+import android.net.Uri;
+
+/**
+ * Cursor that adds the user id to fetched URIs. This is especially useful for {@link getCursor} as
+ * a managed profile should also list its parent's ringtones
+ *
+ * @hide
+ */
+public class ExternalRingtonesCursorWrapper extends CursorWrapper {
+
+ private int mUserId;
+
+ public ExternalRingtonesCursorWrapper(Cursor cursor, int userId) {
+ super(cursor);
+ mUserId = userId;
+ }
+
+ public String getString(int index) {
+ String result = super.getString(index);
+ if (index == RingtoneManager.URI_COLUMN_INDEX) {
+ result = ContentProvider.maybeAddUserId(Uri.parse(result), mUserId).toString();
+ }
+ return result;
+ }
+}
diff --git a/media/java/android/media/RingtoneManager.java b/media/java/android/media/RingtoneManager.java
index de9f020..7614999 100644
--- a/media/java/android/media/RingtoneManager.java
+++ b/media/java/android/media/RingtoneManager.java
@@ -17,9 +17,11 @@
package android.media;
import android.Manifest;
+import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
+import android.annotation.WorkerThread;
import android.app.Activity;
import android.content.ContentProvider;
import android.content.ContentResolver;
@@ -28,6 +30,7 @@
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.database.Cursor;
+import android.media.MediaScannerConnection.MediaScannerConnectionClient;
import android.net.Uri;
import android.os.Environment;
import android.os.ParcelFileDescriptor;
@@ -43,11 +46,16 @@
import libcore.io.Streams;
+import java.io.Closeable;
+import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.LinkedBlockingQueue;
import static android.content.ContentProvider.maybeAddUserId;
import static android.content.pm.PackageManager.NameNotFoundException;
@@ -253,6 +261,8 @@
private boolean mStopPreviousRingtone = true;
private Ringtone mPreviousRingtone;
+ private boolean mIncludeParentRingtones;
+
/**
* Constructs a RingtoneManager. This constructor is recommended as its
* constructed instance manages cursor(s).
@@ -260,9 +270,24 @@
* @param activity The activity used to get a managed cursor.
*/
public RingtoneManager(Activity activity) {
+ this(activity, /* includeParentRingtones */ false);
+ }
+
+ /**
+ * Constructs a RingtoneManager. This constructor is recommended if there's the need to also
+ * list ringtones from the user's parent.
+ *
+ * @param activity The activity used to get a managed cursor.
+ * @param includeParentRingtones if true, this ringtone manager's cursor will also retrieve
+ * ringtones from the parent of the user specified in the given activity
+ *
+ * @hide
+ */
+ public RingtoneManager(Activity activity, boolean includeParentRingtones) {
mActivity = activity;
mContext = activity;
setType(mType);
+ mIncludeParentRingtones = includeParentRingtones;
}
/**
@@ -273,9 +298,23 @@
* @param context The context to used to get a cursor.
*/
public RingtoneManager(Context context) {
+ this(context, /* includeParentRingtones */ false);
+ }
+
+ /**
+ * Constructs a RingtoneManager.
+ *
+ * @param context The context to used to get a cursor.
+ * @param includeParentRingtones if true, this ringtone manager's cursor will also retrieve
+ * ringtones from the parent of the user specified in the given context
+ *
+ * @hide
+ */
+ public RingtoneManager(Context context, boolean includeParentRingtones) {
mActivity = null;
mContext = context;
setType(mType);
+ mIncludeParentRingtones = includeParentRingtones;
}
/**
@@ -395,14 +434,38 @@
if (mCursor != null && mCursor.requery()) {
return mCursor;
}
-
- final Cursor internalCursor = getInternalRingtones();
- final Cursor mediaCursor = getMediaRingtones();
-
- return mCursor = new SortCursor(new Cursor[] { internalCursor, mediaCursor },
+
+ ArrayList<Cursor> ringtoneCursors = new ArrayList<Cursor>();
+ ringtoneCursors.add(getInternalRingtones());
+ ringtoneCursors.add(getMediaRingtones());
+
+ if (mIncludeParentRingtones) {
+ Cursor parentRingtonesCursor = getParentProfileRingtones();
+ if (parentRingtonesCursor != null) {
+ ringtoneCursors.add(parentRingtonesCursor);
+ }
+ }
+
+ return mCursor = new SortCursor(ringtoneCursors.toArray(new Cursor[ringtoneCursors.size()]),
MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
}
+ private Cursor getParentProfileRingtones() {
+ final UserManager um = UserManager.get(mContext);
+ final UserInfo parentInfo = um.getProfileParent(mContext.getUserId());
+ if (parentInfo != null && parentInfo.id != mContext.getUserId()) {
+ final Context parentContext = createPackageContextAsUser(mContext, parentInfo.id);
+ if (parentContext != null) {
+ // We don't need to re-add the internal ringtones for the work profile since
+ // they are the same as the personal profile. We just need the external
+ // ringtones.
+ return new ExternalRingtonesCursorWrapper(getMediaRingtones(parentContext),
+ parentInfo.id);
+ }
+ }
+ return null;
+ }
+
/**
* Gets a {@link Ringtone} for the ringtone at the given position in the
* {@link Cursor}.
@@ -434,7 +497,35 @@
return getUriFromCursor(mCursor);
}
-
+
+ /**
+ * Queries the database for the Uri to a ringtone in a specific path (the ringtone has to have
+ * been scanned before)
+ *
+ * @param context Context used to query the database
+ * @param path Path to the ringtone file
+ * @return Uri of the ringtone, null if something fails in the query or the ringtone doesn't
+ * exist
+ *
+ * @hide
+ */
+ private static Uri getExistingRingtoneUriFromPath(Context context, String path) {
+ final String[] proj = {MediaStore.Audio.Media._ID};
+ final String[] selectionArgs = {path};
+ try (final Cursor cursor = context.getContentResolver().query(
+ MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, proj,
+ MediaStore.Audio.Media.DATA + "=? ", selectionArgs, /* sortOrder */ null)) {
+ if (cursor == null || !cursor.moveToFirst()) {
+ return null;
+ }
+ final int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
+ if (id == -1) {
+ return null;
+ }
+ return Uri.withAppendedPath(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, "" + id);
+ }
+ }
+
private static Uri getUriFromCursor(Cursor cursor) {
return ContentUris.withAppendedId(Uri.parse(cursor.getString(URI_COLUMN_INDEX)), cursor
.getLong(ID_COLUMN_INDEX));
@@ -523,7 +614,11 @@
}
private Cursor getMediaRingtones() {
- if (PackageManager.PERMISSION_GRANTED != mContext.checkPermission(
+ return getMediaRingtones(mContext);
+ }
+
+ private Cursor getMediaRingtones(Context context) {
+ if (PackageManager.PERMISSION_GRANTED != context.checkPermission(
android.Manifest.permission.READ_EXTERNAL_STORAGE,
Process.myPid(), Process.myUid())) {
Log.w(TAG, "No READ_EXTERNAL_STORAGE permission, ignoring ringtones on ext storage");
@@ -537,7 +632,7 @@
? query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, MEDIA_COLUMNS,
constructBooleanTrueWhereClause(mFilterColumns), null,
- MediaStore.Audio.Media.DEFAULT_SORT_ORDER)
+ MediaStore.Audio.Media.DEFAULT_SORT_ORDER, context)
: null;
}
@@ -592,10 +687,19 @@
String selection,
String[] selectionArgs,
String sortOrder) {
+ return query(uri, projection, selection, selectionArgs, sortOrder, mContext);
+ }
+
+ private Cursor query(Uri uri,
+ String[] projection,
+ String selection,
+ String[] selectionArgs,
+ String sortOrder,
+ Context context) {
if (mActivity != null) {
return mActivity.managedQuery(uri, projection, selection, selectionArgs, sortOrder);
} else {
- return mContext.getContentResolver().query(uri, projection, selection, selectionArgs,
+ return context.getContentResolver().query(uri, projection, selection, selectionArgs,
sortOrder);
}
}
@@ -642,7 +746,29 @@
return null;
}
-
+
+ /**
+ * Look up the path for a given {@link Uri} referring to a ringtone sound (TYPE_RINGTONE,
+ * TYPE_NOTIFICATION, or TYPE_ALARM). This is saved in {@link MediaStore.Audio.Media#DATA}.
+ *
+ * @return a {@link File} pointing at the location of the {@param uri} on disk, or {@code null}
+ * if there is no such file.
+ */
+ private File getRingtonePathFromUri(Uri uri) {
+ // Query cursor to get ringtone path
+ final String[] projection = {MediaStore.Audio.Media.DATA};
+ setFilterColumnsList(TYPE_RINGTONE | TYPE_NOTIFICATION | TYPE_ALARM);
+
+ String path = null;
+ try (Cursor cursor = query(uri, projection, constructBooleanTrueWhereClause(mFilterColumns),
+ null, null)) {
+ if (cursor != null && cursor.moveToFirst()) {
+ path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
+ }
+ }
+ return path != null ? new File(path) : null;
+ }
+
/**
* Disables Settings.System.SYNC_PARENT_SOUNDS, copying the parent's ringtones to the current
* profile
@@ -659,17 +785,14 @@
UserManager um = UserManager.get(userContext);
UserInfo parentInfo = um.getProfileParent(userContext.getUserId());
if (parentInfo != null) {
- try {
- Context targetContext = userContext.createPackageContextAsUser(
- userContext.getPackageName(), 0 /* flags */, UserHandle.of(parentInfo.id));
+ final Context targetContext = createPackageContextAsUser(userContext, parentInfo.id);
+ if (targetContext != null) {
for (int ringtoneType : RINGTONE_TYPES) {
Uri ringtoneUri = getActualDefaultRingtoneUri(targetContext, ringtoneType);
// Add user id of parent so that custom ringtones can be read and played
RingtoneManager.setActualDefaultRingtoneUri(userContext, ringtoneType,
maybeAddUserId(ringtoneUri, parentInfo.id));
}
- } catch (NameNotFoundException e) {
- Log.e(TAG, "Unable to create parent context", e);
}
}
}
@@ -749,9 +872,157 @@
}
private static boolean isInternalRingtoneUri(Uri uri) {
- Uri uriWithoutUserId = ContentProvider.getUriWithoutUserId(uri);
- return uriWithoutUserId == null ? false : uriWithoutUserId.toString()
- .startsWith(MediaStore.Audio.Media.INTERNAL_CONTENT_URI.toString());
+ return isRingtoneUriInStorage(uri, MediaStore.Audio.Media.INTERNAL_CONTENT_URI);
+ }
+
+ private static boolean isExternalRingtoneUri(Uri uri) {
+ return isRingtoneUriInStorage(uri, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
+ }
+
+ private static boolean isRingtoneUriInStorage(Uri ringtone, Uri storage) {
+ Uri uriWithoutUserId = ContentProvider.getUriWithoutUserId(ringtone);
+ return uriWithoutUserId == null ? false
+ : uriWithoutUserId.toString().startsWith(storage.toString());
+ }
+
+ /** @hide */
+ public boolean isCustomRingtone(Uri uri) {
+ if(!isExternalRingtoneUri(uri)) {
+ // A custom ringtone would be in the external storage
+ return false;
+ }
+
+ final File ringtoneFile = (uri == null ? null : getRingtonePathFromUri(uri));
+ final File parent = (ringtoneFile == null ? null : ringtoneFile.getParentFile());
+ if (parent == null) {
+ return false;
+ }
+
+ final String[] directories = {
+ Environment.DIRECTORY_RINGTONES,
+ Environment.DIRECTORY_NOTIFICATIONS,
+ Environment.DIRECTORY_ALARMS
+ };
+ for (final String directory : directories) {
+ if (parent.equals(Environment.getExternalStoragePublicDirectory(directory))) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Adds an audio file to the list of ringtones.
+ *
+ * After making sure the given file is an audio file, copies the file to the ringtone storage,
+ * and asks the {@link android.media.MediaScanner} to scan that file. This call will block until
+ * the scan is completed.
+ *
+ * The directory where the copied file is stored is the directory that matches the ringtone's
+ * type, which is one of: {@link android.is.Environment#DIRECTORY_RINGTONES};
+ * {@link android.is.Environment#DIRECTORY_NOTIFICATIONS};
+ * {@link android.is.Environment#DIRECTORY_ALARMS}.
+ *
+ * This does not allow modifying the type of an existing ringtone file. To change type, use the
+ * APIs in {@link android.content.ContentResolver} to update the corresponding columns.
+ *
+ * @param fileUri Uri of the file to be added as ringtone. Must be a media file.
+ * @param type The type of the ringtone to be added. Must be one of {@link #TYPE_RINGTONE},
+ * {@link #TYPE_NOTIFICATION}, or {@link #TYPE_ALARM}.
+ *
+ * @return The Uri of the installed ringtone, which may be the Uri of {@param fileUri} if it is
+ * already in ringtone storage.
+ *
+ * @throws FileNotFoundexception if an appropriate unique filename to save the new ringtone file
+ * as cannot be found, for example if the unique name is too long.
+ * @throws IllegalArgumentException if {@param fileUri} does not point to an existing audio
+ * file, or if the {@param type} is not one of the accepted ringtone types.
+ * @throws IOException if the audio file failed to copy to ringtone storage; for example, if
+ * external storage was not available, or if the file was copied but the media scanner
+ * did not recognize it as a ringtone.
+ *
+ * @hide
+ */
+ @WorkerThread
+ public Uri addCustomExternalRingtone(@NonNull final Uri fileUri, final int type)
+ throws FileNotFoundException, IllegalArgumentException, IOException {
+ if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
+ throw new IOException("External storage is not mounted. Unable to install ringtones.");
+ }
+
+ // Sanity-check: are we actually being asked to install an audio file?
+ final String mimeType = mContext.getContentResolver().getType(fileUri);
+ if(mimeType == null || !mimeType.startsWith("audio/")) {
+ throw new IllegalArgumentException("Ringtone file must have MIME type \"audio/*\"."
+ + " Given file has MIME type \"" + mimeType + "\"");
+ }
+
+ // Choose a directory to save the ringtone. Only one type of installation at a time is
+ // allowed. Throws IllegalArgumentException if anything else is given.
+ final String subdirectory = getExternalDirectoryForType(type);
+
+ // Find a filename. Throws FileNotFoundException if none can be found.
+ final File outFile = Utils.getUniqueExternalFile(mContext, subdirectory,
+ Utils.getFileDisplayNameFromUri(mContext, fileUri), mimeType);
+
+ // Copy contents to external ringtone storage. Throws IOException if the copy fails.
+ try (final InputStream input = mContext.getContentResolver().openInputStream(fileUri);
+ final OutputStream output = new FileOutputStream(outFile)) {
+ Streams.copy(input, output);
+ }
+
+ // Tell MediaScanner about the new file. Wait for it to assign a {@link Uri}.
+ try (NewRingtoneScanner scanner = new NewRingtoneScanner(outFile)) {
+ return scanner.take();
+ } catch (InterruptedException e) {
+ throw new IOException("Audio file failed to scan as a ringtone", e);
+ }
+ }
+
+ private static final String getExternalDirectoryForType(final int type) {
+ switch (type) {
+ case TYPE_RINGTONE:
+ return Environment.DIRECTORY_RINGTONES;
+ case TYPE_NOTIFICATION:
+ return Environment.DIRECTORY_NOTIFICATIONS;
+ case TYPE_ALARM:
+ return Environment.DIRECTORY_ALARMS;
+ default:
+ throw new IllegalArgumentException("Unsupported ringtone type: " + type);
+ }
+ }
+
+ /**
+ * Deletes the actual file in the Uri and its ringtone database entry if the Uri's actual path
+ * is in one of the following directories: {@link android.is.Environment#DIRECTORY_RINGTONES},
+ * {@link android.is.Environment#DIRECTORY_NOTIFICATIONS} or
+ * {@link android.is.Environment#DIRECTORY_ALARMS}.
+ *
+ * The given Uri must be a ringtone Content Uri.
+ *
+ * Keep in mind that if the ringtone deleted is a default ringtone, it will still live in the
+ * ringtone cache file so it will be playable from there. However, if an app uses the ringtone
+ * as its own ringtone, it won't be played, which is the same behavior observed for 3rd party
+ * custom ringtones.
+ *
+ * @hide
+ */
+ public boolean deleteExternalRingtone(Uri uri) {
+ if(!isCustomRingtone(uri)) {
+ // We can only delete custom ringtones in the default ringtone storages
+ return false;
+ }
+
+ // Save the path of the ringtone before deleting from our content resolver.
+ final File ringtoneFile = getRingtonePathFromUri(uri);
+ try {
+ if (ringtoneFile != null && mContext.getContentResolver().delete(uri, null, null) > 0) {
+ return ringtoneFile.delete();
+ }
+ } catch (SecurityException e) {
+ Log.d(TAG, "Unable to delete custom ringtone", e);
+ }
+ return false;
}
/**
@@ -860,5 +1131,67 @@
return null;
}
}
-
+
+ /**
+ * Creates a {@link android.media.MediaScannerConnection} to scan a ringtone file and add its
+ * information to the internal database.
+ *
+ * It uses a {@link java.util.concurrent.LinkedBlockingQueue} so that the caller can block until
+ * the scan is completed.
+ */
+ private class NewRingtoneScanner implements Closeable, MediaScannerConnectionClient {
+ private MediaScannerConnection mMediaScannerConnection;
+ private File mFile;
+ private LinkedBlockingQueue<Uri> mQueue = new LinkedBlockingQueue<>(1);
+
+ public NewRingtoneScanner(File file) {
+ mFile = file;
+ mMediaScannerConnection = new MediaScannerConnection(mContext, this);
+ mMediaScannerConnection.connect();
+ }
+
+ @Override
+ public void close() {
+ mMediaScannerConnection.disconnect();
+ }
+
+ @Override
+ public void onMediaScannerConnected() {
+ mMediaScannerConnection.scanFile(mFile.getAbsolutePath(), null);
+ }
+
+ @Override
+ public void onScanCompleted(String path, Uri uri) {
+ if (uri == null) {
+ // There was some issue with scanning. Delete the copied file so it is not oprhaned.
+ mFile.delete();
+ return;
+ }
+ try {
+ mQueue.put(uri);
+ } catch (InterruptedException e) {
+ Log.e(TAG, "Unable to put new ringtone Uri in queue", e);
+ }
+ }
+
+ public Uri take() throws InterruptedException {
+ return mQueue.take();
+ }
+ }
+
+ /**
+ * Attempts to create a context for the given user.
+ *
+ * @return created context, or null if package does not exist
+ * @hide
+ */
+ private static Context createPackageContextAsUser(Context context, int userId) {
+ try {
+ return context.createPackageContextAsUser(context.getPackageName(), 0 /* flags */,
+ UserHandle.of(userId));
+ } catch (NameNotFoundException e) {
+ Log.e(TAG, "Unable to create package context", e);
+ return null;
+ }
+ }
}
diff --git a/media/java/android/media/Utils.java b/media/java/android/media/Utils.java
index 35b083e..5b62f16 100644
--- a/media/java/android/media/Utils.java
+++ b/media/java/android/media/Utils.java
@@ -16,12 +16,21 @@
package android.media;
+import android.content.Context;
+import android.content.ContentResolver;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Environment;
+import android.os.FileUtils;
+import android.provider.OpenableColumns;
import android.util.Log;
import android.util.Pair;
import android.util.Range;
import android.util.Rational;
import android.util.Size;
+import java.io.File;
+import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Vector;
@@ -307,4 +316,66 @@
Log.w(TAG, "could not parse size range '" + o + "'");
return null;
}
+
+ /**
+ * Creates a unique file in the specified external storage with the desired name. If the name is
+ * taken, the new file's name will have '(%d)' to avoid overwriting files.
+ *
+ * @param context {@link Context} to query the file name from.
+ * @param subdirectory One of the directories specified in {@link android.os.Environment}
+ * @param fileName desired name for the file.
+ * @param mimeType MIME type of the file to create.
+ * @return the File object in the storage, or null if an error occurs.
+ */
+ public static File getUniqueExternalFile(Context context, String subdirectory, String fileName,
+ String mimeType) {
+ File externalStorage = Environment.getExternalStoragePublicDirectory(subdirectory);
+ // Make sure the storage subdirectory exists
+ externalStorage.mkdirs();
+
+ File outFile = null;
+ try {
+ // Ensure the file has a unique name, as to not override any existing file
+ outFile = FileUtils.buildUniqueFile(externalStorage, mimeType, fileName);
+ } catch (FileNotFoundException e) {
+ // This might also be reached if the number of repeated files gets too high
+ Log.e(TAG, "Unable to get a unique file name: " + e);
+ return null;
+ }
+ return outFile;
+ }
+
+ /**
+ * Returns a file's display name from its {@link android.content.ContentResolver.SCHEME_FILE}
+ * or {@link android.content.ContentResolver.SCHEME_CONTENT} Uri. The display name of a file
+ * includes its extension.
+ *
+ * @param context Context trying to resolve the file's display name.
+ * @param uri Uri of the file.
+ * @return the file's display name, or the uri's string if something fails or the uri isn't in
+ * the schemes specified above.
+ */
+ static String getFileDisplayNameFromUri(Context context, Uri uri) {
+ String scheme = uri.getScheme();
+
+ if (ContentResolver.SCHEME_FILE.equals(scheme)) {
+ return uri.getLastPathSegment();
+ } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {
+ // We need to query the ContentResolver to get the actual file name as the Uri masks it.
+ // This means we want the name used for display purposes only.
+ String[] proj = {
+ OpenableColumns.DISPLAY_NAME
+ };
+ try (Cursor cursor = context.getContentResolver().query(uri, proj, null, null, null)) {
+ if (cursor != null && cursor.getCount() != 0) {
+ cursor.moveToFirst();
+ return cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
+ }
+ }
+ }
+
+ // This will only happen if the Uri isn't either SCHEME_CONTENT or SCHEME_FILE, so we assume
+ // it already represents the file's name.
+ return uri.toString();
+ }
}
diff --git a/media/mca/filterpacks/native/base/geometry.cpp b/media/mca/filterpacks/native/base/geometry.cpp
index 7812d502..44b13e4 100644
--- a/media/mca/filterpacks/native/base/geometry.cpp
+++ b/media/mca/filterpacks/native/base/geometry.cpp
@@ -13,10 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+#define LOG_TAG "geometry"
-#include <cutils/log.h>
#include <cmath>
+#include <log/log.h>
+
#include "geometry.h"
namespace android {
diff --git a/media/mca/filterpacks/native/base/time_util.cpp b/media/mca/filterpacks/native/base/time_util.cpp
index 1a78a95..7d383df 100644
--- a/media/mca/filterpacks/native/base/time_util.cpp
+++ b/media/mca/filterpacks/native/base/time_util.cpp
@@ -13,14 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+#define LOG_TAG "time_util"
#include "time_util.h"
#include "utilities.h"
-#include <cutils/log.h>
#include <sys/time.h>
#include <map>
+#include <log/log.h>
+
namespace android {
namespace filterfw {
diff --git a/native/android/Android.bp b/native/android/Android.bp
index 33c9655..5843637 100644
--- a/native/android/Android.bp
+++ b/native/android/Android.bp
@@ -17,4 +17,5 @@
name: "libandroid.ndk",
symbol_file: "libandroid.map.txt",
first_version: "9",
+ unversioned_until: "current",
}
diff --git a/native/graphics/jni/Android.bp b/native/graphics/jni/Android.bp
index e09b0b4..17feb53 100644
--- a/native/graphics/jni/Android.bp
+++ b/native/graphics/jni/Android.bp
@@ -17,4 +17,5 @@
name: "libjnigraphics.ndk",
symbol_file: "libjnigraphics.map.txt",
first_version: "9",
+ unversioned_until: "current",
}
diff --git a/opengl/java/android/opengl/GLSurfaceView.java b/opengl/java/android/opengl/GLSurfaceView.java
index 4154ef0..329514c 100644
--- a/opengl/java/android/opengl/GLSurfaceView.java
+++ b/opengl/java/android/opengl/GLSurfaceView.java
@@ -542,16 +542,27 @@
}
/**
- * This method is part of the SurfaceHolder.Callback interface, and is
+ * This method is part of the SurfaceHolder.Callback2 interface, and is
* not normally called or subclassed by clients of GLSurfaceView.
*/
@Override
- public void surfaceRedrawNeeded(SurfaceHolder holder) {
+ public void surfaceRedrawNeededAsync(SurfaceHolder holder, Runnable finishDrawing) {
if (mGLThread != null) {
- mGLThread.requestRenderAndWait();
+ mGLThread.requestRenderAndNotify(finishDrawing);
}
}
+ /**
+ * This method is part of the SurfaceHolder.Callback2 interface, and is
+ * not normally called or subclassed by clients of GLSurfaceView.
+ */
+ @Deprecated
+ @Override
+ public void surfaceRedrawNeeded(SurfaceHolder holder) {
+ // Since we are part of the framework we know only surfaceRedrawNeededAsync
+ // will be called.
+ }
+
/**
* Pause the rendering thread, optionally tearing down the EGL context
@@ -1305,6 +1316,7 @@
int w = 0;
int h = 0;
Runnable event = null;
+ Runnable finishDrawingRunnable = null;
while (true) {
synchronized (sGLThreadManager) {
@@ -1400,6 +1412,11 @@
sGLThreadManager.notifyAll();
}
+ if (mFinishDrawingRunnable != null) {
+ finishDrawingRunnable = mFinishDrawingRunnable;
+ mFinishDrawingRunnable = null;
+ }
+
// Ready to draw?
if (readyToDraw()) {
@@ -1453,7 +1470,6 @@
break;
}
}
-
// By design, this is the only place in a GLThread thread where we wait().
if (LOG_THREADS) {
Log.i("GLThread", "waiting tid=" + getId()
@@ -1546,6 +1562,10 @@
try {
Trace.traceBegin(Trace.TRACE_TAG_VIEW, "onDrawFrame");
view.mRenderer.onDrawFrame(gl);
+ if (finishDrawingRunnable != null) {
+ finishDrawingRunnable.run();
+ finishDrawingRunnable = null;
+ }
} finally {
Trace.traceEnd(Trace.TRACE_TAG_VIEW);
}
@@ -1625,7 +1645,7 @@
}
}
- public void requestRenderAndWait() {
+ public void requestRenderAndNotify(Runnable finishDrawing) {
synchronized(sGLThreadManager) {
// If we are already on the GL thread, this means a client callback
// has caused reentrancy, for example via updating the SurfaceView parameters.
@@ -1638,17 +1658,9 @@
mWantRenderNotification = true;
mRequestRender = true;
mRenderComplete = false;
+ mFinishDrawingRunnable = finishDrawing;
sGLThreadManager.notifyAll();
-
- while (!mExited && !mPaused && !mRenderComplete && ableToDraw()) {
- try {
- sGLThreadManager.wait();
- } catch (InterruptedException ex) {
- Thread.currentThread().interrupt();
- }
- }
-
}
}
@@ -1821,6 +1833,7 @@
private boolean mRenderComplete;
private ArrayList<Runnable> mEventQueue = new ArrayList<Runnable>();
private boolean mSizeChanged = true;
+ private Runnable mFinishDrawingRunnable = null;
// End of member variables protected by the sGLThreadManager monitor.
diff --git a/packages/BackupRestoreConfirmation/res/values-az-rAZ/strings.xml b/packages/BackupRestoreConfirmation/res/values-az/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-az-rAZ/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-az/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-be-rBY/strings.xml b/packages/BackupRestoreConfirmation/res/values-be/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-be-rBY/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-be/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-bn-rBD/strings.xml b/packages/BackupRestoreConfirmation/res/values-bn/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-bn-rBD/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-bn/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-bs-rBA/strings.xml b/packages/BackupRestoreConfirmation/res/values-bs/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-bs-rBA/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-bs/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-et-rEE/strings.xml b/packages/BackupRestoreConfirmation/res/values-et/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-et-rEE/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-et/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-eu-rES/strings.xml b/packages/BackupRestoreConfirmation/res/values-eu/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-eu-rES/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-eu/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-gl-rES/strings.xml b/packages/BackupRestoreConfirmation/res/values-gl/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-gl-rES/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-gl/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-gu-rIN/strings.xml b/packages/BackupRestoreConfirmation/res/values-gu/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-gu-rIN/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-gu/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-hy-rAM/strings.xml b/packages/BackupRestoreConfirmation/res/values-hy/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-hy-rAM/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-hy/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-is-rIS/strings.xml b/packages/BackupRestoreConfirmation/res/values-is/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-is-rIS/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-is/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-ka-rGE/strings.xml b/packages/BackupRestoreConfirmation/res/values-ka/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-ka-rGE/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-ka/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-kk-rKZ/strings.xml b/packages/BackupRestoreConfirmation/res/values-kk/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-kk-rKZ/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-kk/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-km-rKH/strings.xml b/packages/BackupRestoreConfirmation/res/values-km/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-km-rKH/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-km/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-kn-rIN/strings.xml b/packages/BackupRestoreConfirmation/res/values-kn/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-kn-rIN/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-kn/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-ky-rKG/strings.xml b/packages/BackupRestoreConfirmation/res/values-ky/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-ky-rKG/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-ky/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-lo-rLA/strings.xml b/packages/BackupRestoreConfirmation/res/values-lo/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-lo-rLA/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-lo/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-mk-rMK/strings.xml b/packages/BackupRestoreConfirmation/res/values-mk/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-mk-rMK/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-mk/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-ml-rIN/strings.xml b/packages/BackupRestoreConfirmation/res/values-ml/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-ml-rIN/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-ml/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-mn-rMN/strings.xml b/packages/BackupRestoreConfirmation/res/values-mn/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-mn-rMN/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-mn/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-mr-rIN/strings.xml b/packages/BackupRestoreConfirmation/res/values-mr/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-mr-rIN/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-mr/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-ms-rMY/strings.xml b/packages/BackupRestoreConfirmation/res/values-ms/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-ms-rMY/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-ms/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-my-rMM/strings.xml b/packages/BackupRestoreConfirmation/res/values-my/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-my-rMM/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-my/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-ne-rNP/strings.xml b/packages/BackupRestoreConfirmation/res/values-ne/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-ne-rNP/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-ne/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-pa-rIN/strings.xml b/packages/BackupRestoreConfirmation/res/values-pa/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-pa-rIN/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-pa/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-si-rLK/strings.xml b/packages/BackupRestoreConfirmation/res/values-si/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-si-rLK/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-si/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-sq-rAL/strings.xml b/packages/BackupRestoreConfirmation/res/values-sq/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-sq-rAL/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-sq/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-ta-rIN/strings.xml b/packages/BackupRestoreConfirmation/res/values-ta/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-ta-rIN/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-ta/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-te-rIN/strings.xml b/packages/BackupRestoreConfirmation/res/values-te/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-te-rIN/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-te/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-ur-rPK/strings.xml b/packages/BackupRestoreConfirmation/res/values-ur/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-ur-rPK/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-ur/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-uz-rUZ/strings.xml b/packages/BackupRestoreConfirmation/res/values-uz/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-uz-rUZ/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-uz/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-az-rAZ/strings.xml b/packages/CaptivePortalLogin/res/values-az/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-az-rAZ/strings.xml
rename to packages/CaptivePortalLogin/res/values-az/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-be-rBY/strings.xml b/packages/CaptivePortalLogin/res/values-be/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-be-rBY/strings.xml
rename to packages/CaptivePortalLogin/res/values-be/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-bn-rBD/strings.xml b/packages/CaptivePortalLogin/res/values-bn/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-bn-rBD/strings.xml
rename to packages/CaptivePortalLogin/res/values-bn/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-bs-rBA/strings.xml b/packages/CaptivePortalLogin/res/values-bs/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-bs-rBA/strings.xml
rename to packages/CaptivePortalLogin/res/values-bs/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-et-rEE/strings.xml b/packages/CaptivePortalLogin/res/values-et/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-et-rEE/strings.xml
rename to packages/CaptivePortalLogin/res/values-et/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-eu-rES/strings.xml b/packages/CaptivePortalLogin/res/values-eu/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-eu-rES/strings.xml
rename to packages/CaptivePortalLogin/res/values-eu/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-gl-rES/strings.xml b/packages/CaptivePortalLogin/res/values-gl/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-gl-rES/strings.xml
rename to packages/CaptivePortalLogin/res/values-gl/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-gu-rIN/strings.xml b/packages/CaptivePortalLogin/res/values-gu/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-gu-rIN/strings.xml
rename to packages/CaptivePortalLogin/res/values-gu/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-hy-rAM/strings.xml b/packages/CaptivePortalLogin/res/values-hy/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-hy-rAM/strings.xml
rename to packages/CaptivePortalLogin/res/values-hy/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-is-rIS/strings.xml b/packages/CaptivePortalLogin/res/values-is/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-is-rIS/strings.xml
rename to packages/CaptivePortalLogin/res/values-is/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-ka-rGE/strings.xml b/packages/CaptivePortalLogin/res/values-ka/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-ka-rGE/strings.xml
rename to packages/CaptivePortalLogin/res/values-ka/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-kk-rKZ/strings.xml b/packages/CaptivePortalLogin/res/values-kk/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-kk-rKZ/strings.xml
rename to packages/CaptivePortalLogin/res/values-kk/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-km-rKH/strings.xml b/packages/CaptivePortalLogin/res/values-km/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-km-rKH/strings.xml
rename to packages/CaptivePortalLogin/res/values-km/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-kn-rIN/strings.xml b/packages/CaptivePortalLogin/res/values-kn/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-kn-rIN/strings.xml
rename to packages/CaptivePortalLogin/res/values-kn/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-ky-rKG/strings.xml b/packages/CaptivePortalLogin/res/values-ky/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-ky-rKG/strings.xml
rename to packages/CaptivePortalLogin/res/values-ky/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-lo-rLA/strings.xml b/packages/CaptivePortalLogin/res/values-lo/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-lo-rLA/strings.xml
rename to packages/CaptivePortalLogin/res/values-lo/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-mk-rMK/strings.xml b/packages/CaptivePortalLogin/res/values-mk/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-mk-rMK/strings.xml
rename to packages/CaptivePortalLogin/res/values-mk/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-ml-rIN/strings.xml b/packages/CaptivePortalLogin/res/values-ml/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-ml-rIN/strings.xml
rename to packages/CaptivePortalLogin/res/values-ml/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-mn-rMN/strings.xml b/packages/CaptivePortalLogin/res/values-mn/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-mn-rMN/strings.xml
rename to packages/CaptivePortalLogin/res/values-mn/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-mr-rIN/strings.xml b/packages/CaptivePortalLogin/res/values-mr/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-mr-rIN/strings.xml
rename to packages/CaptivePortalLogin/res/values-mr/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-ms-rMY/strings.xml b/packages/CaptivePortalLogin/res/values-ms/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-ms-rMY/strings.xml
rename to packages/CaptivePortalLogin/res/values-ms/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-my-rMM/strings.xml b/packages/CaptivePortalLogin/res/values-my/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-my-rMM/strings.xml
rename to packages/CaptivePortalLogin/res/values-my/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-ne-rNP/strings.xml b/packages/CaptivePortalLogin/res/values-ne/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-ne-rNP/strings.xml
rename to packages/CaptivePortalLogin/res/values-ne/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-pa-rIN/strings.xml b/packages/CaptivePortalLogin/res/values-pa/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-pa-rIN/strings.xml
rename to packages/CaptivePortalLogin/res/values-pa/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-si-rLK/strings.xml b/packages/CaptivePortalLogin/res/values-si/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-si-rLK/strings.xml
rename to packages/CaptivePortalLogin/res/values-si/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-sq-rAL/strings.xml b/packages/CaptivePortalLogin/res/values-sq/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-sq-rAL/strings.xml
rename to packages/CaptivePortalLogin/res/values-sq/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-ta-rIN/strings.xml b/packages/CaptivePortalLogin/res/values-ta/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-ta-rIN/strings.xml
rename to packages/CaptivePortalLogin/res/values-ta/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-te-rIN/strings.xml b/packages/CaptivePortalLogin/res/values-te/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-te-rIN/strings.xml
rename to packages/CaptivePortalLogin/res/values-te/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-ur-rPK/strings.xml b/packages/CaptivePortalLogin/res/values-ur/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-ur-rPK/strings.xml
rename to packages/CaptivePortalLogin/res/values-ur/strings.xml
diff --git a/packages/CaptivePortalLogin/res/values-uz-rUZ/strings.xml b/packages/CaptivePortalLogin/res/values-uz/strings.xml
similarity index 100%
rename from packages/CaptivePortalLogin/res/values-uz-rUZ/strings.xml
rename to packages/CaptivePortalLogin/res/values-uz/strings.xml
diff --git a/packages/DefaultContainerService/res/values-az-rAZ/strings.xml b/packages/DefaultContainerService/res/values-az/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-az-rAZ/strings.xml
rename to packages/DefaultContainerService/res/values-az/strings.xml
diff --git a/packages/DefaultContainerService/res/values-be-rBY/strings.xml b/packages/DefaultContainerService/res/values-be/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-be-rBY/strings.xml
rename to packages/DefaultContainerService/res/values-be/strings.xml
diff --git a/packages/DefaultContainerService/res/values-bn-rBD/strings.xml b/packages/DefaultContainerService/res/values-bn/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-bn-rBD/strings.xml
rename to packages/DefaultContainerService/res/values-bn/strings.xml
diff --git a/packages/DefaultContainerService/res/values-bs-rBA/strings.xml b/packages/DefaultContainerService/res/values-bs/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-bs-rBA/strings.xml
rename to packages/DefaultContainerService/res/values-bs/strings.xml
diff --git a/packages/DefaultContainerService/res/values-et-rEE/strings.xml b/packages/DefaultContainerService/res/values-et/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-et-rEE/strings.xml
rename to packages/DefaultContainerService/res/values-et/strings.xml
diff --git a/packages/DefaultContainerService/res/values-eu-rES/strings.xml b/packages/DefaultContainerService/res/values-eu/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-eu-rES/strings.xml
rename to packages/DefaultContainerService/res/values-eu/strings.xml
diff --git a/packages/DefaultContainerService/res/values-gl-rES/strings.xml b/packages/DefaultContainerService/res/values-gl/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-gl-rES/strings.xml
rename to packages/DefaultContainerService/res/values-gl/strings.xml
diff --git a/packages/DefaultContainerService/res/values-gu-rIN/strings.xml b/packages/DefaultContainerService/res/values-gu/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-gu-rIN/strings.xml
rename to packages/DefaultContainerService/res/values-gu/strings.xml
diff --git a/packages/DefaultContainerService/res/values-hy-rAM/strings.xml b/packages/DefaultContainerService/res/values-hy/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-hy-rAM/strings.xml
rename to packages/DefaultContainerService/res/values-hy/strings.xml
diff --git a/packages/DefaultContainerService/res/values-is-rIS/strings.xml b/packages/DefaultContainerService/res/values-is/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-is-rIS/strings.xml
rename to packages/DefaultContainerService/res/values-is/strings.xml
diff --git a/packages/DefaultContainerService/res/values-ka-rGE/strings.xml b/packages/DefaultContainerService/res/values-ka/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-ka-rGE/strings.xml
rename to packages/DefaultContainerService/res/values-ka/strings.xml
diff --git a/packages/DefaultContainerService/res/values-kk-rKZ/strings.xml b/packages/DefaultContainerService/res/values-kk-rKZ/strings.xml
deleted file mode 100644
index 216d715..0000000
--- a/packages/DefaultContainerService/res/values-kk-rKZ/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/*
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="service_name" msgid="4841491635055379553">"Package Access Helper"</string>
-</resources>
diff --git a/packages/DefaultContainerService/res/values-ka-rGE/strings.xml b/packages/DefaultContainerService/res/values-kk/strings.xml
similarity index 100%
copy from packages/DefaultContainerService/res/values-ka-rGE/strings.xml
copy to packages/DefaultContainerService/res/values-kk/strings.xml
diff --git a/packages/DefaultContainerService/res/values-km-rKH/strings.xml b/packages/DefaultContainerService/res/values-km/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-km-rKH/strings.xml
rename to packages/DefaultContainerService/res/values-km/strings.xml
diff --git a/packages/DefaultContainerService/res/values-kn-rIN/strings.xml b/packages/DefaultContainerService/res/values-kn/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-kn-rIN/strings.xml
rename to packages/DefaultContainerService/res/values-kn/strings.xml
diff --git a/packages/DefaultContainerService/res/values-ky-rKG/strings.xml b/packages/DefaultContainerService/res/values-ky/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-ky-rKG/strings.xml
rename to packages/DefaultContainerService/res/values-ky/strings.xml
diff --git a/packages/DefaultContainerService/res/values-lo-rLA/strings.xml b/packages/DefaultContainerService/res/values-lo/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-lo-rLA/strings.xml
rename to packages/DefaultContainerService/res/values-lo/strings.xml
diff --git a/packages/DefaultContainerService/res/values-mk-rMK/strings.xml b/packages/DefaultContainerService/res/values-mk/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-mk-rMK/strings.xml
rename to packages/DefaultContainerService/res/values-mk/strings.xml
diff --git a/packages/DefaultContainerService/res/values-ml-rIN/strings.xml b/packages/DefaultContainerService/res/values-ml/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-ml-rIN/strings.xml
rename to packages/DefaultContainerService/res/values-ml/strings.xml
diff --git a/packages/DefaultContainerService/res/values-mn-rMN/strings.xml b/packages/DefaultContainerService/res/values-mn/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-mn-rMN/strings.xml
rename to packages/DefaultContainerService/res/values-mn/strings.xml
diff --git a/packages/DefaultContainerService/res/values-mr-rIN/strings.xml b/packages/DefaultContainerService/res/values-mr/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-mr-rIN/strings.xml
rename to packages/DefaultContainerService/res/values-mr/strings.xml
diff --git a/packages/DefaultContainerService/res/values-ms-rMY/strings.xml b/packages/DefaultContainerService/res/values-ms/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-ms-rMY/strings.xml
rename to packages/DefaultContainerService/res/values-ms/strings.xml
diff --git a/packages/DefaultContainerService/res/values-my-rMM/strings.xml b/packages/DefaultContainerService/res/values-my/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-my-rMM/strings.xml
rename to packages/DefaultContainerService/res/values-my/strings.xml
diff --git a/packages/DefaultContainerService/res/values-ne-rNP/strings.xml b/packages/DefaultContainerService/res/values-ne/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-ne-rNP/strings.xml
rename to packages/DefaultContainerService/res/values-ne/strings.xml
diff --git a/packages/DefaultContainerService/res/values-pa-rIN/strings.xml b/packages/DefaultContainerService/res/values-pa/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-pa-rIN/strings.xml
rename to packages/DefaultContainerService/res/values-pa/strings.xml
diff --git a/packages/DefaultContainerService/res/values-si-rLK/strings.xml b/packages/DefaultContainerService/res/values-si/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-si-rLK/strings.xml
rename to packages/DefaultContainerService/res/values-si/strings.xml
diff --git a/packages/DefaultContainerService/res/values-sq-rAL/strings.xml b/packages/DefaultContainerService/res/values-sq/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-sq-rAL/strings.xml
rename to packages/DefaultContainerService/res/values-sq/strings.xml
diff --git a/packages/DefaultContainerService/res/values-ta-rIN/strings.xml b/packages/DefaultContainerService/res/values-ta/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-ta-rIN/strings.xml
rename to packages/DefaultContainerService/res/values-ta/strings.xml
diff --git a/packages/DefaultContainerService/res/values-te-rIN/strings.xml b/packages/DefaultContainerService/res/values-te/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-te-rIN/strings.xml
rename to packages/DefaultContainerService/res/values-te/strings.xml
diff --git a/packages/DefaultContainerService/res/values-ur-rPK/strings.xml b/packages/DefaultContainerService/res/values-ur/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-ur-rPK/strings.xml
rename to packages/DefaultContainerService/res/values-ur/strings.xml
diff --git a/packages/DefaultContainerService/res/values-uz-rUZ/strings.xml b/packages/DefaultContainerService/res/values-uz/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-uz-rUZ/strings.xml
rename to packages/DefaultContainerService/res/values-uz/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-az-rAZ/strings.xml b/packages/ExternalStorageProvider/res/values-az/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-az-rAZ/strings.xml
rename to packages/ExternalStorageProvider/res/values-az/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-be-rBY/strings.xml b/packages/ExternalStorageProvider/res/values-be/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-be-rBY/strings.xml
rename to packages/ExternalStorageProvider/res/values-be/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-bn-rBD/strings.xml b/packages/ExternalStorageProvider/res/values-bn/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-bn-rBD/strings.xml
rename to packages/ExternalStorageProvider/res/values-bn/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-bs-rBA/strings.xml b/packages/ExternalStorageProvider/res/values-bs/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-bs-rBA/strings.xml
rename to packages/ExternalStorageProvider/res/values-bs/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-et-rEE/strings.xml b/packages/ExternalStorageProvider/res/values-et/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-et-rEE/strings.xml
rename to packages/ExternalStorageProvider/res/values-et/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-eu-rES/strings.xml b/packages/ExternalStorageProvider/res/values-eu/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-eu-rES/strings.xml
rename to packages/ExternalStorageProvider/res/values-eu/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-gl-rES/strings.xml b/packages/ExternalStorageProvider/res/values-gl/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-gl-rES/strings.xml
rename to packages/ExternalStorageProvider/res/values-gl/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-gu-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-gu/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-gu-rIN/strings.xml
rename to packages/ExternalStorageProvider/res/values-gu/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-hy-rAM/strings.xml b/packages/ExternalStorageProvider/res/values-hy/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-hy-rAM/strings.xml
rename to packages/ExternalStorageProvider/res/values-hy/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-is-rIS/strings.xml b/packages/ExternalStorageProvider/res/values-is/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-is-rIS/strings.xml
rename to packages/ExternalStorageProvider/res/values-is/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-ka-rGE/strings.xml b/packages/ExternalStorageProvider/res/values-ka/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-ka-rGE/strings.xml
rename to packages/ExternalStorageProvider/res/values-ka/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-kk-rKZ/strings.xml b/packages/ExternalStorageProvider/res/values-kk/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-kk-rKZ/strings.xml
rename to packages/ExternalStorageProvider/res/values-kk/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-km-rKH/strings.xml b/packages/ExternalStorageProvider/res/values-km/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-km-rKH/strings.xml
rename to packages/ExternalStorageProvider/res/values-km/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-kn-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-kn/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-kn-rIN/strings.xml
rename to packages/ExternalStorageProvider/res/values-kn/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-ky-rKG/strings.xml b/packages/ExternalStorageProvider/res/values-ky/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-ky-rKG/strings.xml
rename to packages/ExternalStorageProvider/res/values-ky/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-lo-rLA/strings.xml b/packages/ExternalStorageProvider/res/values-lo/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-lo-rLA/strings.xml
rename to packages/ExternalStorageProvider/res/values-lo/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-mk-rMK/strings.xml b/packages/ExternalStorageProvider/res/values-mk/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-mk-rMK/strings.xml
rename to packages/ExternalStorageProvider/res/values-mk/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-ml-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-ml/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-ml-rIN/strings.xml
rename to packages/ExternalStorageProvider/res/values-ml/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-mn-rMN/strings.xml b/packages/ExternalStorageProvider/res/values-mn/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-mn-rMN/strings.xml
rename to packages/ExternalStorageProvider/res/values-mn/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-mr-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-mr/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-mr-rIN/strings.xml
rename to packages/ExternalStorageProvider/res/values-mr/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-ms-rMY/strings.xml b/packages/ExternalStorageProvider/res/values-ms/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-ms-rMY/strings.xml
rename to packages/ExternalStorageProvider/res/values-ms/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-my-rMM/strings.xml b/packages/ExternalStorageProvider/res/values-my/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-my-rMM/strings.xml
rename to packages/ExternalStorageProvider/res/values-my/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-ne-rNP/strings.xml b/packages/ExternalStorageProvider/res/values-ne/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-ne-rNP/strings.xml
rename to packages/ExternalStorageProvider/res/values-ne/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-pa-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-pa/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-pa-rIN/strings.xml
rename to packages/ExternalStorageProvider/res/values-pa/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-si-rLK/strings.xml b/packages/ExternalStorageProvider/res/values-si/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-si-rLK/strings.xml
rename to packages/ExternalStorageProvider/res/values-si/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-sq-rAL/strings.xml b/packages/ExternalStorageProvider/res/values-sq/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-sq-rAL/strings.xml
rename to packages/ExternalStorageProvider/res/values-sq/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-ta-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-ta/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-ta-rIN/strings.xml
rename to packages/ExternalStorageProvider/res/values-ta/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-te-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-te/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-te-rIN/strings.xml
rename to packages/ExternalStorageProvider/res/values-te/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-ur-rPK/strings.xml b/packages/ExternalStorageProvider/res/values-ur/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-ur-rPK/strings.xml
rename to packages/ExternalStorageProvider/res/values-ur/strings.xml
diff --git a/packages/ExternalStorageProvider/res/values-uz-rUZ/strings.xml b/packages/ExternalStorageProvider/res/values-uz/strings.xml
similarity index 100%
rename from packages/ExternalStorageProvider/res/values-uz-rUZ/strings.xml
rename to packages/ExternalStorageProvider/res/values-uz/strings.xml
diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
index 8cf375a..22a5b7f 100644
--- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
+++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
@@ -287,26 +287,23 @@
String path = file.getAbsolutePath();
// Find the most-specific root path
- String mostSpecificId = null;
- String mostSpecificPath = null;
- synchronized (mRootsLock) {
- for (int i = 0; i < mRoots.size(); i++) {
- final String rootId = mRoots.keyAt(i);
- final String rootPath = mRoots.valueAt(i).path.getAbsolutePath();
- if (path.startsWith(rootPath) && (mostSpecificPath == null
- || rootPath.length() > mostSpecificPath.length())) {
- mostSpecificId = rootId;
- mostSpecificPath = rootPath;
- }
- }
+ boolean visiblePath = false;
+ RootInfo mostSpecificRoot = getMostSpecificRootForPath(path, false);
+
+ if (mostSpecificRoot == null) {
+ // Try visible path if no internal path matches. MediaStore uses visible paths.
+ visiblePath = true;
+ mostSpecificRoot = getMostSpecificRootForPath(path, true);
}
- if (mostSpecificPath == null) {
+ if (mostSpecificRoot == null) {
throw new FileNotFoundException("Failed to find root that contains " + path);
}
// Start at first char of path under root
- final String rootPath = mostSpecificPath;
+ final String rootPath = visiblePath
+ ? mostSpecificRoot.visiblePath.getAbsolutePath()
+ : mostSpecificRoot.path.getAbsolutePath();
if (rootPath.equals(path)) {
path = "";
} else if (rootPath.endsWith("/")) {
@@ -322,7 +319,29 @@
}
}
- return mostSpecificId + ':' + path;
+ return mostSpecificRoot.rootId + ':' + path;
+ }
+
+ private RootInfo getMostSpecificRootForPath(String path, boolean visible) {
+ // Find the most-specific root path
+ RootInfo mostSpecificRoot = null;
+ String mostSpecificPath = null;
+ synchronized (mRootsLock) {
+ for (int i = 0; i < mRoots.size(); i++) {
+ final RootInfo root = mRoots.valueAt(i);
+ final File rootFile = visible ? root.visiblePath : root.path;
+ if (rootFile != null) {
+ final String rootPath = rootFile.getAbsolutePath();
+ if (path.startsWith(rootPath) && (mostSpecificPath == null
+ || rootPath.length() > mostSpecificPath.length())) {
+ mostSpecificRoot = root;
+ mostSpecificPath = rootPath;
+ }
+ }
+ }
+ }
+
+ return mostSpecificRoot;
}
private File getFileForDocId(String docId) throws FileNotFoundException {
@@ -519,15 +538,13 @@
boolean matchesRequestedDoc = false;
if (DocumentsContract.isTreeUri(uri)) {
final String parentDocId = DocumentsContract.getTreeDocumentId(uri);
- File parentFile = getFileForDocId(parentDocId);
- if (FileUtils.contains(parentFile, doc)) {
+ if (isChildDocument(parentDocId, docId)) {
treeUriPermission = uriPermission;
matchesRequestedDoc = true;
}
} else {
final String candidateDocId = DocumentsContract.getDocumentId(uri);
- final File candidateDoc = getFileForDocId(candidateDocId);
- if (Objects.equals(doc.getAbsolutePath(), candidateDoc.getAbsolutePath())) {
+ if (Objects.equals(docId, candidateDocId)) {
docUriPermission = uriPermission;
matchesRequestedDoc = true;
}
@@ -670,7 +687,7 @@
parent = mRoots.get(rootId).path;
}
- final LinkedList<File> pending = new LinkedList<File>();
+ final LinkedList<File> pending = new LinkedList<>();
pending.add(parent);
while (!pending.isEmpty() && result.getCount() < 24) {
final File file = pending.removeFirst();
diff --git a/packages/FusedLocation/res/values-az-rAZ/strings.xml b/packages/FusedLocation/res/values-az/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-az-rAZ/strings.xml
rename to packages/FusedLocation/res/values-az/strings.xml
diff --git a/packages/FusedLocation/res/values-be-rBY/strings.xml b/packages/FusedLocation/res/values-be/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-be-rBY/strings.xml
rename to packages/FusedLocation/res/values-be/strings.xml
diff --git a/packages/FusedLocation/res/values-bn-rBD/strings.xml b/packages/FusedLocation/res/values-bn/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-bn-rBD/strings.xml
rename to packages/FusedLocation/res/values-bn/strings.xml
diff --git a/packages/FusedLocation/res/values-bs-rBA/strings.xml b/packages/FusedLocation/res/values-bs/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-bs-rBA/strings.xml
rename to packages/FusedLocation/res/values-bs/strings.xml
diff --git a/packages/FusedLocation/res/values-et-rEE/strings.xml b/packages/FusedLocation/res/values-et/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-et-rEE/strings.xml
rename to packages/FusedLocation/res/values-et/strings.xml
diff --git a/packages/FusedLocation/res/values-eu-rES/strings.xml b/packages/FusedLocation/res/values-eu/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-eu-rES/strings.xml
rename to packages/FusedLocation/res/values-eu/strings.xml
diff --git a/packages/FusedLocation/res/values-gl-rES/strings.xml b/packages/FusedLocation/res/values-gl/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-gl-rES/strings.xml
rename to packages/FusedLocation/res/values-gl/strings.xml
diff --git a/packages/FusedLocation/res/values-gu-rIN/strings.xml b/packages/FusedLocation/res/values-gu/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-gu-rIN/strings.xml
rename to packages/FusedLocation/res/values-gu/strings.xml
diff --git a/packages/FusedLocation/res/values-hy-rAM/strings.xml b/packages/FusedLocation/res/values-hy/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-hy-rAM/strings.xml
rename to packages/FusedLocation/res/values-hy/strings.xml
diff --git a/packages/FusedLocation/res/values-is-rIS/strings.xml b/packages/FusedLocation/res/values-is/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-is-rIS/strings.xml
rename to packages/FusedLocation/res/values-is/strings.xml
diff --git a/packages/FusedLocation/res/values-ka-rGE/strings.xml b/packages/FusedLocation/res/values-ka/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-ka-rGE/strings.xml
rename to packages/FusedLocation/res/values-ka/strings.xml
diff --git a/packages/FusedLocation/res/values-kk-rKZ/strings.xml b/packages/FusedLocation/res/values-kk/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-kk-rKZ/strings.xml
rename to packages/FusedLocation/res/values-kk/strings.xml
diff --git a/packages/FusedLocation/res/values-km-rKH/strings.xml b/packages/FusedLocation/res/values-km/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-km-rKH/strings.xml
rename to packages/FusedLocation/res/values-km/strings.xml
diff --git a/packages/FusedLocation/res/values-kn-rIN/strings.xml b/packages/FusedLocation/res/values-kn/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-kn-rIN/strings.xml
rename to packages/FusedLocation/res/values-kn/strings.xml
diff --git a/packages/FusedLocation/res/values-ky-rKG/strings.xml b/packages/FusedLocation/res/values-ky/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-ky-rKG/strings.xml
rename to packages/FusedLocation/res/values-ky/strings.xml
diff --git a/packages/FusedLocation/res/values-lo-rLA/strings.xml b/packages/FusedLocation/res/values-lo/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-lo-rLA/strings.xml
rename to packages/FusedLocation/res/values-lo/strings.xml
diff --git a/packages/FusedLocation/res/values-mk-rMK/strings.xml b/packages/FusedLocation/res/values-mk/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-mk-rMK/strings.xml
rename to packages/FusedLocation/res/values-mk/strings.xml
diff --git a/packages/FusedLocation/res/values-ml-rIN/strings.xml b/packages/FusedLocation/res/values-ml/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-ml-rIN/strings.xml
rename to packages/FusedLocation/res/values-ml/strings.xml
diff --git a/packages/FusedLocation/res/values-mn-rMN/strings.xml b/packages/FusedLocation/res/values-mn/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-mn-rMN/strings.xml
rename to packages/FusedLocation/res/values-mn/strings.xml
diff --git a/packages/FusedLocation/res/values-mr-rIN/strings.xml b/packages/FusedLocation/res/values-mr/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-mr-rIN/strings.xml
rename to packages/FusedLocation/res/values-mr/strings.xml
diff --git a/packages/FusedLocation/res/values-ms-rMY/strings.xml b/packages/FusedLocation/res/values-ms/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-ms-rMY/strings.xml
rename to packages/FusedLocation/res/values-ms/strings.xml
diff --git a/packages/FusedLocation/res/values-my-rMM/strings.xml b/packages/FusedLocation/res/values-my/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-my-rMM/strings.xml
rename to packages/FusedLocation/res/values-my/strings.xml
diff --git a/packages/FusedLocation/res/values-ne-rNP/strings.xml b/packages/FusedLocation/res/values-ne/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-ne-rNP/strings.xml
rename to packages/FusedLocation/res/values-ne/strings.xml
diff --git a/packages/FusedLocation/res/values-pa-rIN/strings.xml b/packages/FusedLocation/res/values-pa/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-pa-rIN/strings.xml
rename to packages/FusedLocation/res/values-pa/strings.xml
diff --git a/packages/FusedLocation/res/values-si-rLK/strings.xml b/packages/FusedLocation/res/values-si/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-si-rLK/strings.xml
rename to packages/FusedLocation/res/values-si/strings.xml
diff --git a/packages/FusedLocation/res/values-sq-rAL/strings.xml b/packages/FusedLocation/res/values-sq/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-sq-rAL/strings.xml
rename to packages/FusedLocation/res/values-sq/strings.xml
diff --git a/packages/FusedLocation/res/values-ta-rIN/strings.xml b/packages/FusedLocation/res/values-ta/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-ta-rIN/strings.xml
rename to packages/FusedLocation/res/values-ta/strings.xml
diff --git a/packages/FusedLocation/res/values-te-rIN/strings.xml b/packages/FusedLocation/res/values-te/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-te-rIN/strings.xml
rename to packages/FusedLocation/res/values-te/strings.xml
diff --git a/packages/FusedLocation/res/values-ur-rPK/strings.xml b/packages/FusedLocation/res/values-ur/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-ur-rPK/strings.xml
rename to packages/FusedLocation/res/values-ur/strings.xml
diff --git a/packages/FusedLocation/res/values-uz-rUZ/strings.xml b/packages/FusedLocation/res/values-uz/strings.xml
similarity index 100%
rename from packages/FusedLocation/res/values-uz-rUZ/strings.xml
rename to packages/FusedLocation/res/values-uz/strings.xml
diff --git a/packages/InputDevices/res/values-az-rAZ/strings.xml b/packages/InputDevices/res/values-az/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-az-rAZ/strings.xml
rename to packages/InputDevices/res/values-az/strings.xml
diff --git a/packages/InputDevices/res/values-be-rBY/strings.xml b/packages/InputDevices/res/values-be/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-be-rBY/strings.xml
rename to packages/InputDevices/res/values-be/strings.xml
diff --git a/packages/InputDevices/res/values-bn-rBD/strings.xml b/packages/InputDevices/res/values-bn/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-bn-rBD/strings.xml
rename to packages/InputDevices/res/values-bn/strings.xml
diff --git a/packages/InputDevices/res/values-bs-rBA/strings.xml b/packages/InputDevices/res/values-bs/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-bs-rBA/strings.xml
rename to packages/InputDevices/res/values-bs/strings.xml
diff --git a/packages/InputDevices/res/values-et-rEE/strings.xml b/packages/InputDevices/res/values-et/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-et-rEE/strings.xml
rename to packages/InputDevices/res/values-et/strings.xml
diff --git a/packages/InputDevices/res/values-eu-rES/strings.xml b/packages/InputDevices/res/values-eu/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-eu-rES/strings.xml
rename to packages/InputDevices/res/values-eu/strings.xml
diff --git a/packages/InputDevices/res/values-gl-rES/strings.xml b/packages/InputDevices/res/values-gl/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-gl-rES/strings.xml
rename to packages/InputDevices/res/values-gl/strings.xml
diff --git a/packages/InputDevices/res/values-gu-rIN/strings.xml b/packages/InputDevices/res/values-gu/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-gu-rIN/strings.xml
rename to packages/InputDevices/res/values-gu/strings.xml
diff --git a/packages/InputDevices/res/values-hy-rAM/strings.xml b/packages/InputDevices/res/values-hy/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-hy-rAM/strings.xml
rename to packages/InputDevices/res/values-hy/strings.xml
diff --git a/packages/InputDevices/res/values-is-rIS/strings.xml b/packages/InputDevices/res/values-is/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-is-rIS/strings.xml
rename to packages/InputDevices/res/values-is/strings.xml
diff --git a/packages/InputDevices/res/values-ka-rGE/strings.xml b/packages/InputDevices/res/values-ka/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-ka-rGE/strings.xml
rename to packages/InputDevices/res/values-ka/strings.xml
diff --git a/packages/InputDevices/res/values-kk-rKZ/strings.xml b/packages/InputDevices/res/values-kk/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-kk-rKZ/strings.xml
rename to packages/InputDevices/res/values-kk/strings.xml
diff --git a/packages/InputDevices/res/values-km-rKH/strings.xml b/packages/InputDevices/res/values-km/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-km-rKH/strings.xml
rename to packages/InputDevices/res/values-km/strings.xml
diff --git a/packages/InputDevices/res/values-kn-rIN/strings.xml b/packages/InputDevices/res/values-kn/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-kn-rIN/strings.xml
rename to packages/InputDevices/res/values-kn/strings.xml
diff --git a/packages/InputDevices/res/values-ky-rKG/strings.xml b/packages/InputDevices/res/values-ky/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-ky-rKG/strings.xml
rename to packages/InputDevices/res/values-ky/strings.xml
diff --git a/packages/InputDevices/res/values-lo-rLA/strings.xml b/packages/InputDevices/res/values-lo/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-lo-rLA/strings.xml
rename to packages/InputDevices/res/values-lo/strings.xml
diff --git a/packages/InputDevices/res/values-mk-rMK/strings.xml b/packages/InputDevices/res/values-mk/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-mk-rMK/strings.xml
rename to packages/InputDevices/res/values-mk/strings.xml
diff --git a/packages/InputDevices/res/values-ml-rIN/strings.xml b/packages/InputDevices/res/values-ml/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-ml-rIN/strings.xml
rename to packages/InputDevices/res/values-ml/strings.xml
diff --git a/packages/InputDevices/res/values-mn-rMN/strings.xml b/packages/InputDevices/res/values-mn/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-mn-rMN/strings.xml
rename to packages/InputDevices/res/values-mn/strings.xml
diff --git a/packages/InputDevices/res/values-mr-rIN/strings.xml b/packages/InputDevices/res/values-mr/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-mr-rIN/strings.xml
rename to packages/InputDevices/res/values-mr/strings.xml
diff --git a/packages/InputDevices/res/values-ms-rMY/strings.xml b/packages/InputDevices/res/values-ms/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-ms-rMY/strings.xml
rename to packages/InputDevices/res/values-ms/strings.xml
diff --git a/packages/InputDevices/res/values-my-rMM/strings.xml b/packages/InputDevices/res/values-my/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-my-rMM/strings.xml
rename to packages/InputDevices/res/values-my/strings.xml
diff --git a/packages/InputDevices/res/values-ne-rNP/strings.xml b/packages/InputDevices/res/values-ne/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-ne-rNP/strings.xml
rename to packages/InputDevices/res/values-ne/strings.xml
diff --git a/packages/InputDevices/res/values-pa-rIN/strings.xml b/packages/InputDevices/res/values-pa/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-pa-rIN/strings.xml
rename to packages/InputDevices/res/values-pa/strings.xml
diff --git a/packages/InputDevices/res/values-si-rLK/strings.xml b/packages/InputDevices/res/values-si/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-si-rLK/strings.xml
rename to packages/InputDevices/res/values-si/strings.xml
diff --git a/packages/InputDevices/res/values-sq-rAL/strings.xml b/packages/InputDevices/res/values-sq/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-sq-rAL/strings.xml
rename to packages/InputDevices/res/values-sq/strings.xml
diff --git a/packages/InputDevices/res/values-ta-rIN/strings.xml b/packages/InputDevices/res/values-ta/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-ta-rIN/strings.xml
rename to packages/InputDevices/res/values-ta/strings.xml
diff --git a/packages/InputDevices/res/values-te-rIN/strings.xml b/packages/InputDevices/res/values-te/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-te-rIN/strings.xml
rename to packages/InputDevices/res/values-te/strings.xml
diff --git a/packages/InputDevices/res/values-ur-rPK/strings.xml b/packages/InputDevices/res/values-ur/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-ur-rPK/strings.xml
rename to packages/InputDevices/res/values-ur/strings.xml
diff --git a/packages/InputDevices/res/values-uz-rUZ/strings.xml b/packages/InputDevices/res/values-uz/strings.xml
similarity index 100%
rename from packages/InputDevices/res/values-uz-rUZ/strings.xml
rename to packages/InputDevices/res/values-uz/strings.xml
diff --git a/packages/Keyguard/res/values-az-rAZ/strings.xml b/packages/Keyguard/res/values-az/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-az-rAZ/strings.xml
rename to packages/Keyguard/res/values-az/strings.xml
diff --git a/packages/Keyguard/res/values-be-rBY/strings.xml b/packages/Keyguard/res/values-be/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-be-rBY/strings.xml
rename to packages/Keyguard/res/values-be/strings.xml
diff --git a/packages/Keyguard/res/values-bn-rBD/strings.xml b/packages/Keyguard/res/values-bn/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-bn-rBD/strings.xml
rename to packages/Keyguard/res/values-bn/strings.xml
diff --git a/packages/Keyguard/res/values-bs-rBA/strings.xml b/packages/Keyguard/res/values-bs/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-bs-rBA/strings.xml
rename to packages/Keyguard/res/values-bs/strings.xml
diff --git a/packages/Keyguard/res/values-et-rEE/strings.xml b/packages/Keyguard/res/values-et/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-et-rEE/strings.xml
rename to packages/Keyguard/res/values-et/strings.xml
diff --git a/packages/Keyguard/res/values-eu-rES/strings.xml b/packages/Keyguard/res/values-eu/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-eu-rES/strings.xml
rename to packages/Keyguard/res/values-eu/strings.xml
diff --git a/packages/Keyguard/res/values-gl-rES/strings.xml b/packages/Keyguard/res/values-gl/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-gl-rES/strings.xml
rename to packages/Keyguard/res/values-gl/strings.xml
diff --git a/packages/Keyguard/res/values-gu-rIN/strings.xml b/packages/Keyguard/res/values-gu/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-gu-rIN/strings.xml
rename to packages/Keyguard/res/values-gu/strings.xml
diff --git a/packages/Keyguard/res/values-hy-rAM/strings.xml b/packages/Keyguard/res/values-hy/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-hy-rAM/strings.xml
rename to packages/Keyguard/res/values-hy/strings.xml
diff --git a/packages/Keyguard/res/values-is-rIS/strings.xml b/packages/Keyguard/res/values-is/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-is-rIS/strings.xml
rename to packages/Keyguard/res/values-is/strings.xml
diff --git a/packages/Keyguard/res/values-ka-rGE/strings.xml b/packages/Keyguard/res/values-ka/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-ka-rGE/strings.xml
rename to packages/Keyguard/res/values-ka/strings.xml
diff --git a/packages/Keyguard/res/values-kk-rKZ/strings.xml b/packages/Keyguard/res/values-kk/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-kk-rKZ/strings.xml
rename to packages/Keyguard/res/values-kk/strings.xml
diff --git a/packages/Keyguard/res/values-km-rKH/strings.xml b/packages/Keyguard/res/values-km/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-km-rKH/strings.xml
rename to packages/Keyguard/res/values-km/strings.xml
diff --git a/packages/Keyguard/res/values-kn-rIN/strings.xml b/packages/Keyguard/res/values-kn/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-kn-rIN/strings.xml
rename to packages/Keyguard/res/values-kn/strings.xml
diff --git a/packages/Keyguard/res/values-ky-rKG/strings.xml b/packages/Keyguard/res/values-ky/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-ky-rKG/strings.xml
rename to packages/Keyguard/res/values-ky/strings.xml
diff --git a/packages/Keyguard/res/values-lo-rLA/strings.xml b/packages/Keyguard/res/values-lo/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-lo-rLA/strings.xml
rename to packages/Keyguard/res/values-lo/strings.xml
diff --git a/packages/Keyguard/res/values-mk-rMK/strings.xml b/packages/Keyguard/res/values-mk/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-mk-rMK/strings.xml
rename to packages/Keyguard/res/values-mk/strings.xml
diff --git a/packages/Keyguard/res/values-ml-rIN/strings.xml b/packages/Keyguard/res/values-ml/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-ml-rIN/strings.xml
rename to packages/Keyguard/res/values-ml/strings.xml
diff --git a/packages/Keyguard/res/values-mn-rMN/strings.xml b/packages/Keyguard/res/values-mn/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-mn-rMN/strings.xml
rename to packages/Keyguard/res/values-mn/strings.xml
diff --git a/packages/Keyguard/res/values-mr-rIN/strings.xml b/packages/Keyguard/res/values-mr/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-mr-rIN/strings.xml
rename to packages/Keyguard/res/values-mr/strings.xml
diff --git a/packages/Keyguard/res/values-ms-rMY/strings.xml b/packages/Keyguard/res/values-ms/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-ms-rMY/strings.xml
rename to packages/Keyguard/res/values-ms/strings.xml
diff --git a/packages/Keyguard/res/values-my-rMM/dimens.xml b/packages/Keyguard/res/values-my/dimens.xml
similarity index 100%
rename from packages/Keyguard/res/values-my-rMM/dimens.xml
rename to packages/Keyguard/res/values-my/dimens.xml
diff --git a/packages/Keyguard/res/values-my-rMM/strings.xml b/packages/Keyguard/res/values-my/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-my-rMM/strings.xml
rename to packages/Keyguard/res/values-my/strings.xml
diff --git a/packages/Keyguard/res/values-ne-rNP/strings.xml b/packages/Keyguard/res/values-ne/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-ne-rNP/strings.xml
rename to packages/Keyguard/res/values-ne/strings.xml
diff --git a/packages/Keyguard/res/values-pa-rIN/strings.xml b/packages/Keyguard/res/values-pa/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-pa-rIN/strings.xml
rename to packages/Keyguard/res/values-pa/strings.xml
diff --git a/packages/Keyguard/res/values-si-rLK/strings.xml b/packages/Keyguard/res/values-si/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-si-rLK/strings.xml
rename to packages/Keyguard/res/values-si/strings.xml
diff --git a/packages/Keyguard/res/values-sq-rAL/strings.xml b/packages/Keyguard/res/values-sq/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-sq-rAL/strings.xml
rename to packages/Keyguard/res/values-sq/strings.xml
diff --git a/packages/Keyguard/res/values-ta-rIN/strings.xml b/packages/Keyguard/res/values-ta/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-ta-rIN/strings.xml
rename to packages/Keyguard/res/values-ta/strings.xml
diff --git a/packages/Keyguard/res/values-te-rIN/strings.xml b/packages/Keyguard/res/values-te/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-te-rIN/strings.xml
rename to packages/Keyguard/res/values-te/strings.xml
diff --git a/packages/Keyguard/res/values-ur-rPK/strings.xml b/packages/Keyguard/res/values-ur/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-ur-rPK/strings.xml
rename to packages/Keyguard/res/values-ur/strings.xml
diff --git a/packages/Keyguard/res/values-uz-rUZ/strings.xml b/packages/Keyguard/res/values-uz/strings.xml
similarity index 100%
rename from packages/Keyguard/res/values-uz-rUZ/strings.xml
rename to packages/Keyguard/res/values-uz/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-az-rAZ/strings.xml b/packages/MtpDocumentsProvider/res/values-az/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-az-rAZ/strings.xml
rename to packages/MtpDocumentsProvider/res/values-az/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-be-rBY/strings.xml b/packages/MtpDocumentsProvider/res/values-be/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-be-rBY/strings.xml
rename to packages/MtpDocumentsProvider/res/values-be/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-bn-rBD/strings.xml b/packages/MtpDocumentsProvider/res/values-bn/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-bn-rBD/strings.xml
rename to packages/MtpDocumentsProvider/res/values-bn/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-bs-rBA/strings.xml b/packages/MtpDocumentsProvider/res/values-bs/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-bs-rBA/strings.xml
rename to packages/MtpDocumentsProvider/res/values-bs/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-et-rEE/strings.xml b/packages/MtpDocumentsProvider/res/values-et/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-et-rEE/strings.xml
rename to packages/MtpDocumentsProvider/res/values-et/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-eu-rES/strings.xml b/packages/MtpDocumentsProvider/res/values-eu/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-eu-rES/strings.xml
rename to packages/MtpDocumentsProvider/res/values-eu/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-gl-rES/strings.xml b/packages/MtpDocumentsProvider/res/values-gl/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-gl-rES/strings.xml
rename to packages/MtpDocumentsProvider/res/values-gl/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-gu-rIN/strings.xml b/packages/MtpDocumentsProvider/res/values-gu/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-gu-rIN/strings.xml
rename to packages/MtpDocumentsProvider/res/values-gu/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-hy-rAM/strings.xml b/packages/MtpDocumentsProvider/res/values-hy/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-hy-rAM/strings.xml
rename to packages/MtpDocumentsProvider/res/values-hy/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-is-rIS/strings.xml b/packages/MtpDocumentsProvider/res/values-is/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-is-rIS/strings.xml
rename to packages/MtpDocumentsProvider/res/values-is/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-ka-rGE/strings.xml b/packages/MtpDocumentsProvider/res/values-ka/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-ka-rGE/strings.xml
rename to packages/MtpDocumentsProvider/res/values-ka/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-kk-rKZ/strings.xml b/packages/MtpDocumentsProvider/res/values-kk/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-kk-rKZ/strings.xml
rename to packages/MtpDocumentsProvider/res/values-kk/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-km-rKH/strings.xml b/packages/MtpDocumentsProvider/res/values-km/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-km-rKH/strings.xml
rename to packages/MtpDocumentsProvider/res/values-km/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-kn-rIN/strings.xml b/packages/MtpDocumentsProvider/res/values-kn/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-kn-rIN/strings.xml
rename to packages/MtpDocumentsProvider/res/values-kn/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-ky-rKG/strings.xml b/packages/MtpDocumentsProvider/res/values-ky/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-ky-rKG/strings.xml
rename to packages/MtpDocumentsProvider/res/values-ky/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-lo-rLA/strings.xml b/packages/MtpDocumentsProvider/res/values-lo/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-lo-rLA/strings.xml
rename to packages/MtpDocumentsProvider/res/values-lo/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-mk-rMK/strings.xml b/packages/MtpDocumentsProvider/res/values-mk/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-mk-rMK/strings.xml
rename to packages/MtpDocumentsProvider/res/values-mk/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-ml-rIN/strings.xml b/packages/MtpDocumentsProvider/res/values-ml/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-ml-rIN/strings.xml
rename to packages/MtpDocumentsProvider/res/values-ml/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-mn-rMN/strings.xml b/packages/MtpDocumentsProvider/res/values-mn/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-mn-rMN/strings.xml
rename to packages/MtpDocumentsProvider/res/values-mn/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-mr-rIN/strings.xml b/packages/MtpDocumentsProvider/res/values-mr/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-mr-rIN/strings.xml
rename to packages/MtpDocumentsProvider/res/values-mr/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-ms-rMY/strings.xml b/packages/MtpDocumentsProvider/res/values-ms/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-ms-rMY/strings.xml
rename to packages/MtpDocumentsProvider/res/values-ms/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-my-rMM/strings.xml b/packages/MtpDocumentsProvider/res/values-my/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-my-rMM/strings.xml
rename to packages/MtpDocumentsProvider/res/values-my/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-ne-rNP/strings.xml b/packages/MtpDocumentsProvider/res/values-ne/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-ne-rNP/strings.xml
rename to packages/MtpDocumentsProvider/res/values-ne/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-pa-rIN/strings.xml b/packages/MtpDocumentsProvider/res/values-pa/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-pa-rIN/strings.xml
rename to packages/MtpDocumentsProvider/res/values-pa/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-si-rLK/strings.xml b/packages/MtpDocumentsProvider/res/values-si/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-si-rLK/strings.xml
rename to packages/MtpDocumentsProvider/res/values-si/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-sq-rAL/strings.xml b/packages/MtpDocumentsProvider/res/values-sq/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-sq-rAL/strings.xml
rename to packages/MtpDocumentsProvider/res/values-sq/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-ta-rIN/strings.xml b/packages/MtpDocumentsProvider/res/values-ta/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-ta-rIN/strings.xml
rename to packages/MtpDocumentsProvider/res/values-ta/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-te-rIN/strings.xml b/packages/MtpDocumentsProvider/res/values-te/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-te-rIN/strings.xml
rename to packages/MtpDocumentsProvider/res/values-te/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-ur-rPK/strings.xml b/packages/MtpDocumentsProvider/res/values-ur/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-ur-rPK/strings.xml
rename to packages/MtpDocumentsProvider/res/values-ur/strings.xml
diff --git a/packages/MtpDocumentsProvider/res/values-uz-rUZ/strings.xml b/packages/MtpDocumentsProvider/res/values-uz/strings.xml
similarity index 100%
rename from packages/MtpDocumentsProvider/res/values-uz-rUZ/strings.xml
rename to packages/MtpDocumentsProvider/res/values-uz/strings.xml
diff --git a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java
index ef2e0a5..a9d35e1 100644
--- a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java
+++ b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java
@@ -162,7 +162,7 @@
assertEquals(0, openedDevice.length);
}
// Device is opened automatically when querying its children.
- try (final Cursor cursor = mProvider.queryChildDocuments("1", null, null)) {}
+ try (final Cursor cursor = mProvider.queryChildDocuments("1", null, (String) null)) {}
{
final MtpDeviceRecord[] openedDevice = mProvider.getOpenedDeviceRecordsCache();
@@ -412,7 +412,7 @@
.build()
});
- final Cursor cursor = mProvider.queryChildDocuments("1", null, null);
+ final Cursor cursor = mProvider.queryChildDocuments("1", null, (String) null);
assertEquals(1, cursor.getCount());
assertTrue(cursor.moveToNext());
@@ -429,7 +429,7 @@
public void testQueryChildDocuments_cursorError() throws Exception {
setupProvider(MtpDatabaseConstants.FLAG_DATABASE_IN_MEMORY);
try {
- mProvider.queryChildDocuments("1", null, null);
+ mProvider.queryChildDocuments("1", null, (String) null);
fail();
} catch (FileNotFoundException error) {}
}
@@ -438,7 +438,7 @@
setupProvider(MtpDatabaseConstants.FLAG_DATABASE_IN_MEMORY);
setupRoots(0, new MtpRoot[] { new MtpRoot(0, 0, "Storage", 1000, 1000, "") });
mMtpManager.setObjectHandles(0, 0, -1, new int[] { 1 });
- try (final Cursor cursor = mProvider.queryChildDocuments("1", null, null)) {
+ try (final Cursor cursor = mProvider.queryChildDocuments("1", null, (String) null)) {
assertEquals(0, cursor.getCount());
assertFalse(cursor.getExtras().getBoolean(DocumentsContract.EXTRA_LOADING));
}
@@ -590,7 +590,7 @@
assertEquals(1, cursor.getCount());
}
- try (final Cursor cursor = mProvider.queryChildDocuments("1", null, null)) {
+ try (final Cursor cursor = mProvider.queryChildDocuments("1", null, (String) null)) {
assertEquals(0, cursor.getCount());
assertEquals(
"error_busy_device",
@@ -611,7 +611,7 @@
assertEquals(1, cursor.getCount());
}
- try (final Cursor cursor = mProvider.queryChildDocuments("1", null, null)) {
+ try (final Cursor cursor = mProvider.queryChildDocuments("1", null, (String) null)) {
assertEquals(0, cursor.getCount());
assertEquals(
"error_locked_device",
@@ -663,7 +663,7 @@
try (final Cursor cursor = mProvider.queryChildDocuments(
String.valueOf(documentIdOffset + i),
strings(Document.COLUMN_DOCUMENT_ID, Document.COLUMN_DISPLAY_NAME),
- null)) {
+ (String) null)) {
assertEquals(1, cursor.getCount());
cursor.moveToNext();
assertEquals(String.valueOf(documentIdOffset + i + 1), cursor.getString(0));
@@ -684,7 +684,7 @@
try (final Cursor cursor = mProvider.queryChildDocuments(
String.valueOf(documentIdOffset + i),
strings(Document.COLUMN_DOCUMENT_ID),
- null)) {
+ (String) null)) {
assertEquals(1, cursor.getCount());
cursor.moveToNext();
assertEquals(String.valueOf(documentIdOffset + i + 1), cursor.getString(0));
@@ -758,7 +758,7 @@
mProvider.resumeRootScanner();
mResolver.waitForNotification(ROOTS_URI, 1);
try (final Cursor cursor = mProvider.queryChildDocuments(
- "1", strings(Document.COLUMN_DOCUMENT_ID), null)) {
+ "1", strings(Document.COLUMN_DOCUMENT_ID), (String) null)) {
assertEquals(1, cursor.getCount());
cursor.moveToNext();
assertEquals("3", cursor.getString(0));
@@ -917,7 +917,9 @@
}
mMtpManager.setObjectHandles(deviceId, storageId, parentHandle, handles);
return getStrings(mProvider.queryChildDocuments(
- parentDocumentId, strings(DocumentsContract.Document.COLUMN_DOCUMENT_ID), null));
+ parentDocumentId,
+ strings(DocumentsContract.Document.COLUMN_DOCUMENT_ID),
+ (String) null));
}
static class HierarchyDocument {
diff --git a/packages/PrintSpooler/res/values-az-rAZ/strings.xml b/packages/PrintSpooler/res/values-az/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-az-rAZ/strings.xml
rename to packages/PrintSpooler/res/values-az/strings.xml
diff --git a/packages/PrintSpooler/res/values-be-rBY/strings.xml b/packages/PrintSpooler/res/values-be/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-be-rBY/strings.xml
rename to packages/PrintSpooler/res/values-be/strings.xml
diff --git a/packages/PrintSpooler/res/values-bn-rBD/strings.xml b/packages/PrintSpooler/res/values-bn/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-bn-rBD/strings.xml
rename to packages/PrintSpooler/res/values-bn/strings.xml
diff --git a/packages/PrintSpooler/res/values-bs-rBA/strings.xml b/packages/PrintSpooler/res/values-bs/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-bs-rBA/strings.xml
rename to packages/PrintSpooler/res/values-bs/strings.xml
diff --git a/packages/PrintSpooler/res/values-et-rEE/strings.xml b/packages/PrintSpooler/res/values-et/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-et-rEE/strings.xml
rename to packages/PrintSpooler/res/values-et/strings.xml
diff --git a/packages/PrintSpooler/res/values-eu-rES/strings.xml b/packages/PrintSpooler/res/values-eu/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-eu-rES/strings.xml
rename to packages/PrintSpooler/res/values-eu/strings.xml
diff --git a/packages/PrintSpooler/res/values-gl-rES/strings.xml b/packages/PrintSpooler/res/values-gl/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-gl-rES/strings.xml
rename to packages/PrintSpooler/res/values-gl/strings.xml
diff --git a/packages/PrintSpooler/res/values-gu-rIN/strings.xml b/packages/PrintSpooler/res/values-gu/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-gu-rIN/strings.xml
rename to packages/PrintSpooler/res/values-gu/strings.xml
diff --git a/packages/PrintSpooler/res/values-hy-rAM/strings.xml b/packages/PrintSpooler/res/values-hy/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-hy-rAM/strings.xml
rename to packages/PrintSpooler/res/values-hy/strings.xml
diff --git a/packages/PrintSpooler/res/values-is-rIS/strings.xml b/packages/PrintSpooler/res/values-is/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-is-rIS/strings.xml
rename to packages/PrintSpooler/res/values-is/strings.xml
diff --git a/packages/PrintSpooler/res/values-ka-rGE/strings.xml b/packages/PrintSpooler/res/values-ka/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-ka-rGE/strings.xml
rename to packages/PrintSpooler/res/values-ka/strings.xml
diff --git a/packages/PrintSpooler/res/values-kk-rKZ/strings.xml b/packages/PrintSpooler/res/values-kk/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-kk-rKZ/strings.xml
rename to packages/PrintSpooler/res/values-kk/strings.xml
diff --git a/packages/PrintSpooler/res/values-km-rKH/strings.xml b/packages/PrintSpooler/res/values-km/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-km-rKH/strings.xml
rename to packages/PrintSpooler/res/values-km/strings.xml
diff --git a/packages/PrintSpooler/res/values-kn-rIN/strings.xml b/packages/PrintSpooler/res/values-kn/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-kn-rIN/strings.xml
rename to packages/PrintSpooler/res/values-kn/strings.xml
diff --git a/packages/PrintSpooler/res/values-ky-rKG/strings.xml b/packages/PrintSpooler/res/values-ky/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-ky-rKG/strings.xml
rename to packages/PrintSpooler/res/values-ky/strings.xml
diff --git a/packages/PrintSpooler/res/values-lo-rLA/strings.xml b/packages/PrintSpooler/res/values-lo/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-lo-rLA/strings.xml
rename to packages/PrintSpooler/res/values-lo/strings.xml
diff --git a/packages/PrintSpooler/res/values-mk-rMK/strings.xml b/packages/PrintSpooler/res/values-mk/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-mk-rMK/strings.xml
rename to packages/PrintSpooler/res/values-mk/strings.xml
diff --git a/packages/PrintSpooler/res/values-ml-rIN/strings.xml b/packages/PrintSpooler/res/values-ml/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-ml-rIN/strings.xml
rename to packages/PrintSpooler/res/values-ml/strings.xml
diff --git a/packages/PrintSpooler/res/values-mn-rMN/strings.xml b/packages/PrintSpooler/res/values-mn/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-mn-rMN/strings.xml
rename to packages/PrintSpooler/res/values-mn/strings.xml
diff --git a/packages/PrintSpooler/res/values-mr-rIN/strings.xml b/packages/PrintSpooler/res/values-mr/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-mr-rIN/strings.xml
rename to packages/PrintSpooler/res/values-mr/strings.xml
diff --git a/packages/PrintSpooler/res/values-ms-rMY/strings.xml b/packages/PrintSpooler/res/values-ms/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-ms-rMY/strings.xml
rename to packages/PrintSpooler/res/values-ms/strings.xml
diff --git a/packages/PrintSpooler/res/values-my-rMM/strings.xml b/packages/PrintSpooler/res/values-my/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-my-rMM/strings.xml
rename to packages/PrintSpooler/res/values-my/strings.xml
diff --git a/packages/PrintSpooler/res/values-ne-rNP/strings.xml b/packages/PrintSpooler/res/values-ne/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-ne-rNP/strings.xml
rename to packages/PrintSpooler/res/values-ne/strings.xml
diff --git a/packages/PrintSpooler/res/values-pa-rIN/strings.xml b/packages/PrintSpooler/res/values-pa/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-pa-rIN/strings.xml
rename to packages/PrintSpooler/res/values-pa/strings.xml
diff --git a/packages/PrintSpooler/res/values-si-rLK/strings.xml b/packages/PrintSpooler/res/values-si/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-si-rLK/strings.xml
rename to packages/PrintSpooler/res/values-si/strings.xml
diff --git a/packages/PrintSpooler/res/values-sq-rAL/strings.xml b/packages/PrintSpooler/res/values-sq/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-sq-rAL/strings.xml
rename to packages/PrintSpooler/res/values-sq/strings.xml
diff --git a/packages/PrintSpooler/res/values-ta-rIN/strings.xml b/packages/PrintSpooler/res/values-ta/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-ta-rIN/strings.xml
rename to packages/PrintSpooler/res/values-ta/strings.xml
diff --git a/packages/PrintSpooler/res/values-te-rIN/strings.xml b/packages/PrintSpooler/res/values-te/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-te-rIN/strings.xml
rename to packages/PrintSpooler/res/values-te/strings.xml
diff --git a/packages/PrintSpooler/res/values-ur-rPK/strings.xml b/packages/PrintSpooler/res/values-ur/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-ur-rPK/strings.xml
rename to packages/PrintSpooler/res/values-ur/strings.xml
diff --git a/packages/PrintSpooler/res/values-uz-rUZ/strings.xml b/packages/PrintSpooler/res/values-uz/strings.xml
similarity index 100%
rename from packages/PrintSpooler/res/values-uz-rUZ/strings.xml
rename to packages/PrintSpooler/res/values-uz/strings.xml
diff --git a/packages/SettingsLib/res/values-af/arrays.xml b/packages/SettingsLib/res/values-af/arrays.xml
index c86eb17..4cb349c 100644
--- a/packages/SettingsLib/res/values-af/arrays.xml
+++ b/packages/SettingsLib/res/values-af/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Gebruik HDCP-kontrolering net vir DRM-inhoud"</item>
<item msgid="45075631231212732">"Gebruik altyd HDCP-kontrolering"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Verstek"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Verstek"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Verstek"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Verstek"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Verstek"</item>
+ <item msgid="5618929009984956469">"16 bis per voorbeeld"</item>
+ <item msgid="3412640499234627248">"24 bis per voorbeeld"</item>
+ <item msgid="121583001492929387">"32 bis per voorbeeld"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Verstek"</item>
+ <item msgid="4726688794884191540">"16 bis per voorbeeld"</item>
+ <item msgid="305344756485516870">"24 bis per voorbeeld"</item>
+ <item msgid="244568657919675099">"32 bis per voorbeeld"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Verstek"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Verstek"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Klankgehalte verkies (990 kbps/909 kbps)"</item>
+ <item msgid="138837449700903545">"Standaard (660 kbps/606 kbps)"</item>
+ <item msgid="4777177307869441982">"Verbinding verkies (330 kbps/303 kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Klankgehalte verkies (990 kbps/909 kbps)"</item>
+ <item msgid="9091111147684472529">"Standaard (660 kbps/606 kbps)"</item>
+ <item msgid="3367904477834831032">"Verbinding verkies (330 kbps/303 kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Af"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index fcda1d1..3672fa9 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Laat altyd Wi-Fi-swerfskanderings toe"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Sellulêre data altyd aktief"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Deaktiveer absolute volume"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth-oudiokodek"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Kies Bluetooth-A2DP-kodek wat verkies word"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth-oudiovoorbeeldkoers"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Kies Bluetooth-A2DP-kodekvoorbeeldkoers wat verkies word"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth-oudiobisse per voorbeeld"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Kies die Bluetooth-A2DP-kodekbisse per voorbeeld wat verkies word"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth-oudiokanaalmodus"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Kies Bluetooth-A2DP-kodekkanaalmodus wat verkies word"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth-oudio-LDAC-speelgehalte"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Kies Bluetooth-A2DP-kodek-LDAC-speelgehalte wat verkies word"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Wys opsies vir draadlose skermsertifisering"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Verhoog Wi-Fi-aantekeningvlak, wys per SSID RSSI in Wi‑Fi-kieser"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Wanneer dit geaktiveer is, sal Wi-Fi meer aggressief wees om die dataverbinding na selfoon oor te dra wanneer die Wi-Fi-sein swak is"</string>
diff --git a/packages/SettingsLib/res/values-am/arrays.xml b/packages/SettingsLib/res/values-am/arrays.xml
index 0b68d40..0b424b3 100644
--- a/packages/SettingsLib/res/values-am/arrays.xml
+++ b/packages/SettingsLib/res/values-am/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"ለDRM ይዘት ብቻ HDCP ምልከታን ተጠቀም"</item>
<item msgid="45075631231212732">"ሁልጊዜ የHDCP ምልከታ ተጠቀም"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"ነባሪ"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"ነባሪ"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"ነባሪ"</item>
+ <item msgid="8895532488906185219">"44.1 ኪኸ"</item>
+ <item msgid="2909915718994807056">"48.0 ኪኸ"</item>
+ <item msgid="3347287377354164611">"88.2 ኪኸ"</item>
+ <item msgid="1234212100239985373">"96.0 ኪኸ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"ነባሪ"</item>
+ <item msgid="4482862757811638365">"44.1 ኪኸ"</item>
+ <item msgid="354495328188724404">"48.0 ኪኸ"</item>
+ <item msgid="7329816882213695083">"88.2 ኪኸ"</item>
+ <item msgid="6967397666254430476">"96.0 ኪኸ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"ነባሪ"</item>
+ <item msgid="5618929009984956469">"16 ቢት/ናሙና"</item>
+ <item msgid="3412640499234627248">"24 ቢት/ናሙና"</item>
+ <item msgid="121583001492929387">"32 ቢት/ናሙና"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"ነባሪ"</item>
+ <item msgid="4726688794884191540">"16 ቢት/ናሙና"</item>
+ <item msgid="305344756485516870">"24 ቢት/ናሙና"</item>
+ <item msgid="244568657919675099">"32 ቢት/ናሙና"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"ነባሪ"</item>
+ <item msgid="4106832974775067314">"ሞኖ"</item>
+ <item msgid="5571632958424639155">"ስቲሪዮ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"ነባሪ"</item>
+ <item msgid="8900559293912978337">"ሞኖ"</item>
+ <item msgid="8883739882299884241">"ስቲሪዮ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"የሚመረጠው የድምጽ ጥራት (990ኪቢ/ሴ/909ኪቢ/ሴ)"</item>
+ <item msgid="138837449700903545">"መደበኛ (660ኪቢ/ሴ/606ኪቢ/ሴ)"</item>
+ <item msgid="4777177307869441982">"የሚመረጠው ግንኙነት (330ኪቢ/ሴ/303ኪቢ/ሴ)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"የሚመረጠው የድምጽ ጥራት (990ኪቢ/ሴ/909ኪቢ/ሴ)"</item>
+ <item msgid="9091111147684472529">"መደበኛ (660ኪቢ/ሴ/606ኪቢ/ሴ)"</item>
+ <item msgid="3367904477834831032">"የሚመረጠው ግንኙነት (330ኪቢ/ሴ/303ኪቢ/ሴ)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ጠፍቷል"</item>
<item msgid="1593289376502312923">"64 ኪባ"</item>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index a281bba..42783ec 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"ሁልጊዜ የWi‑Fi ማንቀሳቀስ ቅኝቶችን ይፍቀዱ"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"የተንቀስቃሽ ስልክ ውሂብ ሁልጊዜ ንቁ"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ፍጹማዊ ድምፅን አሰናክል"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"የብሉቱዝ ኦዲዮ ኮዴክ"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"የሚመረጠውን የብሉቱዝ A2DP ኮዴክ ምረጥ"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"የብሉቱዝ ኦዲዮ ናሙና ፍጥነት"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"የሚመረጠውን የብሉቱዝ A2DP ኮዴክ ናሙና ፍጥነት ምረጥ"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"የብሉቱዝ ኦዲዮ ቢት በናሙና"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"የሚመረጠውን የብሉቱዝ A2DP ኮዴክ ቢት በናሙና ምረጥ"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"የብሉቱዝ ኦዲዮ ሰርጥ ሁነታ"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"የሚመረጠውን የብሉቱዝ A2DP ኮዴክ ሰርጥ ሁነታ ምረጥ"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"የብሉቱዝ ኦዲዮ LDAC መልሶ ማጫወት ጥራት"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"የሚመረጠውን የብሉቱዝ A2DP ኮዴክ LDAC መልሶ ማጫወት ጥራት ይምረጡ"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"የገመድ አልባ ማሳያ እውቅና ማረጋገጫ አማራጮችን አሳይ"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"የWi‑Fi ምዝግብ ማስታወሻ አያያዝ ደረጃ ጨምር፣ በWi‑Fi መምረጫ ውስጥ በአንድ SSID RSSI አሳይ"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"ሲነቃ የWi‑Fi ምልክት ዝቅተኛ ሲሆን Wi‑Fi የውሂብ ግንኙነት ለተንቀሳቃሽ ማስረከብ ላይ ይበልጥ አስገዳጅ ይሆናል"</string>
diff --git a/packages/SettingsLib/res/values-ar/arrays.xml b/packages/SettingsLib/res/values-ar/arrays.xml
index 3ae8072..ae61f64 100644
--- a/packages/SettingsLib/res/values-ar/arrays.xml
+++ b/packages/SettingsLib/res/values-ar/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"استخدام التحقق من HDCP لمحتوى DRM فقط"</item>
<item msgid="45075631231212732">"استخدام التحقق من HDCP دومًا"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"افتراضي"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"افتراضي"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"افتراضي"</item>
+ <item msgid="8895532488906185219">"44.1 كيلو هرتز"</item>
+ <item msgid="2909915718994807056">"48.0 كيلو هرتز"</item>
+ <item msgid="3347287377354164611">"88.2 كيلو هرتز"</item>
+ <item msgid="1234212100239985373">"96.0 كيلو هرتز"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"افتراضي"</item>
+ <item msgid="4482862757811638365">"44.1 كيلو هرتز"</item>
+ <item msgid="354495328188724404">"48.0 كيلو هرتز"</item>
+ <item msgid="7329816882213695083">"88.2 كيلو هرتز"</item>
+ <item msgid="6967397666254430476">"96.0 كيلو هرتز"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"افتراضي"</item>
+ <item msgid="5618929009984956469">"16 بت لكل عيّنة"</item>
+ <item msgid="3412640499234627248">"24 بت لكل عيّنة"</item>
+ <item msgid="121583001492929387">"32 بت لكل عيّنة"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"افتراضي"</item>
+ <item msgid="4726688794884191540">"16 بت لكل عيّنة"</item>
+ <item msgid="305344756485516870">"24 بت لكل عيّنة"</item>
+ <item msgid="244568657919675099">"32 بت لكل عيّنة"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"افتراضي"</item>
+ <item msgid="4106832974775067314">"أحادي"</item>
+ <item msgid="5571632958424639155">"استريو"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"افتراضي"</item>
+ <item msgid="8900559293912978337">"أحادي"</item>
+ <item msgid="8883739882299884241">"استريو"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"جودة الصوت المفضّلة (990/909 كيلوبت في الثانية)"</item>
+ <item msgid="138837449700903545">"قياسي (660/606 كيلوبت في الثانية)"</item>
+ <item msgid="4777177307869441982">"الاتصال المفضّل (330/303 كيلوبت في الثانية)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"جودة الصوت المفضّلة (990/909 كيلوبت في الثانية)"</item>
+ <item msgid="9091111147684472529">"قياسي (660/606 كيلوبت في الثانية)"</item>
+ <item msgid="3367904477834831032">"الاتصال المفضّل (330/303 كيلوبت في الثانية)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"إيقاف"</item>
<item msgid="1593289376502312923">"٦٤ كيلوبايت"</item>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index 9f6c440..e1b39c11 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"السماح دائمًا بعمليات فحص Wi-Fi للتجوال"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"بيانات الجوّال نشطة دائمًا"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"تعطيل مستوى الصوت المطلق"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ترميز صوت بلوتوث"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"حدّد ترميز بلوتوث A2DP المفضّل"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"معدّل عيّنة صوت بلوتوث"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"حدّد معدّل عيّنة ترميز A2DP بلوتوث المفضّل"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"وحدات البت لكل عيّنة في صوت بلوتوث"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"حدّد عدد وحدات البت لكل عيّنة المفضّل في ترميز بلوتوث A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"وضع قناة صوت بلوتوث"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"حدّد وضع القناة المفضّل في ترميز بلوتوث A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"جودة تشغيل صوت بلوتوث LDAC"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"حدّد جودة التشغيل المفضّلة في ترميز بلوتوث A2DP"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"عرض خيارات شهادة عرض شاشة لاسلكي"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"زيادة مستوى تسجيل Wi-Fi، وعرض لكل SSID RSSI في منتقي Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"عند تمكينه، سيكون Wi-Fi أكثر حدة في تسليم اتصال البيانات إلى الشبكة الخلوية، وذلك عندما تكون إشارة WiFi منخفضة"</string>
diff --git a/packages/SettingsLib/res/values-az-rAZ/arrays.xml b/packages/SettingsLib/res/values-az/arrays.xml
similarity index 75%
rename from packages/SettingsLib/res/values-az-rAZ/arrays.xml
rename to packages/SettingsLib/res/values-az/arrays.xml
index cd8b1e0..38b2dc0 100644
--- a/packages/SettingsLib/res/values-az-rAZ/arrays.xml
+++ b/packages/SettingsLib/res/values-az/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Yalnız DRM məzmun oxumaq üçün HDCP istifadə edin"</item>
<item msgid="45075631231212732">"Həmişə HDCP yoxlama istifadə edin"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Defolt"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Defolt"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Defolt"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Defolt"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Defolt"</item>
+ <item msgid="5618929009984956469">"16 bit/nümunə"</item>
+ <item msgid="3412640499234627248">"24 bit/nümunə"</item>
+ <item msgid="121583001492929387">"32 bit/nümunə"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Defolt"</item>
+ <item msgid="4726688794884191540">"16 bit/nümunə"</item>
+ <item msgid="305344756485516870">"24 bit/nümunə"</item>
+ <item msgid="244568657919675099">"32 bit/nümunə"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Defolt"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Defolt"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Səs keyfiyyəti tərcih edildi (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"Standart (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"Bağlantı tərcih edildi (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Səs keyfiyyəti tərcih edildi (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"Standart (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"Bağlantı tərcih edildi (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Deaktiv"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-az-rAZ/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
similarity index 95%
rename from packages/SettingsLib/res/values-az-rAZ/strings.xml
rename to packages/SettingsLib/res/values-az/strings.xml
index a53e97a..e625e32 100644
--- a/packages/SettingsLib/res/values-az-rAZ/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi axtarışlarına həmişə icazə verin"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobil data həmişə aktivdir"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Mütləq səs həcmi deaktiv edin"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio Kodek"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Tərcih edilmiş Bluetooth A2DP Kodek seçin"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Audio Nümunə Göstəricisi"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Tərcih edilmiş Bluetooth A2DP Kodek Nümunə Göstəricisi seçin"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Hər Nümunə Üçün Bluetooth Audio Bit"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Hər nümunə üçün tərcih edilmiş Bluetooth A2DP Kodek Bit seçin"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio Kanal Rejimi"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Tərcih edilmiş Bluetooth A2DP Kodek Kanal Rejimi seçin"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth Audio LDAC Oxutma Keyfiyyəti"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Tərcih edilmiş Bluetooth A2DP Kodek LDAC Oxutma Keyfiyyəti seçin"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Simsiz displey sertifikatlaşması üçün seçimləri göstərir"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi giriş səviyyəsini qaldırın, Wi‑Fi seçəndə hər SSID RSSI üzrə göstərin"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Aktiv olanda, Wi‑Fi sianqlı zəif olan zaman, Mobil şəbəkə data bağlantısına nisbətən, Wi‑Fi daha aqressiv olacaq"</string>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml b/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
index dbee985..9f7cf56 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Koristi HDCP proveru samo za DRM sadržaj"</item>
<item msgid="45075631231212732">"Uvek koristi HDCP proveru"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Podrazumevano"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Podrazumevano"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Podrazumevano"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Podrazumevano"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Podrazumevano"</item>
+ <item msgid="5618929009984956469">"16 bitova po uzorku"</item>
+ <item msgid="3412640499234627248">"24 bita po uzorku"</item>
+ <item msgid="121583001492929387">"32 bita po uzorku"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Podrazumevano"</item>
+ <item msgid="4726688794884191540">"16 bitova po uzorku"</item>
+ <item msgid="305344756485516870">"24 bita po uzorku"</item>
+ <item msgid="244568657919675099">"32 bita po uzorku"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Podrazumevano"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Podrazumevano"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Željeni kvalitet zvuka (990 kb/s/909 kb/s)"</item>
+ <item msgid="138837449700903545">"Standardno (660 kb/s/606 kb/s)"</item>
+ <item msgid="4777177307869441982">"Željena veza (330 kb/s/303 kb/s)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Željeni kvalitet zvuka (990 kb/s/909 kb/s)"</item>
+ <item msgid="9091111147684472529">"Standardno (660 kb/s/606 kb/s)"</item>
+ <item msgid="3367904477834831032">"Željena veza (330 kb/s/303 kb/s)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Isključeno"</item>
<item msgid="1593289376502312923">"64 kB"</item>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index cad5980..3446a1a 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Uvek dozvoli skeniranje Wi‑Fi-ja u romingu"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Podaci za mobilne uređaje su uvek aktivni"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Onemogući glavno podešavanje jačine zvuka"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth audio kodek"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Izaberite željeni Bluetooth A2DP kodek"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Brzina uzorkovanja za Bluetooth audio"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Izaberite željenu brzinu uzorkovanja za Bluetooth A2DP kodek"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bitova po uzorku za Bluetooth audio"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Izaberite željeni broj bitova po uzorku za Bluetooth A2DP kodek"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Režim kanala za Bluetooth audio"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Izaberite željeni režim kanala za Bluetooth A2DP kodek"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Kvalitet LDAC snimka za Bluetooth audio"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Izaberite željeni kvalitet LDAC snimka za Bluetooth A2DP kodek"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Prikaz opcija za sertifikaciju bežičnog ekrana"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povećava nivo evidentiranja za Wi‑Fi. Prikaz po SSID RSSI-u u biraču Wi‑Fi mreže"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Kada se omogući, Wi‑Fi će biti agresivniji pri prebacivanju mreže za prenos podataka na Mobilnu, kada je Wi‑Fi signal slab"</string>
diff --git a/packages/SettingsLib/res/values-be-rBY/arrays.xml b/packages/SettingsLib/res/values-be/arrays.xml
similarity index 75%
rename from packages/SettingsLib/res/values-be-rBY/arrays.xml
rename to packages/SettingsLib/res/values-be/arrays.xml
index 44d3bf2..1266d2c 100644
--- a/packages/SettingsLib/res/values-be-rBY/arrays.xml
+++ b/packages/SettingsLib/res/values-be/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Выкарыстанне праверкі HDCP только для змесціва, абароненага DRM"</item>
<item msgid="45075631231212732">"Заўсёды выкарыстоўваць праверку HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Стандартная"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Стандартная"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Стандартная"</item>
+ <item msgid="8895532488906185219">"44,1 кГц"</item>
+ <item msgid="2909915718994807056">"48,0 кГц"</item>
+ <item msgid="3347287377354164611">"88,2 кГц"</item>
+ <item msgid="1234212100239985373">"96,0 кГц"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Стандартная"</item>
+ <item msgid="4482862757811638365">"44,1 кГц"</item>
+ <item msgid="354495328188724404">"48,0 кГц"</item>
+ <item msgid="7329816882213695083">"88,2 кГц"</item>
+ <item msgid="6967397666254430476">"96,0 кГц"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Стандартная"</item>
+ <item msgid="5618929009984956469">"16 бітаў/сэмпл"</item>
+ <item msgid="3412640499234627248">"24 біты/сэмпл"</item>
+ <item msgid="121583001492929387">"32 біты/сэмпл"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Стандартная"</item>
+ <item msgid="4726688794884191540">"16 бітаў/сэмпл"</item>
+ <item msgid="305344756485516870">"24 біты/сэмпл"</item>
+ <item msgid="244568657919675099">"32 біты/сэмпл"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Стандартная"</item>
+ <item msgid="4106832974775067314">"Мона"</item>
+ <item msgid="5571632958424639155">"Стэрэа"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Стандартная"</item>
+ <item msgid="8900559293912978337">"Мона"</item>
+ <item msgid="8883739882299884241">"Стэрэа"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Прыярытэтная якасць гуч. (990/909кбіт/с)"</item>
+ <item msgid="138837449700903545">"Стандартная (660/606кбіт/с)"</item>
+ <item msgid="4777177307869441982">"Прыярытэтнае падключэнне (330/303кбіт/с)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Прыярытэтная якасць гуч. (990/909кбіт/с)"</item>
+ <item msgid="9091111147684472529">"Стандартная (660/606кбіт/с)"</item>
+ <item msgid="3367904477834831032">"Прыярытэтнае падключэнне (330/303кбіт/с)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Выкл."</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-be-rBY/strings.xml b/packages/SettingsLib/res/values-be/strings.xml
similarity index 96%
rename from packages/SettingsLib/res/values-be-rBY/strings.xml
rename to packages/SettingsLib/res/values-be/strings.xml
index ba5b100..f2e1cf6 100644
--- a/packages/SettingsLib/res/values-be-rBY/strings.xml
+++ b/packages/SettingsLib/res/values-be/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Заўсёды дазваляць роўмінгавае сканіраванне Wi‑Fi"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Перадача даных мабільнай сувязі заўсёды актыўна"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Адключыць абсалютны гук"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Кодэк Bluetooth Audio"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Выберыце прыярытэтны кодэк Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Частата дыскрэтызацыі Bluetooth Audio"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Выберыце прыярытэтную частату дыскрэтызацыі для кодэка Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Біты на сэмпл для Bluetooth Audio"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Выберыце прыярытэтную колькасць бітаў на сэмпл для кодэка Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Канальны рэжым Bluetooth Audio"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Выберыце прыярытэтны рэжым для кодэка Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Якасць прайгравання для Bluetooth Audio LDAC"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Выберыце прыярытэтную якасць прайгравання для кодэка Bluetooth A2DP LDAC"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Паказаць опцыі сертыфікацыі бесправаднога дысплея"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Падвыс. узровень дэтал-цыі журнала Wi‑Fi у залежн. ад SSID RSSI у Wi‑Fi Picker"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Калі ўкл., прылада будзе больш інтэнсіўна імкнуцца перайсці з падлуч. да Wi-Fi на падлуч. да маб. сеткі, калі сігнал Wi‑Fi слабы"</string>
diff --git a/packages/SettingsLib/res/values-bg/arrays.xml b/packages/SettingsLib/res/values-bg/arrays.xml
index b9e3352..d220a07 100644
--- a/packages/SettingsLib/res/values-bg/arrays.xml
+++ b/packages/SettingsLib/res/values-bg/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Да се използва проверка с HDCP само за DRM съдържание"</item>
<item msgid="45075631231212732">"Винаги да се използва проверка с HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Стандартно"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Стандартно"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Стандартно"</item>
+ <item msgid="8895532488906185219">"44,1 кХц"</item>
+ <item msgid="2909915718994807056">"48 кХц"</item>
+ <item msgid="3347287377354164611">"88,2 кХц"</item>
+ <item msgid="1234212100239985373">"96 кХц"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Стандартно"</item>
+ <item msgid="4482862757811638365">"44,1 кХц"</item>
+ <item msgid="354495328188724404">"48 кХц"</item>
+ <item msgid="7329816882213695083">"88,2 кХц"</item>
+ <item msgid="6967397666254430476">"96 кХц"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Стандартно"</item>
+ <item msgid="5618929009984956469">"16 бита/дискрет"</item>
+ <item msgid="3412640499234627248">"24 бита/дискрет"</item>
+ <item msgid="121583001492929387">"32 бита/дискрет"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Стандартно"</item>
+ <item msgid="4726688794884191540">"16 бита/дискрет"</item>
+ <item msgid="305344756485516870">"24 бита/дискрет"</item>
+ <item msgid="244568657919675099">"32 бита/дискрет"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Стандартно"</item>
+ <item msgid="4106832974775067314">"Моно"</item>
+ <item msgid="5571632958424639155">"Стерео"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Стандартно"</item>
+ <item msgid="8900559293912978337">"Моно"</item>
+ <item msgid="8883739882299884241">"Стерео"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Предпоч. кач. на звука (990 или 909 кб/сек)"</item>
+ <item msgid="138837449700903545">"Стандартно (660 или 606 кб/сек)"</item>
+ <item msgid="4777177307869441982">"Предпоч. връзка (330 или 303 кб/сек)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Предпоч. кач. на звука (990 или 909 кб/сек)"</item>
+ <item msgid="9091111147684472529">"Стандартно (660 или 606 кб/сек)"</item>
+ <item msgid="3367904477834831032">"Предпоч. връзка (330 или 303 кб/сек)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Изключено"</item>
<item msgid="1593289376502312923">"64 КБ"</item>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index b32388e..21d1a98 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Сканирането за роуминг на Wi-Fi да е разрешено винаги"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Винаги активни клетъчни данни"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Деактивиране на пълната сила на звука"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Аудиокодек за Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Изберете предпочитания кодек за Bluetooth с профил A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Честота на дискретизация за звука през Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Изберете предпочитаната честота на дискретизация за кодека за Bluetooth с профил A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Битове на дискрет за звука през Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Изберете предпочитание за битове на дискрет за кодека за Bluetooth с профил A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Режим на канала на звука през Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Изберете предпочитания режим на канала за кодека за Bluetooth с профил A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Качество на възпроизвеждане на звука през Bluetooth с технологията LDAC"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Изберете предпочитаното качество на възпроизвеждане с технологията LDAC за кодека за Bluetooth с профил A2DP"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Показване на опциите за сертифициране на безжичния дисплей"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"По-подробно регистр. на Wi‑Fi – данни за RSSI на SSID в инстр. за избор на Wi‑Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"При активиране предаването на връзката за данни от Wi-Fi към мобилната мрежа ще е по-агресивно, когато Wi-Fi сигналът е слаб"</string>
diff --git a/packages/SettingsLib/res/values-bn-rBD/arrays.xml b/packages/SettingsLib/res/values-bn/arrays.xml
similarity index 77%
rename from packages/SettingsLib/res/values-bn-rBD/arrays.xml
rename to packages/SettingsLib/res/values-bn/arrays.xml
index d9a3b04..6ce7b14 100644
--- a/packages/SettingsLib/res/values-bn-rBD/arrays.xml
+++ b/packages/SettingsLib/res/values-bn/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"শুধুমাত্র DRM সামগ্রীর জন্য HDCP চেক করা ব্যবহার করুন"</item>
<item msgid="45075631231212732">"সর্বদা HDCP পরীক্ষণ ব্যবহার করুন"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"ডিফল্ট"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"ডিফল্ট"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"ডিফল্ট"</item>
+ <item msgid="8895532488906185219">"৪৪.১ kHz"</item>
+ <item msgid="2909915718994807056">"৪৮.০ kHz"</item>
+ <item msgid="3347287377354164611">"৮৮.২ kHz"</item>
+ <item msgid="1234212100239985373">"৯৬.০ kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"ডিফল্ট"</item>
+ <item msgid="4482862757811638365">"৪৪.১ kHz"</item>
+ <item msgid="354495328188724404">"৪৮.০ kHz"</item>
+ <item msgid="7329816882213695083">"৮৮.২ kHz"</item>
+ <item msgid="6967397666254430476">"৯৬.০ kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"ডিফল্ট"</item>
+ <item msgid="5618929009984956469">"১৬ বিট/নমুনা"</item>
+ <item msgid="3412640499234627248">"২৪ বিট/নমুনা"</item>
+ <item msgid="121583001492929387">"৩২ বিট/নমুনা"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"ডিফল্ট"</item>
+ <item msgid="4726688794884191540">"১৬ বিট/নমুনা"</item>
+ <item msgid="305344756485516870">"২৪ বিট/নমুনা"</item>
+ <item msgid="244568657919675099">"৩২ বিট/নমুনা"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"ডিফল্ট"</item>
+ <item msgid="4106832974775067314">"মোনো"</item>
+ <item msgid="5571632958424639155">"স্টিরিও"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"ডিফল্ট"</item>
+ <item msgid="8900559293912978337">"মোনো"</item>
+ <item msgid="8883739882299884241">"স্টিরিও"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"পছন্দের শব্দের মান (৯৯০kbps/৯০৯kbps)"</item>
+ <item msgid="138837449700903545">"মানক (৬৬০kbps/৬০৬kbps)"</item>
+ <item msgid="4777177307869441982">"পছন্দের সংযোগ (৩৩০kbps/৩০৩kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"পছন্দের শব্দের মান (৯৯০kbps/৯০৯kbps)"</item>
+ <item msgid="9091111147684472529">"মানক (৬৬০kbps/৬০৬kbps)"</item>
+ <item msgid="3367904477834831032">"পছন্দের সংযোগ (৩৩০kbps/৩০৩kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"বন্ধ আছে"</item>
<item msgid="1593289376502312923">"৬৪K"</item>
diff --git a/packages/SettingsLib/res/values-bn-rBD/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml
similarity index 96%
rename from packages/SettingsLib/res/values-bn-rBD/strings.xml
rename to packages/SettingsLib/res/values-bn/strings.xml
index 3ee2642e..66fa0673 100644
--- a/packages/SettingsLib/res/values-bn-rBD/strings.xml
+++ b/packages/SettingsLib/res/values-bn/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"সর্বদা Wifi রোম স্ক্যানকে অনুমতি দিন"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"সেলুলার ডেটা সর্বদাই সক্রিয় থাকে"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"চূড়ান্ত ভলিউম অক্ষম করুন"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ব্লুটুথ অডিও কোডেক"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"পছন্দের ব্লুটুথ A2DP কোডেক বেছে নিন"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ব্লুটুথ অডিওর নমুনা হার"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"পছন্দের ব্লুটুথ A2DP কোডেক নমুনা হার বেছে নিন"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"নমুনা প্রতি ব্লুটুথ অডিও বিট"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"নমুনা প্রতি পছন্দের ব্লুটুথ A2DP কোডেক বিট বেছে নিন"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ব্লুটুথ অডিও চ্যানেল মোড"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"পছন্দের ব্লুটুথ A2DP কোডেক চ্যানেল মোড বেছে নিন"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"ব্লুটুথ অডিও LDAC প্লেব্যাকের মান"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"পছন্দের ব্লুটুথ A2DP কোডেক LDAC প্লেব্যাকের মান বেছে নিন"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ওয়্যারলেস প্রদর্শন সার্টিফিকেশন জন্য বিকল্পগুলি দেখান"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"ওয়াই-ফাই লগিং স্তর বাড়ান, ওয়াই-ফাই চয়নকারীতে SSID RSSI অনুযায়ী দেখান"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"সক্ষম করা থাকলে, নিম্নমানের ওয়াই-ফাই সিগন্যালের ক্ষেত্রে, সেলুলার-এ ডেটা সংযোগ প্রদান করতে ওয়াই-ফাই আরো বেশি শক্তিশালীভাবে কাজ করবে"</string>
diff --git a/packages/SettingsLib/res/values-bs-rBA/arrays.xml b/packages/SettingsLib/res/values-bs/arrays.xml
similarity index 74%
rename from packages/SettingsLib/res/values-bs-rBA/arrays.xml
rename to packages/SettingsLib/res/values-bs/arrays.xml
index 3d99ead..93e0678 100644
--- a/packages/SettingsLib/res/values-bs-rBA/arrays.xml
+++ b/packages/SettingsLib/res/values-bs/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Koristi HDCP provjeru samo za DRM sadržaj"</item>
<item msgid="45075631231212732">"Uvijek koristi HDCP provjeru"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Podrazumijevano"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Podrazumijevano"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Zadano"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Zadano"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Podrazumijevano"</item>
+ <item msgid="5618929009984956469">"16 bitova/uzorak"</item>
+ <item msgid="3412640499234627248">"24 bitova/uzorak"</item>
+ <item msgid="121583001492929387">"32 bitova/uzorak"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Podrazumijevano"</item>
+ <item msgid="4726688794884191540">"16 bitova/uzorak"</item>
+ <item msgid="305344756485516870">"24 bitova/uzorak"</item>
+ <item msgid="244568657919675099">"32 bitova/uzorak"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Podrazumijevano"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Podrazumijevano"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Željena kvaliteta zvuka (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"Standardni (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"Željena veza (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Željena kvaliteta zvuka (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"Standardni (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"Željena veza (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Isključeno"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-bs-rBA/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml
similarity index 95%
rename from packages/SettingsLib/res/values-bs-rBA/strings.xml
rename to packages/SettingsLib/res/values-bs/strings.xml
index b207129..f2ae338 100644
--- a/packages/SettingsLib/res/values-bs-rBA/strings.xml
+++ b/packages/SettingsLib/res/values-bs/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Uvijek dopustiti Wi-Fi lutajuće skeniranje"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobilni podaci uvijek aktivni"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Onemogućite apsolutnu jačinu zvuka"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio kodek"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Izaberite željeni Bluetooth A2DP kodek"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Brzina uzorkovanja za Bluetooth audio"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Izaberite željenu brzinu uzorkovanja za Bluetooth A2DP kodek"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth audio bitovi po uzorku"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Izaberite željeni broj bitova po uzorku za Bluetooth A2DP kodek"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Način Bluetooth audio kanala"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Izaberite željeni način kanala Bluetooth A2DP kodeka"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Kvaliteta reprodukcije za Bluetooth Audio LDAC"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Izaberite željenu kvalitetu LDAC reprodukcije za Bluetooth A2DP kodek"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Pokaži opcije za certifikaciju Bežičnog prikaza"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povećajte nivo Wi-Fi zapisivanja, pokazati po SSID RSSI Wi-Fi Picker"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Kada je omogućeno, Wi-Fi će biti agresivniji u predavanju podatkovne veze mobilnoj, kada je Wi-Fi signal slab"</string>
diff --git a/packages/SettingsLib/res/values-ca/arrays.xml b/packages/SettingsLib/res/values-ca/arrays.xml
index 4c9ad46..6cb4217 100644
--- a/packages/SettingsLib/res/values-ca/arrays.xml
+++ b/packages/SettingsLib/res/values-ca/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Utilitza la comprovació HDCP només per a contingut DRM"</item>
<item msgid="45075631231212732">"Utilitza sempre la comprovació HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Predeterminat"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Predeterminat"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Predeterminat"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Predeterminat"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Predeterminat"</item>
+ <item msgid="5618929009984956469">"16 bits/mostra"</item>
+ <item msgid="3412640499234627248">"24 bits/mostra"</item>
+ <item msgid="121583001492929387">"32 bits/mostra"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Predeterminat"</item>
+ <item msgid="4726688794884191540">"16 bits/mostra"</item>
+ <item msgid="305344756485516870">"24 bits/mostra"</item>
+ <item msgid="244568657919675099">"32 bits/mostra"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Predeterminat"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Estèreo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Predeterminat"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Estèreo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Qualitat del so preferida (990 kbps/909 kbps)"</item>
+ <item msgid="138837449700903545">"Estàndard (660 kbps/606 kbps)"</item>
+ <item msgid="4777177307869441982">"Connexió preferida (330 kbps/303 kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Qualitat del so preferida (990 kbps/909 kbps)"</item>
+ <item msgid="9091111147684472529">"Estàndard (660 kbps/606 kbps)"</item>
+ <item msgid="3367904477834831032">"Connexió preferida (330 kbps/303 kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"No"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index c360f87..ad83d6b 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Permet sempre cerca de Wi-Fi en ininerància"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Dades mòbils sempre actives"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desactiva el volum absolut"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Còdec d\'àudio per Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Selecciona el còdec Bluetooth A2DP preferit"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Velocitat de mostra d’àudio per Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Selecciona la velocitat de mostra preferida del còdec Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits per mostra de l\'àudio per Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Selecciona els bits per mostra preferits del còdec Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Mode de canal de l\'àudio per Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Selecciona el mode de canal preferit del còdec Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Qualitat de reproducció LDAC de l\'àudio per Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Selecciona la qualitat de reproducció LDAC preferida del còdec Bluetooth A2DP"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostra les opcions de certificació de pantalla sense fil"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Augmenta nivell de registre Wi‑Fi i mostra\'l per SSID RSSI al Selector de Wi‑Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Si s\'activa, la Wi-Fi serà més agressiva en transferir la connexió de dades al mòbil, si el senyal de la Wi-Fi no és estable"</string>
diff --git a/packages/SettingsLib/res/values-cs/arrays.xml b/packages/SettingsLib/res/values-cs/arrays.xml
index cf738c8..bba5a16 100644
--- a/packages/SettingsLib/res/values-cs/arrays.xml
+++ b/packages/SettingsLib/res/values-cs/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Použít kontrolu HDCP pouze pro obsah DRM"</item>
<item msgid="45075631231212732">"Vždy používat kontrolu HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Výchozí"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Výchozí"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Výchozí"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Výchozí"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Výchozí"</item>
+ <item msgid="5618929009984956469">"16 bitů / vzorek"</item>
+ <item msgid="3412640499234627248">"24 bitů / vzorek"</item>
+ <item msgid="121583001492929387">"32 bitů / vzorek"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Výchozí"</item>
+ <item msgid="4726688794884191540">"16 bitů / vzorek"</item>
+ <item msgid="305344756485516870">"24 bitů / vzorek"</item>
+ <item msgid="244568657919675099">"32 bitů / vzorek"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Výchozí"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Výchozí"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Přednost kvality zvuku (990 kb/s / 909 kb/s)"</item>
+ <item msgid="138837449700903545">"Standardní (660 kb/s / 606 kB/s)"</item>
+ <item msgid="4777177307869441982">"Přednost připojení (330 kb/s / 303 kb/s)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Přednost kvality zvuku (990 kb/s / 909 kb/s)"</item>
+ <item msgid="9091111147684472529">"Standardní (660 kb/s / 606 kB/s)"</item>
+ <item msgid="3367904477834831032">"Přednost připojení (330 kb/s / 303 kb/s)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Vypnuto"</item>
<item msgid="1593289376502312923">"64 kB"</item>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index 159a939..706aa91 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Vždy povolit Wi-Fi roaming"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobilní data jsou vždy aktivní"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Zakázat absolutní hlasitost"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio – kodek"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Vyberte preferovaný kodek Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Audio – vzorkovací frekvence"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Vybrat vzorkovací frekvenci pro preferovaný kodek Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth Audio – počet bitů na vzorek"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Vybrat počet bitů na vzorek pro preferovaný kodek Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio – režim kanálu"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Vybrat režim kanálu pro preferovaný kodek Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth Audio LDAC – kvalita přehrávání"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Vybrat kvalitu přehrávání pro preferovaný kodek Bluetooth A2DP LDAC"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Zobrazit možnosti certifikace bezdrátového displeje"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Zvýšit úroveň protokolování Wi‑Fi zobrazenou v SSID a RSSI při výběru sítě Wi‑Fi."</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Pokud je tato možnost zapnuta, bude síť Wi-Fi agresivnější při předávání datového připojení mobilní síti při slabém signálu Wi-Fi."</string>
diff --git a/packages/SettingsLib/res/values-da/arrays.xml b/packages/SettingsLib/res/values-da/arrays.xml
index 2f82cf1..6ae0aa8 100644
--- a/packages/SettingsLib/res/values-da/arrays.xml
+++ b/packages/SettingsLib/res/values-da/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Brug kun HDCP-kontrol ved DRM-indhold"</item>
<item msgid="45075631231212732">"Brug altid HDCP-kontrol"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Standard"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Standard"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Standard"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Standard"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Standard"</item>
+ <item msgid="5618929009984956469">"16 bit pr. eksempel"</item>
+ <item msgid="3412640499234627248">"24 bit pr. eksempel"</item>
+ <item msgid="121583001492929387">"32 bit pr. eksempel"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Standard"</item>
+ <item msgid="4726688794884191540">"16 bit pr. eksempel"</item>
+ <item msgid="305344756485516870">"24 bit pr. eksempel"</item>
+ <item msgid="244568657919675099">"32 bit pr. eksempel"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Standard"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Standard"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Lydkvalitet foretrækkes (990 kbps/909 kbps)"</item>
+ <item msgid="138837449700903545">"Standard (660 kbps/606 kbps)"</item>
+ <item msgid="4777177307869441982">"Forbindelse foretrækkes (330 kbps/303 kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Lydkvalitet foretrækkes (990 kbps/909 kbps)"</item>
+ <item msgid="9091111147684472529">"Standard (660 kbps/606 kbps)"</item>
+ <item msgid="3367904477834831032">"Forbindelse foretrækkes (330 kbps/303 kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Fra"</item>
<item msgid="1593289376502312923">"64 kB"</item>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index 49f1899..c6e6fb7 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Tillad altid scanning af Wi-Fi-roaming"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobildata altid aktiveret"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Deaktiver absolut lydstyrke"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth-lydcodec"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Vælg foretrukken Bluetooth A2DP-codec"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Eksempelfrekvens for Bluetooth-lyd"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Vælg eksempelfrekvens for foretrukken Bluetooth A2DP-codec"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bit pr. eksempel for Bluetooth-lyd"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Vælg bit pr. eksempel for foretrukken Bluetooth A2DP-codec"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Kanaltilstand for Bluetooth-lyd"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Vælg kanaltilstand for foretrukken Bluetooth A2DP-codec"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"LDAC-afspilningskvalitet for Bluetooth-lyd"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Vælg LDAC-afspilningskvalitet for foretrukken Bluetooth A2DP-codec"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Vis valgmuligheder for certificering af trådløs skærm"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Øg mængden af Wi‑Fi-logføring. Vis opdelt efter SSID RSSI i Wi‑Fi-vælgeren"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Når dette er aktiveret, gennemtvinges en overdragelse af dataforbindelsen fra Wi-Fi til mobilnetværk, når Wi-Fi-signalet er svagt"</string>
diff --git a/packages/SettingsLib/res/values-de/arrays.xml b/packages/SettingsLib/res/values-de/arrays.xml
index f5423ba..935c2b4 100644
--- a/packages/SettingsLib/res/values-de/arrays.xml
+++ b/packages/SettingsLib/res/values-de/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"HDCP-Prüfung nur für DRM-Inhalte verwenden"</item>
<item msgid="45075631231212732">"HDCP-Prüfung immer verwenden"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Standard"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Standard"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Standard"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Standard"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Standard"</item>
+ <item msgid="5618929009984956469">"16 Bits pro Sample"</item>
+ <item msgid="3412640499234627248">"24 Bits pro Sample"</item>
+ <item msgid="121583001492929387">"32 Bits pro Sample"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Standard"</item>
+ <item msgid="4726688794884191540">"16 Bits pro Sample"</item>
+ <item msgid="305344756485516870">"24 Bits pro Sample"</item>
+ <item msgid="244568657919675099">"32 Bits pro Sample"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Standard"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Standard"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Bevorzugte Tonqualität (990 kbit/s / 909 kbit/s)"</item>
+ <item msgid="138837449700903545">"Standard (660 kbit/s / 606 kbit/s)"</item>
+ <item msgid="4777177307869441982">"Bevorzugte Verbindung (330 kbit/s / 303 kbit/s)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Bevorzugte Tonqualität (990 kbit/s / 909 kbit/s)"</item>
+ <item msgid="9091111147684472529">"Standard (660 kbit/s / 606 kbit/s)"</item>
+ <item msgid="3367904477834831032">"Bevorzugte Verbindung (330 kbit/s / 303 kbit/s)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Aus"</item>
<item msgid="1593289376502312923">"64.000"</item>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index 95ac313..0ce1384 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"WLAN-Roamingsuchen immer zulassen"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobile Datennutzung immer aktiviert"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Maximallautstärke deaktivieren"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth-Audio-Codec"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Bevorzugten Bluetooth-A2DP-Codec auwählen"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth-Audio-Abtastrate"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Bevorzugten Bluetooth-A2DP-Codec auswählen/Abtastrate"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth-Audio/Bits pro Sample"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Bevorzugten Bluetooth-A2DP-Codec auswählen/Bits Pro Sample"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modus des Bluetooth-Audiokanals"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Bevorzugten Bluetooth-A2DP-Codec auswählen/Modus des Kanals"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"LDAC-Wiedergabequalität von Bluetooth-Audio"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Bevorzugten Bluetooth-A2DP-Codec auswählen/LDAC-Wiedergabequalität"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Optionen zur Zertifizierung für kabellose Übertragung anzeigen"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Level für WLAN-Protokollierung erhöhen, in WiFi Picker pro SSID-RSSI anzeigen"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Wenn diese Option aktiviert ist, ist WLAN bei schwachem Signal bei der Übergabe der Datenverbindung an den Mobilfunk aggressiver."</string>
diff --git a/packages/SettingsLib/res/values-el/arrays.xml b/packages/SettingsLib/res/values-el/arrays.xml
index 9a8d48e..04e1a8c 100644
--- a/packages/SettingsLib/res/values-el/arrays.xml
+++ b/packages/SettingsLib/res/values-el/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Χρήση ελέγχου HDCP μόνο για περιεχόμενο DRM"</item>
<item msgid="45075631231212732">"Να χρησιμοποιείται πάντα έλεγχος HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Προεπιλογή"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Προεπιλογή"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Προεπιλογή"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Προεπιλογή"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Προεπιλογή"</item>
+ <item msgid="5618929009984956469">"16 bit/δείγμα"</item>
+ <item msgid="3412640499234627248">"24 bit/δείγμα"</item>
+ <item msgid="121583001492929387">"32 bit/δείγμα"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Προεπιλογή"</item>
+ <item msgid="4726688794884191540">"16 bit/δείγμα"</item>
+ <item msgid="305344756485516870">"24 bit/δείγμα"</item>
+ <item msgid="244568657919675099">"32 bit/δείγμα"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Προεπιλογή"</item>
+ <item msgid="4106832974775067314">"Μονοφωνικό"</item>
+ <item msgid="5571632958424639155">"Στερεοφωνικό"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Προεπιλογή"</item>
+ <item msgid="8900559293912978337">"Μονοφωνικό"</item>
+ <item msgid="8883739882299884241">"Στερεοφωνικό"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Προτιμ. ποιότητα ήχου (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"Τυπική (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"Προτιμώμενη σύνδεση (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Προτιμ. ποιότητα ήχου (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"Τυπική (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"Προτιμώμενη σύνδεση (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Ανενεργό"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index f331080..8d3df55 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Να επιτρέπεται πάντα η σάρωση Wi-Fi κατά την περιαγωγή"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Πάντα ενεργά δεδομένα κινητής τηλεφωνίας"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Απενεργοποίηση απόλυτης έντασης"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Κωδικοποιητής ήχου Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Επιλέξτε τον προτιμώμενο κωδικοποιητή A2DP Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Ρυθμός δειγματοληψίας ήχου Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Επιλέξτε τον προτιμώμενο ρυθμό δειγματοληψίας του κωδικοποιητή A2DP Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bit ανά δείγμα ήχου Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Επιλέξτε τα προτιμώμενα bit ανά δείγμα για τον κωδικοποιητή A2DP Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Λειτουργία καναλιού ήχου Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Επιλέξτε την προτιμώμενη λειτουργία καναλιού κωδικοποιητή A2DP Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Ποιότητα αναπαραγωγής LDAC ήχου Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Επιλέξτε την προτιμώμενη ποιότητα αναπαραγωγής LDAC του κωδικοποιητή A2DP Bluetooth"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Εμφάνιση επιλογών για πιστοποίηση ασύρματης οθόνης"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Αύξηση επιπέδου καταγ. Wi-Fi, εμφάνιση ανά SSID RSSI στο εργαλείο επιλογής Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Όταν είναι ενεργό, το Wi-Fi θα μεταβιβάζει πιο επιθετικά τη σύνδ.δεδομένων σε δίκτυο κινητής τηλ., όταν το σήμα Wi-Fi είναι χαμηλό"</string>
diff --git a/packages/SettingsLib/res/values-en-rAU/arrays.xml b/packages/SettingsLib/res/values-en-rAU/arrays.xml
index 6093051..5242be3 100644
--- a/packages/SettingsLib/res/values-en-rAU/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rAU/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item>
<item msgid="45075631231212732">"Always use HDCP checking"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Default"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Default"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Default"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Default"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Default"</item>
+ <item msgid="5618929009984956469">"16 bits/sample"</item>
+ <item msgid="3412640499234627248">"24 bits/sample"</item>
+ <item msgid="121583001492929387">"32 bits/sample"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Default"</item>
+ <item msgid="4726688794884191540">"16 bits/sample"</item>
+ <item msgid="305344756485516870">"24 bits/sample"</item>
+ <item msgid="244568657919675099">"32 bits/sample"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Default"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Default"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Sound quality preferred (990 Kbps/909 Kbps)"</item>
+ <item msgid="138837449700903545">"Standard (660 Kbps/606 Kbps)"</item>
+ <item msgid="4777177307869441982">"Connection preferred (330 Kbps/303 Kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Sound quality preferred (990 Kbps/909 Kbps)"</item>
+ <item msgid="9091111147684472529">"Standard (660 Kbps/606 Kbps)"</item>
+ <item msgid="3367904477834831032">"Connection preferred (330 Kbps/303 Kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Off"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index e27822f..f09206d 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Always allow Wi‑Fi Roam Scans"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobile data always active"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Disable absolute volume"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio Codec"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Select Preferred Bluetooth A2DP Codec"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Audio Sample Rate"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Select Preferred Bluetooth A2DP Codec Sample Rate"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth Audio Bits Per Sample"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Select Preferred Bluetooth A2DP Codec Bits Per Sample"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio Channel Mode"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Select Preferred Bluetooth A2DP Codec Channel Mode"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth Audio LDAC Playback Quality"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Select Preferred Bluetooth A2DP Codec LDAC Playback Quality"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"When enabled, Wi‑Fi will be more aggressive in handing over the data connection to Mobile, when Wi‑Fi signal is low"</string>
diff --git a/packages/SettingsLib/res/values-en-rGB/arrays.xml b/packages/SettingsLib/res/values-en-rGB/arrays.xml
index 6093051..5242be3 100644
--- a/packages/SettingsLib/res/values-en-rGB/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rGB/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item>
<item msgid="45075631231212732">"Always use HDCP checking"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Default"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Default"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Default"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Default"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Default"</item>
+ <item msgid="5618929009984956469">"16 bits/sample"</item>
+ <item msgid="3412640499234627248">"24 bits/sample"</item>
+ <item msgid="121583001492929387">"32 bits/sample"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Default"</item>
+ <item msgid="4726688794884191540">"16 bits/sample"</item>
+ <item msgid="305344756485516870">"24 bits/sample"</item>
+ <item msgid="244568657919675099">"32 bits/sample"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Default"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Default"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Sound quality preferred (990 Kbps/909 Kbps)"</item>
+ <item msgid="138837449700903545">"Standard (660 Kbps/606 Kbps)"</item>
+ <item msgid="4777177307869441982">"Connection preferred (330 Kbps/303 Kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Sound quality preferred (990 Kbps/909 Kbps)"</item>
+ <item msgid="9091111147684472529">"Standard (660 Kbps/606 Kbps)"</item>
+ <item msgid="3367904477834831032">"Connection preferred (330 Kbps/303 Kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Off"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index e27822f..f09206d 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Always allow Wi‑Fi Roam Scans"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobile data always active"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Disable absolute volume"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio Codec"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Select Preferred Bluetooth A2DP Codec"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Audio Sample Rate"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Select Preferred Bluetooth A2DP Codec Sample Rate"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth Audio Bits Per Sample"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Select Preferred Bluetooth A2DP Codec Bits Per Sample"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio Channel Mode"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Select Preferred Bluetooth A2DP Codec Channel Mode"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth Audio LDAC Playback Quality"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Select Preferred Bluetooth A2DP Codec LDAC Playback Quality"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"When enabled, Wi‑Fi will be more aggressive in handing over the data connection to Mobile, when Wi‑Fi signal is low"</string>
diff --git a/packages/SettingsLib/res/values-en-rIN/arrays.xml b/packages/SettingsLib/res/values-en-rIN/arrays.xml
index 6093051..5242be3 100644
--- a/packages/SettingsLib/res/values-en-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rIN/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item>
<item msgid="45075631231212732">"Always use HDCP checking"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Default"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Default"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Default"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Default"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Default"</item>
+ <item msgid="5618929009984956469">"16 bits/sample"</item>
+ <item msgid="3412640499234627248">"24 bits/sample"</item>
+ <item msgid="121583001492929387">"32 bits/sample"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Default"</item>
+ <item msgid="4726688794884191540">"16 bits/sample"</item>
+ <item msgid="305344756485516870">"24 bits/sample"</item>
+ <item msgid="244568657919675099">"32 bits/sample"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Default"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Default"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Sound quality preferred (990 Kbps/909 Kbps)"</item>
+ <item msgid="138837449700903545">"Standard (660 Kbps/606 Kbps)"</item>
+ <item msgid="4777177307869441982">"Connection preferred (330 Kbps/303 Kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Sound quality preferred (990 Kbps/909 Kbps)"</item>
+ <item msgid="9091111147684472529">"Standard (660 Kbps/606 Kbps)"</item>
+ <item msgid="3367904477834831032">"Connection preferred (330 Kbps/303 Kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Off"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index e27822f..f09206d 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Always allow Wi‑Fi Roam Scans"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobile data always active"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Disable absolute volume"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio Codec"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Select Preferred Bluetooth A2DP Codec"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Audio Sample Rate"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Select Preferred Bluetooth A2DP Codec Sample Rate"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth Audio Bits Per Sample"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Select Preferred Bluetooth A2DP Codec Bits Per Sample"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio Channel Mode"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Select Preferred Bluetooth A2DP Codec Channel Mode"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth Audio LDAC Playback Quality"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Select Preferred Bluetooth A2DP Codec LDAC Playback Quality"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"When enabled, Wi‑Fi will be more aggressive in handing over the data connection to Mobile, when Wi‑Fi signal is low"</string>
diff --git a/packages/SettingsLib/res/values-es-rUS/arrays.xml b/packages/SettingsLib/res/values-es-rUS/arrays.xml
index c88b38a..d574edd 100644
--- a/packages/SettingsLib/res/values-es-rUS/arrays.xml
+++ b/packages/SettingsLib/res/values-es-rUS/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Usar comprobación HDCP para contenido DRM solamente"</item>
<item msgid="45075631231212732">"Siempre utilizar comprobación HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Predeterminado"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Predeterminado"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Predeterminado"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Predeterminado"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Predeterminado"</item>
+ <item msgid="5618929009984956469">"16 bits/muestra"</item>
+ <item msgid="3412640499234627248">"24 bits/muestra"</item>
+ <item msgid="121583001492929387">"32 bits/muestra"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Predeterminado"</item>
+ <item msgid="4726688794884191540">"16 bits/muestra"</item>
+ <item msgid="305344756485516870">"24 bits/muestra"</item>
+ <item msgid="244568657919675099">"32 bits/muestra"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Predeterminado"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Estéreo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Predeterminado"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Estéreo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Calidad de sonido (990 kbps/909 kbps)"</item>
+ <item msgid="138837449700903545">"Estándar (660 kbps/606 kbps)"</item>
+ <item msgid="4777177307869441982">"Conexión preferida (330 kbps/303 kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Calidad de sonido (990 kbps/909 kbps)"</item>
+ <item msgid="9091111147684472529">"Estándar (660 kbps/606 kbps)"</item>
+ <item msgid="3367904477834831032">"Conexión preferida (330 kbps/303 kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Desactivado"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index 9127b2a..b8b8ce4 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Permitir siempre búsquedas de Wi-Fi"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Datos móviles siempre activos"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Inhabilitar volumen absoluto"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Códec del audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Selecciona el códec A2DP de Bluetooth preferido"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Frecuencia de la muestra del audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Selecciona la frecuencia de la muestra preferida del códec A2DP de Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits por muestra del audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Selecciona los bits por muestra del códec A2DP de Bluetooth preferidos"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modo de canal del audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Selecciona el modo de canal del códec A2DP de Bluetooth preferido"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Calidad de reproducción LDAC del audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Selecciona la calidad de reproducción LDAC preferida del códec A2DP del audio Bluetooth"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opciones de certificación de pantalla inalámbrica"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar nivel de registro Wi-Fi; mostrar por SSID RSSI en el selector de Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Si está habilitada, la conexión Wi‑Fi será más intensa al transferir la conexión de datos al celular (si la señal Wi‑Fi es débil)."</string>
diff --git a/packages/SettingsLib/res/values-es/arrays.xml b/packages/SettingsLib/res/values-es/arrays.xml
index 3dc392a..1cfbe7e 100644
--- a/packages/SettingsLib/res/values-es/arrays.xml
+++ b/packages/SettingsLib/res/values-es/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Utilizar comprobación de HDCP solo para contenido DRM"</item>
<item msgid="45075631231212732">"Utilizar siempre comprobación de HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Predeterminado"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Predeterminado"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Predeterminado"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Predeterminado"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Predeterminado"</item>
+ <item msgid="5618929009984956469">"16 bits por muestra"</item>
+ <item msgid="3412640499234627248">"24 bits por muestra"</item>
+ <item msgid="121583001492929387">"32 bits por muestra"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Predeterminado"</item>
+ <item msgid="4726688794884191540">"16 bits por muestra"</item>
+ <item msgid="305344756485516870">"24 bits por muestra"</item>
+ <item msgid="244568657919675099">"32 bits por muestra"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Predeterminado"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Estéreo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Predeterminado"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Estéreo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Calidad son. pref. (990 kbps / 909 kbps)"</item>
+ <item msgid="138837449700903545">"Estándar (660 kbps / 606 kbps)"</item>
+ <item msgid="4777177307869441982">"Conexión preferida (330 kbps / 303 kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Calidad son. pref. (990 kbps / 909 kbps)"</item>
+ <item msgid="9091111147684472529">"Estándar (660 kbps / 606 kbps)"</item>
+ <item msgid="3367904477834831032">"Conexión preferida (330 kbps / 303 kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"No"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index 2d89b00..e4c9ba9 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Permitir siempre búsquedas de Wi-Fi"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Datos móviles siempre activos"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Inhabilitar volumen absoluto"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Códec de audio por Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Selecciona el códec A2DP de Bluetooth preferido"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Porcentaje de muestreo de audio por Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Selecciona el porcentaje de muestreo del códec A2DP de Bluetooth preferido"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits de audio por Bluetooth por muestra"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Selecciona los bits del códec A2DP de Bluetooth preferidos por muestra"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modo de canal de audio por Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Selecciona el modo de canal del códec A2DP de Bluetooth preferido"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Calidad de la reproducción LDAC de audio por Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Selecciona la calidad de la reproducción LDAC del códec A2DP de Bluetooth preferida"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opciones para la certificación de la pantalla inalámbrica"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar el nivel de logging de Wi-Fi, mostrar por SSID RSSI en el selector Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Si está habilitada, la conexión Wi‑Fi será más agresiva al transferir la conexión de datos al móvil (si la señal Wi‑Fi no es estable)"</string>
diff --git a/packages/SettingsLib/res/values-et-rEE/arrays.xml b/packages/SettingsLib/res/values-et/arrays.xml
similarity index 74%
rename from packages/SettingsLib/res/values-et-rEE/arrays.xml
rename to packages/SettingsLib/res/values-et/arrays.xml
index 7bb6e34..ba8e8de 100644
--- a/packages/SettingsLib/res/values-et-rEE/arrays.xml
+++ b/packages/SettingsLib/res/values-et/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Kasuta HDCP-kontrolli ainult DRM-sisu korral"</item>
<item msgid="45075631231212732">"Kasuta alati HDCP-kontrollimist"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Vaikeseade"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Vaikeseade"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Vaikeseade"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Vaikeseade"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Vaikeseade"</item>
+ <item msgid="5618929009984956469">"16 bitti diskreedi kohta"</item>
+ <item msgid="3412640499234627248">"24 bitti diskreedi kohta"</item>
+ <item msgid="121583001492929387">"32 bitti diskreedi kohta"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Vaikeseade"</item>
+ <item msgid="4726688794884191540">"16 bitti diskreedi kohta"</item>
+ <item msgid="305344756485516870">"24 bitti diskreedi kohta"</item>
+ <item msgid="244568657919675099">"32 bitti diskreedi kohta"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Vaikeseade"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Vaikeseade"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Eelist. helikvaliteeti (990/909 kbit/s)"</item>
+ <item msgid="138837449700903545">"Standardne (660/606 kbit/s)"</item>
+ <item msgid="4777177307869441982">"Eelistatakse ühendust (330/303 kbit/s)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Eelist. helikvaliteeti (990/909 kbit/s)"</item>
+ <item msgid="9091111147684472529">"Standardne (660/606 kbit/s)"</item>
+ <item msgid="3367904477834831032">"Eelistatakse ühendust (330/303 kbit/s)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Väljas"</item>
<item msgid="1593289376502312923">"64 000"</item>
diff --git a/packages/SettingsLib/res/values-et-rEE/strings.xml b/packages/SettingsLib/res/values-et/strings.xml
similarity index 95%
rename from packages/SettingsLib/res/values-et-rEE/strings.xml
rename to packages/SettingsLib/res/values-et/strings.xml
index f979db8..a7b066a 100644
--- a/packages/SettingsLib/res/values-et-rEE/strings.xml
+++ b/packages/SettingsLib/res/values-et/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Luba alati WiFi-rändluse skannimine"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobiilne andmeside on alati aktiivne"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Keela absoluutne helitugevus"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetoothi heli kodek"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Eelistatud Bluetooth A2DP kodeki valimine"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetoothi heli diskreetimissagedus"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Bluetooth A2DP kodeki eelistatud diskreetimissageduse valimine"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetoothi heli bitte diskreedi kohta"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Bluetooth A2DP kodeki eelistatud bittide arvu valimine diskreedi kohta"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetoothi heli kanalirežiim"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Bluetooth A2DP kodeki eelistatud kanalirežiimi valimine"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetoothi heli LDAC esituskvaliteet"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Bluetooth A2DP kodeki eelistatud LDAC esituskvaliteedi valimine"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Juhtmeta ekraaniühenduse sertifitseerimisvalikute kuvamine"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Suurenda WiFi logimistaset, kuva WiFi valijas SSID RSSI järgi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Kui see on lubatud, siis püüab WiFi nõrga WiFi-signaali korral agressiivsemalt anda andmeside ühenduse üle mobiilsele andmesidele"</string>
diff --git a/packages/SettingsLib/res/values-eu-rES/arrays.xml b/packages/SettingsLib/res/values-eu/arrays.xml
similarity index 74%
rename from packages/SettingsLib/res/values-eu-rES/arrays.xml
rename to packages/SettingsLib/res/values-eu/arrays.xml
index 82df3e8..222aba0 100644
--- a/packages/SettingsLib/res/values-eu-rES/arrays.xml
+++ b/packages/SettingsLib/res/values-eu/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Erabili HDCP egiaztapena DRM edukirako soilik"</item>
<item msgid="45075631231212732">"Erabili beti HDCP egiaztapena"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Lehenetsia"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Lehenetsia"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Lehenetsia"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Lehenetsia"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Lehenetsia"</item>
+ <item msgid="5618929009984956469">"16 bit lagin bakoitzeko"</item>
+ <item msgid="3412640499234627248">"24 bit lagin bakoitzeko"</item>
+ <item msgid="121583001492929387">"32 bit lagin bakoitzeko"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Lehenetsia"</item>
+ <item msgid="4726688794884191540">"16 bit lagin bakoitzeko"</item>
+ <item msgid="305344756485516870">"24 bit lagin bakoitzeko"</item>
+ <item msgid="244568657919675099">"32 bit lagin bakoitzeko"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Lehenetsia"</item>
+ <item msgid="4106832974775067314">"Monoa"</item>
+ <item msgid="5571632958424639155">"Estereoa"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Lehenetsia"</item>
+ <item msgid="8900559293912978337">"Monoa"</item>
+ <item msgid="8883739882299884241">"Estereoa"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Soinu-kalitate hobetsia (990 kb/s edo 909 kb/s)"</item>
+ <item msgid="138837449700903545">"Arrunta (660 kb/s edo 606 kb/s)"</item>
+ <item msgid="4777177307869441982">"Konexio hobetsia (330 kb/s edo 303 kb/s)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Soinu-kalitate hobetsia (990 kb/s edo 909 kb/s)"</item>
+ <item msgid="9091111147684472529">"Arrunta (660 kb/s edo 606 kb/s)"</item>
+ <item msgid="3367904477834831032">"Konexio hobetsia (330 kb/s edo 303 kb/s)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Desaktibatuta"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-eu-rES/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
similarity index 95%
rename from packages/SettingsLib/res/values-eu-rES/strings.xml
rename to packages/SettingsLib/res/values-eu/strings.xml
index 3e08c77..514d136 100644
--- a/packages/SettingsLib/res/values-eu-rES/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Onartu beti ibiltaritzan Wi-Fi sareak bilatzea"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mugikorreko datuak beti aktibo"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desgaitu bolumen absolutua"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth bidezko audioaren kodeka"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Hautatu Bluetooth A2DP kodek hobetsia"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth bidezko audioaren lagin-abiadura"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Hautatu Bluetooth A2DP kodekaren lagin-abiadura hobetsia"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth bidezko audioaren lagin bakoitzeko bit kopurua"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Hautatu Bluetooth A2DP kodekaren lagin bakoitzeko bit kopuru hobetsia"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth bidezko audioaren kanalaren modua"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Hautatu Bluetooth A2DP kodekaren kanalaren modu hobetsia"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth bidezko audioaren LDAC erreprodukzioaren kalitatea"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Hautatu Bluetooth A2DP kodekaren LDAC erreprodukzioaren kalitate hobetsia"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Erakutsi hari gabeko bistaratze-egiaztapenaren aukerak"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Erakutsi datu gehiago Wi-Fi sareetan saioa hasterakoan. Erakutsi sarearen identifikatzailea eta seinalearen indarra Wi‑Fi sareen hautagailuan."</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Aukera hori gaituz gero, gailua errazago aldatuko da datu mugikorren konexiora Wi-Fi seinalea ahultzen dela nabaritutakoan"</string>
diff --git a/packages/SettingsLib/res/values-fa/arrays.xml b/packages/SettingsLib/res/values-fa/arrays.xml
index 8d01d6b..1ff0d25 100644
--- a/packages/SettingsLib/res/values-fa/arrays.xml
+++ b/packages/SettingsLib/res/values-fa/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"استفاده از بررسی HDCP فقط برای محتوای DRM"</item>
<item msgid="45075631231212732">"همیشه از بررسی HDCP استفاده شود"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"پیشفرض"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"پیشفرض"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"پیشفرض"</item>
+ <item msgid="8895532488906185219">"۴۴٫۱ کیلوهرتز"</item>
+ <item msgid="2909915718994807056">"۴۸٫۰ کیلوهرتز"</item>
+ <item msgid="3347287377354164611">"۸۸٫۲ کیلوهرتز"</item>
+ <item msgid="1234212100239985373">"۹۶٫۰ کیلوهرتز"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"پیشفرض"</item>
+ <item msgid="4482862757811638365">"۴۴٫۱ کیلوهرتز"</item>
+ <item msgid="354495328188724404">"۴۸٫۰ کیلوهرتز"</item>
+ <item msgid="7329816882213695083">"۸۸٫۲ کیلوهرتز"</item>
+ <item msgid="6967397666254430476">"۹۶٫۰ کیلوهرتز"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"پیشفرض"</item>
+ <item msgid="5618929009984956469">"۱۶ بیت در هر نمونه"</item>
+ <item msgid="3412640499234627248">"۲۴ بیت در هر نمونه"</item>
+ <item msgid="121583001492929387">"۳۲ بیت در هر نمونه"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"پیشفرض"</item>
+ <item msgid="4726688794884191540">"۱۶ بیت در هر نمونه"</item>
+ <item msgid="305344756485516870">"۲۴ بیت در هر نمونه"</item>
+ <item msgid="244568657919675099">"۳۲ بیت در هر نمونه"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"پیشفرض"</item>
+ <item msgid="4106832974775067314">"مونو"</item>
+ <item msgid="5571632958424639155">"استریو"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"پیشفرض"</item>
+ <item msgid="8900559293912978337">"مونو"</item>
+ <item msgid="8883739882299884241">"استریو"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"کیفیت صدای ترجیحی (۹۹۰کیلوبیت در ثانیه/۹۰۹کیلوبیت در ثانیه)"</item>
+ <item msgid="138837449700903545">"استاندارد (۶۶۰کیلوبیت در ثانیه/۶۰۶کیلوبیت در ثانیه)"</item>
+ <item msgid="4777177307869441982">"اتصال ترجیحی (۳۳۰کیلوبیت در ثانیه/۳۰۳کیلوبیت در ثانیه)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"کیفیت صدای ترجیحی (۹۹۰کیلوبیت در ثانیه/۹۰۹کیلوبیت در ثانیه)"</item>
+ <item msgid="9091111147684472529">"استاندارد (۶۶۰کیلوبیت در ثانیه/۶۰۶کیلوبیت در ثانیه)"</item>
+ <item msgid="3367904477834831032">"اتصال ترجیحی (۳۳۰کیلوبیت در ثانیه/۳۰۳کیلوبیت در ثانیه)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"خاموش"</item>
<item msgid="1593289376502312923">"۶۴ هزار"</item>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index 4a741f07..d6518e1 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"اسکنهای رومینگ Wi‑Fi همیشه مجاز است"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"داده سلولی همیشه فعال"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"غیرفعال کردن میزان صدای مطلق"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"کدک بلوتوث صوتی"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"انتخاب کدک A2DP در بلوتوث ترجیحی"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"سرعت نمونه بلوتوث صوتی"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"انتخاب سرعت نمونه کدک A2DP بلوتوث ترجیحی"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"بیتهای بلوتوث صوتی در هر نمونه"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"انتخاب بیتهای کدک A2DP بلوتوث ترجیحی هر نمونه"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"حالت کانال بلوتوث صوتی"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"انتخاب حالت کانال کدک A2DP بلوتوث ترجیحی"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"کیفیت پخش LDAC بلوتوث صوتی"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"انتخاب کیفیت پخش LDAC کدک A2DP بلوتوث ترجیحی"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"نمایش گزینهها برای گواهینامه نمایش بیسیم"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"افزایش سطح گزارشگیری Wi‑Fi، نمایش به ازای SSID RSSI در انتخابکننده Wi‑Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"وقتی فعال است، در شرایط پایین بودن سیگنال، Wi‑Fi برای واگذار کردن اتصال داده به شبکه سلولی فعالتر خواهد بود."</string>
diff --git a/packages/SettingsLib/res/values-fi/arrays.xml b/packages/SettingsLib/res/values-fi/arrays.xml
index 4368848..5d842a4 100644
--- a/packages/SettingsLib/res/values-fi/arrays.xml
+++ b/packages/SettingsLib/res/values-fi/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Käytä HDCP-tarkistusta vain DRM-suojatulle sisällölle"</item>
<item msgid="45075631231212732">"Käytä aina HDCP-tarkistusta"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Oletus"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Oletus"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Oletus"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Oletus"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Oletus"</item>
+ <item msgid="5618929009984956469">"16 bittiä/näyte"</item>
+ <item msgid="3412640499234627248">"24 bittiä/näyte"</item>
+ <item msgid="121583001492929387">"32 bittiä/näyte"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Oletus"</item>
+ <item msgid="4726688794884191540">"16 bittiä/näyte"</item>
+ <item msgid="305344756485516870">"24 bittiä/näyte"</item>
+ <item msgid="244568657919675099">"32 bittiä/näyte"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Oletus"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Oletus"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Äänenlaatu etusijalla (990 kbps / 909 kbps)"</item>
+ <item msgid="138837449700903545">"Vakio (660 kbps / 606 kbps)"</item>
+ <item msgid="4777177307869441982">"Yhteys etusijalla (330 kbps / 303 kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Äänenlaatu etusijalla (990 kbps / 909 kbps)"</item>
+ <item msgid="9091111147684472529">"Vakio (660 kbps / 606 kbps)"</item>
+ <item msgid="3367904477834831032">"Yhteys etusijalla (330 kbps / 303 kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Ei käytössä"</item>
<item msgid="1593289376502312923">"64 kt"</item>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index 648f7b3..2332fc5 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Salli Wi-Fi-verkkovierailuskannaus aina"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobiilidata on aina käytössä"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Poista yleinen äänenvoimakkuuden säätö käytöstä"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth-äänen koodekki"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Valitse ensisijainen Bluetooth A2DP ‑koodekki"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth-ääninäytteen siirtonopeus"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Valitse ensisijainen Bluetooth A2DP ‑koodekkinäytteen siirtonopeus"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth-äänen bittiä/näyte-arvo"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Valitse ensisijainen Bluetooth A2DP ‑koodekin bittiä/näyte-arvo"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth-äänen kanavatila"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Valitse ensisijainen Bluetooth A2DP ‑koodekin kanavatila"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth-äänen LDAC-toiston laatu"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Valitse ensisijainen Bluetooth A2DP ‑koodekin LDAC-toiston laatu"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Näytä langattoman näytön sertifiointiin liittyvät asetukset"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Lisää Wi‑Fin lokikirjaustasoa, näytä SSID RSSI -kohtaisesti Wi‑Fi-valitsimessa."</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Kun asetus on käytössä, Wi-Fi siirtää datayhteyden aggressiivisemmin matkapuhelinverkolle, jos Wi-Fi-signaali on heikko."</string>
diff --git a/packages/SettingsLib/res/values-fr-rCA/arrays.xml b/packages/SettingsLib/res/values-fr-rCA/arrays.xml
index 7515ecf..c50e576 100644
--- a/packages/SettingsLib/res/values-fr-rCA/arrays.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Utiliser la vérification HDCP uniquement pour le contenu GDN"</item>
<item msgid="45075631231212732">"Toujours utiliser la vérification HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Par défaut"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Par défaut"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Par défaut"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Par défaut"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Par défaut"</item>
+ <item msgid="5618929009984956469">"16 bits par échantillon"</item>
+ <item msgid="3412640499234627248">"24 bits par échantillon"</item>
+ <item msgid="121583001492929387">"32 bits par échantillon"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Par défaut"</item>
+ <item msgid="4726688794884191540">"16 bits par échantillon"</item>
+ <item msgid="305344756485516870">"24 bits par échantillon"</item>
+ <item msgid="244568657919675099">"32 bits par échantillon"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Par défaut"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stéréo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Par défaut"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stéréo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Qualité sonore préférée (990 kbps/909 kbps)"</item>
+ <item msgid="138837449700903545">"Standard (660 kbps/606 kbps)"</item>
+ <item msgid="4777177307869441982">"Connexion préférée (330 kbps/303 kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Qualité sonore préférée (990 kbps/909 kbps)"</item>
+ <item msgid="9091111147684472529">"Standard (660 kbps/606 kbps)"</item>
+ <item msgid="3367904477834831032">"Connexion préférée (330 kbps/303 kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Désactivé"</item>
<item msgid="1593289376502312923">"64 ko"</item>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index afd343c..9eeeccb7c 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Toujours autoriser la détection de réseaux Wi-Fi en itinérance"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Données cellulaires toujours actives"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Désactiver le volume absolu"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Sélectionnez le codec Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Taux d\'échantillonnage pour l\'audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Sélectionnez le taux d\'échantillonnage préféré pour le codec Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits par échantillon pour l\'audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Sélectionnez le nombre de bits par échantillon préféré pour le codec Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Mode de canal pour l\'audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Sélectionnez le mode de canal préféré pour le codec Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Qualité de lecture LDAC pour l\'audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Sélectionnez la qualité de lecture LDAC préférée pour le codec Bluetooth A2DP"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Afficher les options pour la certification d\'affichage sans fil"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Détailler davantage les données Wi-Fi, afficher par SSID RSSI dans sélect. Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Si cette option est activée, le passage du Wi-Fi aux données cellulaires est forcé lorsque le signal Wi-Fi est faible"</string>
diff --git a/packages/SettingsLib/res/values-fr/arrays.xml b/packages/SettingsLib/res/values-fr/arrays.xml
index 59ad1fc..cda881c 100644
--- a/packages/SettingsLib/res/values-fr/arrays.xml
+++ b/packages/SettingsLib/res/values-fr/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Utiliser la vérification HDCP uniquement pour le contenu DRM"</item>
<item msgid="45075631231212732">"Toujours utiliser la vérification HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Par défaut"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Par défaut"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Par défaut"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Par défaut"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Par défaut"</item>
+ <item msgid="5618929009984956469">"16 bits par échantillon"</item>
+ <item msgid="3412640499234627248">"24 bits par échantillon"</item>
+ <item msgid="121583001492929387">"32 bits par échantillon"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Par défaut"</item>
+ <item msgid="4726688794884191540">"16 bits par échantillon"</item>
+ <item msgid="305344756485516870">"24 bits par échantillon"</item>
+ <item msgid="244568657919675099">"32 bits par échantillon"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Par défaut"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stéréo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Par défaut"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stéréo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Qualité audio prioritaire (990/909 kbit/s)"</item>
+ <item msgid="138837449700903545">"Standard (660/606 kbit/s)"</item>
+ <item msgid="4777177307869441982">"Connexion prioritaire (330/303 kbits/s)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Qualité audio prioritaire (990/909 kbit/s)"</item>
+ <item msgid="9091111147684472529">"Standard (660/606 kbit/s)"</item>
+ <item msgid="3367904477834831032">"Connexion prioritaire (330/303 kbits/s)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Désactivé"</item>
<item msgid="1593289376502312923">"64 Ko"</item>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index 4d9d90c..8ba0b0f 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Toujours autoriser la détection de réseaux Wi-Fi en itinérance"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Données mobiles toujours actives"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Désactiver le volume absolu"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Sélectionner le codec A2DP Bluetooth prioritaire"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Taux d\'échantillonnage audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Sélectionner le taux d\'échantillonnage pour le codec A2DP Bluetooth prioritaire"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Nombre de bits par échantillon pour l\'audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Sélectionner le nombre de bits par échantillon pour le codec A2DP Bluetooth prioritaire"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Mode de chaîne de l\'audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Sélectionner le mode de chaîne pour le codec A2DP Bluetooth prioritaire"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Qualité de lecture LDAC de l\'audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Sélectionner la qualité de lecture LDAC pour le codec A2DP Bluetooth prioritaire"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Afficher les options de la certification de l\'affichage sans fil"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Détailler plus infos Wi-Fi, afficher par RSSI de SSID dans outil sélection Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Si cette option est activée, le passage du Wi-Fi aux données mobiles est forcé en cas de signal Wi-Fi faible."</string>
diff --git a/packages/SettingsLib/res/values-gl-rES/arrays.xml b/packages/SettingsLib/res/values-gl/arrays.xml
similarity index 74%
rename from packages/SettingsLib/res/values-gl-rES/arrays.xml
rename to packages/SettingsLib/res/values-gl/arrays.xml
index 1a9f607..e581368 100644
--- a/packages/SettingsLib/res/values-gl-rES/arrays.xml
+++ b/packages/SettingsLib/res/values-gl/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Utiliza a comprobación HDCP só para contido DRM"</item>
<item msgid="45075631231212732">"Utilizar sempre a comprobación HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Predeterminado"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Predeterminado"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Predeterminado"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Predeterminado"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Predeterminado"</item>
+ <item msgid="5618929009984956469">"16 bits/mostra"</item>
+ <item msgid="3412640499234627248">"24 bits/mostra"</item>
+ <item msgid="121583001492929387">"32 bits/mostra"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Predeterminado"</item>
+ <item msgid="4726688794884191540">"16 bits/mostra"</item>
+ <item msgid="305344756485516870">"24 bits/mostra"</item>
+ <item msgid="244568657919675099">"32 bits/mostra"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Predeterminado"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Estéreo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Predeterminado"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Estéreo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Calidade preferida (990 kbps/909 kbps)"</item>
+ <item msgid="138837449700903545">"Estándar (660 kbps/606 kbps)"</item>
+ <item msgid="4777177307869441982">"Conexión preferida (330 kbps/303 kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Calidade preferida (990 kbps/909 kbps)"</item>
+ <item msgid="9091111147684472529">"Estándar (660 kbps/606 kbps)"</item>
+ <item msgid="3367904477834831032">"Conexión preferida (330 kbps/303 kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Desactivado"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-gl-rES/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
similarity index 95%
rename from packages/SettingsLib/res/values-gl-rES/strings.xml
rename to packages/SettingsLib/res/values-gl/strings.xml
index 1110fe2..6a9a1ec 100644
--- a/packages/SettingsLib/res/values-gl-rES/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Permitir sempre buscas de itinerancia da wifi"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Datos móbiles sempre activados"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desactivar volume absoluto"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Códec de audio por Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Seleccionar códec A2DP de Bluetooth preferido"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Taxa de mostraxe de audio por Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Seleccionar taxa de mostraxe do códec A2DP de Bluetooth preferido"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits por mostra de audio por Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Seleccionar bits por mostra do códec A2DP de Bluetooth preferido"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modo de canle de audio por Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Seleccionar modo de canle do códec A2DP de Bluetooth preferido"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Calidade de reprodución de LDAC de audio por Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Seleccionar calidade de reprodución de LDAC do códec A2DP de Bluetooth preferido"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostra opcións para o certificado de visualización sen fíos"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nivel de rexistro da wifi, mostrar por SSID RSSI no selector de wifi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Cando está activada esta función, a wifi será máis agresiva ao entregar a conexión de datos ao móbil, cando o sinal wifi é feble"</string>
diff --git a/packages/SettingsLib/res/values-gu-rIN/arrays.xml b/packages/SettingsLib/res/values-gu/arrays.xml
similarity index 77%
rename from packages/SettingsLib/res/values-gu-rIN/arrays.xml
rename to packages/SettingsLib/res/values-gu/arrays.xml
index e097159..742103b 100644
--- a/packages/SettingsLib/res/values-gu-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-gu/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"ફક્ત DRM સામગ્રી માટે HDCP તપાસનો ઉપયોગ કરો"</item>
<item msgid="45075631231212732">"હંમેશા HDCP તપાસનો ઉપયોગ કરો"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"ડિફૉલ્ટ"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"ડિફૉલ્ટ"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"ડિફૉલ્ટ"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"ડિફૉલ્ટ"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"ડિફૉલ્ટ"</item>
+ <item msgid="5618929009984956469">"16 બિટ/નમૂનો"</item>
+ <item msgid="3412640499234627248">"24 બિટ/નમૂનો"</item>
+ <item msgid="121583001492929387">"32 બિટ/નમૂનો"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"ડિફૉલ્ટ"</item>
+ <item msgid="4726688794884191540">"16 બિટ/નમૂનો"</item>
+ <item msgid="305344756485516870">"24 બિટ/નમૂનો"</item>
+ <item msgid="244568657919675099">"32 બિટ/નમૂનો"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"ડિફૉલ્ટ"</item>
+ <item msgid="4106832974775067314">"મૉનો"</item>
+ <item msgid="5571632958424639155">"સ્ટીરિઓ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"ડિફૉલ્ટ"</item>
+ <item msgid="8900559293912978337">"મૉનો"</item>
+ <item msgid="8883739882299884241">"સ્ટીરિઓ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"પસંદગીની અવાજ ગુણવત્તા (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"માનક (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"પસંદગીનું કનેક્શન (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"પસંદગીની અવાજ ગુણવત્તા (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"માનક (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"પસંદગીનું કનેક્શન (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"બંધ"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-gu-rIN/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml
similarity index 96%
rename from packages/SettingsLib/res/values-gu-rIN/strings.xml
rename to packages/SettingsLib/res/values-gu/strings.xml
index a732ea1..e61e6e2 100644
--- a/packages/SettingsLib/res/values-gu-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-gu/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"હંમેશા Wi‑Fi રોમ સ્કૅન્સને મંજૂરી આપો"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"સેલ્યુલર ડેટા હંમેશા સક્રિય"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ચોક્કસ વૉલ્યૂમને અક્ષમ કરો"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth ઑડિઓ કોડેક"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"પસંદગીના Bluetooth A2DP કોડેકને પસંદ કરો"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth ઑડિઓ નમૂના દર"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"પસંદગીના Bluetooth A2DP કોડેક નમૂના દરને પસંદ કરો"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"નમૂના દીઠ Bluetooth ઑડિઓ બિટ"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"નમૂના દીઠ પસંદગીના Bluetooth A2DP કોડેક બિટને પસંદ કરો"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth ઑડિઓ ચેનલ મોડ"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"પસંદગીના Bluetooth A2DP કોડેક ચેનલ મોડને પસંદ કરો"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth ઑડિઓ LDAC પ્લેબેક ગુણવત્તા"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"પસંદગીની Bluetooth A2DP કોડેક LDAC પ્લેબેક ગુણવત્તા પસંદ કરો"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"વાયરલેસ ડિસ્પ્લે પ્રમાણપત્ર માટેના વિકલ્પો બતાવો"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi લોગિંગ સ્તર વધારો, Wi‑Fi પીકરમાં SSID RSSI દીઠ બતાવો"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"જ્યારે સક્ષમ હોય, ત્યારે Wi‑Fi સિગ્નલ ઓછા હોવા પર, સેલ્યુલર પર ડેટા કનેક્શન મોકલવામાં વધુ આક્રમક હશે"</string>
diff --git a/packages/SettingsLib/res/values-hi/arrays.xml b/packages/SettingsLib/res/values-hi/arrays.xml
index 9b03f5f..11b83c9 100644
--- a/packages/SettingsLib/res/values-hi/arrays.xml
+++ b/packages/SettingsLib/res/values-hi/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"HDCP जांच का उपयोग केवल DRM सामग्री के लिए करें"</item>
<item msgid="45075631231212732">"हमेशा HDCP जांच का उपयोग करें"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"डिफ़ॉल्ट"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"डिफ़ॉल्ट"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"डिफ़ॉल्ट"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"डिफ़ॉल्ट"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"डिफ़ॉल्ट"</item>
+ <item msgid="5618929009984956469">"16 बिट/नमूना"</item>
+ <item msgid="3412640499234627248">"24 बिट/नमूना"</item>
+ <item msgid="121583001492929387">"32 बिट/नमूना"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"डिफ़ॉल्ट"</item>
+ <item msgid="4726688794884191540">"16 बिट/नमूना"</item>
+ <item msgid="305344756485516870">"24 बिट/नमूना"</item>
+ <item msgid="244568657919675099">"32 बिट/नमूना"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"डिफ़ॉल्ट"</item>
+ <item msgid="4106832974775067314">"मोनो"</item>
+ <item msgid="5571632958424639155">"स्टीरियो"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"डिफ़ॉल्ट"</item>
+ <item msgid="8900559293912978337">"मोनो"</item>
+ <item msgid="8883739882299884241">"स्टीरियो"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"पसंदीदा ध्वनि गुणवत्ता (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"मानक (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"पसंदीदा कनेक्शन (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"पसंदीदा ध्वनि गुणवत्ता (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"मानक (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"पसंदीदा कनेक्शन (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"बंद"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index eefdff1..7ba3d54 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -79,7 +79,7 @@
<string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> से संचार नहीं कर सकता."</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> द्वारा युग्मन अस्वीकृत किया गया."</string>
<string name="accessibility_wifi_off" msgid="1166761729660614716">"वाई-फ़ाई बंद है."</string>
- <string name="accessibility_no_wifi" msgid="8834610636137374508">"वाई-फ़ाई डिस्कनेक्ट है."</string>
+ <string name="accessibility_no_wifi" msgid="8834610636137374508">"वाई-फ़ाई डिसकनेक्ट है."</string>
<string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"वाई-फ़ाई का एक बार है."</string>
<string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"वाई-फ़ाई की दो पट्टी मिल रही हैं."</string>
<string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"वाई-फ़ाई की एक पट्टी मिल रही है."</string>
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"हमेशा वाई-फ़ाई रोम स्कैन करने दें"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"सेल्युलर डेटा हमेशा सक्रिय"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"पूर्ण वॉल्यूम अक्षम करें"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ब्लूटूथ ऑडियो कोडेक"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"पसंदीदा ब्लूटूथ A2DP कोडेक चुनें"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ब्लूटूथ ऑडियो नमूना दर"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"पसंदीदा ब्लूटूथ A2DP कोडेक नमूना दर चुनें"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"ब्लूटूथ ऑडियो बिट प्रति नमूना"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"पसंदीदा ब्लूटूथ A2DP कोडेक बिट प्रति नमूना चुनें"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ब्लूटूथ ऑडियो चैनल मोड"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"पसंदीदा ब्लूटूथ A2DP कोडेक चैनल मोड चुनें"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"ब्लूटूथ ऑडियो LDAC प्लेबैक गुणवत्ता"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"पसंदीदा ब्लूटूथ A2DP कोडेक LDAC प्लेबैक गुणवत्ता चुनें"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"वायरलेस दिखाई देने के लिए प्रमाणन विकल्प दिखाएं"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"वाई-फ़ाई प्रवेश स्तर बढ़ाएं, वाई-फ़ाई पिकर में प्रति SSID RSSI दिखाएं"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"इसके सक्षम होने पर, जब वाई-फ़ाई संकेत कमज़ोर हों तो वाई-फ़ाई, डेटा कनेक्शन को सेल्यूलर पर अधिक बलपूर्वक भेजेगा"</string>
diff --git a/packages/SettingsLib/res/values-hr/arrays.xml b/packages/SettingsLib/res/values-hr/arrays.xml
index 42d6bd5..114337a 100644
--- a/packages/SettingsLib/res/values-hr/arrays.xml
+++ b/packages/SettingsLib/res/values-hr/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Upotrebljavaj HDCP provjeru samo za DRM sadržaj"</item>
<item msgid="45075631231212732">"Uvijek upotrebljavaj HDCP provjeru"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Zadano"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Zadano"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Zadano"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Zadano"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Zadano"</item>
+ <item msgid="5618929009984956469">"16 bitova po uzorku"</item>
+ <item msgid="3412640499234627248">"24 bita po uzorku"</item>
+ <item msgid="121583001492929387">"32 bita po uzorku"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Zadano"</item>
+ <item msgid="4726688794884191540">"16 bitova po uzorku"</item>
+ <item msgid="305344756485516870">"24 bita po uzorku"</item>
+ <item msgid="244568657919675099">"32 bita po uzorku"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Zadano"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Zadano"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Željena kval. zvuka (990 kbps/909 kbps)"</item>
+ <item msgid="138837449700903545">"Standardna (660 kbps/606 kbps)"</item>
+ <item msgid="4777177307869441982">"Željeno povezivanje (330 kbps/303 kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Željena kval. zvuka (990 kbps/909 kbps)"</item>
+ <item msgid="9091111147684472529">"Standardna (660 kbps/606 kbps)"</item>
+ <item msgid="3367904477834831032">"Željeno povezivanje (330 kbps/303 kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Isključeno"</item>
<item msgid="1593289376502312923">"64 KB"</item>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index 9b38b61..598e5cb 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Uvijek dopusti slobodno traženje Wi-Fi mreže"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobilni podaci uvijek aktivni"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Onemogući apsolutnu glasnoću"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Kodek za Bluetooth Audio"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Odabir željenog Bluetooth A2DP kodeka"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Brzina uzorka za Bluetooth Audio"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Odabir željenu brzinu uzorka Bluetooth A2DP kodeka"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bitovi po uzorku za Bluetooth Audio"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Odabir željenog broja bitova po uzorku za Bluetooth A2DP kodek"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Način kanala za Bluetooth Audio"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Odabir željenog načina kanala Bluetooth A2DP kodeka"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"LDAC kvaliteta reprodukcije za Bluetooth Audio"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Odabir željene kvalitete reprodukcije Bluetooth A2DP kodeka LDAC"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Prikaži opcije za certifikaciju bežičnog prikaza"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povećana razina prijave na Wi‑Fi, prikaz po SSID RSSI-ju u Biraču Wi‑Fi-ja"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Ako je omogućeno, Wi-Fi će aktivno prebacivati podatkovnu vezu mobilnoj mreži kada je Wi-Fi signal slab."</string>
diff --git a/packages/SettingsLib/res/values-hu/arrays.xml b/packages/SettingsLib/res/values-hu/arrays.xml
index a5a8a9b..4cc67a3 100644
--- a/packages/SettingsLib/res/values-hu/arrays.xml
+++ b/packages/SettingsLib/res/values-hu/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Csak DRM-tartalomhoz használjon HDCP ellenőrzést"</item>
<item msgid="45075631231212732">"Mindig használjon HDCP ellenőrzést"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Alapértelmezett"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Alapértelmezett"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Alapértelmezett"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Alapértelmezett"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Alapértelmezett"</item>
+ <item msgid="5618929009984956469">"16 bit/minta"</item>
+ <item msgid="3412640499234627248">"24 bit/minta"</item>
+ <item msgid="121583001492929387">"32 bit/minta"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Alapértelmezett"</item>
+ <item msgid="4726688794884191540">"16 bit/minta"</item>
+ <item msgid="305344756485516870">"24 bit/minta"</item>
+ <item msgid="244568657919675099">"32 bit/minta"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Alapértelmezett"</item>
+ <item msgid="4106832974775067314">"Monó"</item>
+ <item msgid="5571632958424639155">"Sztereó"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Alapértelmezett"</item>
+ <item msgid="8900559293912978337">"Monó"</item>
+ <item msgid="8883739882299884241">"Sztereó"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Minőség előnyben részesítése (990 kbps/909 kbps)"</item>
+ <item msgid="138837449700903545">"Alapértelmezett (660 kbps/606 kbps)"</item>
+ <item msgid="4777177307869441982">"Kapcsolat előnyben részesítése (330 kbps/303 kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Minőség előnyben részesítése (990 kbps/909 kbps)"</item>
+ <item msgid="9091111147684472529">"Alapértelmezett (660 kbps/606 kbps)"</item>
+ <item msgid="3367904477834831032">"Kapcsolat előnyben részesítése (330 kbps/303 kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Ki"</item>
<item msgid="1593289376502312923">"64 KB"</item>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index a373545..f4be3ec 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi-roaming ellenőrzésének engedélyezése mindig"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"A mobilhálózati adatforgalom mindig aktív"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Abszolút hangerő funkció letiltása"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth hang – Kodek"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Előnyben részesített kodek kiválasztása a Bluetooth A2DP profiljához"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth hang – mintavételezési gyakoriság"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Kodek előnyben részesített mintavételezési gyakoriságának kiválasztása a Bluetooth A2DP profiljához"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth hang – bit/minta"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Kodek előnyben részesített bit/minta mennyiségének kiválasztása a Bluetooth A2DP profiljához"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth hang – Csatornamód"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Kodek előnyben részesített csatornamódjának kiválasztása a Bluetooth A2DP profiljához"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth hang – LDAC lejátszási minőség"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Kodek előnyben részesített LDAC lejátszási minőségének kiválasztása a Bluetooth A2DP profiljához"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Vezeték nélküli kijelző tanúsítványával kapcsolatos lehetőségek megjelenítése"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi-naplózási szint növelése, RSSI/SSID megjelenítése a Wi‑Fi-választóban"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Ha engedélyezi, a Wi-Fi agresszívebben fogja átadni az adatkapcsolatot a mobilhálózatnak gyenge Wi-Fi-jel esetén"</string>
diff --git a/packages/SettingsLib/res/values-hy-rAM/arrays.xml b/packages/SettingsLib/res/values-hy/arrays.xml
similarity index 76%
rename from packages/SettingsLib/res/values-hy-rAM/arrays.xml
rename to packages/SettingsLib/res/values-hy/arrays.xml
index 1241bee..ab810bf 100644
--- a/packages/SettingsLib/res/values-hy-rAM/arrays.xml
+++ b/packages/SettingsLib/res/values-hy/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Օգտագործել HDCP-ը` միայն DRM-ի բովանդակությունը ստուգելու համար"</item>
<item msgid="45075631231212732">"Միշտ օգտագործել HDCP ստուգումը"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Կանխադրված"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Կանխադրված"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Կանխադրված"</item>
+ <item msgid="8895532488906185219">"44,1 կՀց"</item>
+ <item msgid="2909915718994807056">"48,0 կՀց"</item>
+ <item msgid="3347287377354164611">"88,2 կՀց"</item>
+ <item msgid="1234212100239985373">"96,0 կՀց"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Կանխադրված"</item>
+ <item msgid="4482862757811638365">"44,1 կՀց"</item>
+ <item msgid="354495328188724404">"48,0 կՀց"</item>
+ <item msgid="7329816882213695083">"88,2 կՀց"</item>
+ <item msgid="6967397666254430476">"96,0 կՀց"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Կանխադրված"</item>
+ <item msgid="5618929009984956469">"16 բիթ/նմուշ"</item>
+ <item msgid="3412640499234627248">"24 բիթ/նմուշ"</item>
+ <item msgid="121583001492929387">"32 բիթ/նմուշ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Կանխադրված"</item>
+ <item msgid="4726688794884191540">"16 բիթ/նմուշ"</item>
+ <item msgid="305344756485516870">"24 բիթ/նմուշ"</item>
+ <item msgid="244568657919675099">"32 բիթ/նմուշ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Կանխադրված"</item>
+ <item msgid="4106832974775067314">"Մոնո"</item>
+ <item msgid="5571632958424639155">"Ստերեո"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Կանխադրված"</item>
+ <item msgid="8900559293912978337">"Մոնո"</item>
+ <item msgid="8883739882299884241">"Ստերեո"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Նախընտրելի է ձայնի որակը (990 կբ/վ / 909 կբ/վ)"</item>
+ <item msgid="138837449700903545">"Ստանդարտ (660 կբ/վ / 606 կբ/վ)"</item>
+ <item msgid="4777177307869441982">"Նախընտրելի է կապը (330 կբ/վ / 303 կբ/վ)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Նախընտրելի է ձայնի որակը (990 կբ/վ / 909 կբ/վ)"</item>
+ <item msgid="9091111147684472529">"Ստանդարտ (660 կբ/վ / 606 կբ/վ)"</item>
+ <item msgid="3367904477834831032">"Նախընտրելի է կապը (330 կբ/վ / 303 կբ/վ)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Անջատված է"</item>
<item msgid="1593289376502312923">"64ԿԲ"</item>
diff --git a/packages/SettingsLib/res/values-hy-rAM/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
similarity index 96%
rename from packages/SettingsLib/res/values-hy-rAM/strings.xml
rename to packages/SettingsLib/res/values-hy/strings.xml
index bcd56d5..5ee1570 100644
--- a/packages/SettingsLib/res/values-hy-rAM/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Միշտ թույլատրել Wi‑Fi ռոումինգի որոնումը"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Բջջային տվյալները՝ միշտ ակտիվացրած"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Անջատել ձայնի բացարձակ ուժգնությունը"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth աուդիո կոդեկ"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Ընտրեք Bluetooth A2DP նախընտրելի կոդեկը"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth աուդիոյի Ընդհատավորման հաճախականությունը"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Ընտրեք Bluetooth A2DP կոդեկի Ընդհատավորման նախընտրելի հաճախականությունը"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth աուդիո, բիթ / նմուշ"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Ընտրեք Bluetooth A2DP կոդեկի նախընտրելի որակը, բիթ / նմուշ"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth աուդիո կապուղու ռեժիմը"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Ընտրեք Bluetooth A2DP կոդեկի կապուղու նախընտրելի ռեժիմը"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth աուդիո LDAC նվագարկման որակը"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Ընտրեք Bluetooth A2DP կոդեկի LDAC նվագարկման նախընտրելի որակը"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Ցույց տալ անլար էկրանի հավաստագրման ընտրանքները"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Բարձրացնել մակարդակը, Wi‑Fi ընտրիչում ամեն մի SSID-ի համար ցույց տալ RSSI"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Եթե այս գործառույթը միացված է, Wi‑Fi-ի թույլ ազդանշանի դեպքում Wi‑Fi ինտերնետից անցումը բջջային ինտերնետին ավելի կտրուկ կլինի"</string>
diff --git a/packages/SettingsLib/res/values-in/arrays.xml b/packages/SettingsLib/res/values-in/arrays.xml
index 63bd8f3..be3d89c 100644
--- a/packages/SettingsLib/res/values-in/arrays.xml
+++ b/packages/SettingsLib/res/values-in/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Gunakan pemeriksaan HDCP untuk konten DRM saja"</item>
<item msgid="45075631231212732">"Selalu gunakan pemeriksaan HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Default"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Default"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Default"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Default"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Default"</item>
+ <item msgid="5618929009984956469">"16 bit/sampel"</item>
+ <item msgid="3412640499234627248">"24 bit/sampel"</item>
+ <item msgid="121583001492929387">"32 bit/sampel"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Default"</item>
+ <item msgid="4726688794884191540">"16 bit/sampel"</item>
+ <item msgid="305344756485516870">"24 bit/sampel"</item>
+ <item msgid="244568657919675099">"32 bit/sampel"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Default"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Default"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Kualitas suara yang disukai (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"Standar (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"Sambungan yang disukai (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Kualitas suara yang disukai (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"Standar (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"Sambungan yang disukai (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Nonaktif"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index 9559887..97eca8e 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Selalu izinkan Pemindaian Roaming Wi-Fi"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Data seluler selalu aktif"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Nonaktifkan volume absolut"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec Audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Pilih Codec A2DP Bluetooth Yang Disukai"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Frekuensi Sampel Audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Pilih Frekuensi Sampel Codec A2DP Bluetooth Yang Disukai"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bit Per Sampel Audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Pilih Bit Per Sampel Codec A2DP Bluetooth Yang Disukai"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Mode Channel Audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Pilih Mode Channel Codec A2DP Bluetooth Yang Disukai"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Kualitas Pemutaran LDAC Audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Pilih Kualitas Pemutaran LDAC Codec A2DP Bluetooth Yang Disukai"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Tampilkan opsi untuk sertifikasi layar nirkabel"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Tingkatkan level pencatatan log Wi-Fi, tampilkan per SSID RSSI di Pemilih Wi‑Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Jika diaktifkan, Wi-Fi akan menjadi lebih agresif dalam mengalihkan sambungan data ke Seluler saat sinyal Wi-Fi lemah"</string>
diff --git a/packages/SettingsLib/res/values-is-rIS/arrays.xml b/packages/SettingsLib/res/values-is/arrays.xml
similarity index 74%
rename from packages/SettingsLib/res/values-is-rIS/arrays.xml
rename to packages/SettingsLib/res/values-is/arrays.xml
index 6c0a3cd..dbb1636 100644
--- a/packages/SettingsLib/res/values-is-rIS/arrays.xml
+++ b/packages/SettingsLib/res/values-is/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Nota HDCP-athugun aðeins fyrir höfundarréttarvarið efni"</item>
<item msgid="45075631231212732">"Nota alltaf HDCP-eftirlit"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Sjálfgefið"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Sjálfgefið"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Sjálfgefið"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Sjálfgefið"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Sjálfgefið"</item>
+ <item msgid="5618929009984956469">"16 bitar/úrtak"</item>
+ <item msgid="3412640499234627248">"24 bitar/úrtak"</item>
+ <item msgid="121583001492929387">"32 bitar/úrtak"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Sjálfgefið"</item>
+ <item msgid="4726688794884191540">"16 bitar/úrtak"</item>
+ <item msgid="305344756485516870">"24 bitar/úrtak"</item>
+ <item msgid="244568657919675099">"32 bitar/úrtak"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Sjálfgefið"</item>
+ <item msgid="4106832974775067314">"Einóma"</item>
+ <item msgid="5571632958424639155">"Víðóma"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Sjálfgefið"</item>
+ <item msgid="8900559293912978337">"Einóma"</item>
+ <item msgid="8883739882299884241">"Víðóma"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Hljóðgæði í forgangi (990kb/s / 909kb/s)"</item>
+ <item msgid="138837449700903545">"Venjulegt (660kb/s / 606kb/s)"</item>
+ <item msgid="4777177307869441982">"Tenging í forgangi (330kb/s / 303kb/s)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Hljóðgæði í forgangi (990kb/s / 909kb/s)"</item>
+ <item msgid="9091111147684472529">"Venjulegt (660kb/s / 606kb/s)"</item>
+ <item msgid="3367904477834831032">"Tenging í forgangi (330kb/s / 303kb/s)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Slökkt"</item>
<item msgid="1593289376502312923">"64 k"</item>
diff --git a/packages/SettingsLib/res/values-is-rIS/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
similarity index 96%
rename from packages/SettingsLib/res/values-is-rIS/strings.xml
rename to packages/SettingsLib/res/values-is/strings.xml
index 8be8444..4cecdbc 100644
--- a/packages/SettingsLib/res/values-is-rIS/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Leyfa alltaf reikileit með Wi-Fi"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Alltaf kveikt á farsímagögnum"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Slökkva á samstillingu hljóðstyrks"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth hljóðkóðari"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Veldu Bluetooth A2DP kóðara"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth hljóðtökutíðni"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Veldu Bluetooth A2DP kóðaratökutíðni"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth hljóðbitar í úrtaki"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Veldu Bluetooth A2DP kóðarabita í úrtaki"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Hljóðrásarstilling Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Veldu Bluetooth A2DP stillingu kóðararásar"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth LDAC gæði hljóðspilunar"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Veldu Bluetooth LDAC spilunargæði A2DP kóðara"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Sýna valkosti fyrir vottun þráðlausra skjáa"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Auka skráningarstig Wi-Fi, sýna RSSI fyrir hvert SSID í Wi-Fi vali"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Þegar þetta er virkt mun Wi-Fi ganga harðar fram í að færa gagnatenginguna yfir til símkerfisins þegar Wi-Fi merkið er lélegt"</string>
diff --git a/packages/SettingsLib/res/values-it/arrays.xml b/packages/SettingsLib/res/values-it/arrays.xml
index 518afed..5349086 100644
--- a/packages/SettingsLib/res/values-it/arrays.xml
+++ b/packages/SettingsLib/res/values-it/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Usa la verifica HDCP solo per contenuti DRM"</item>
<item msgid="45075631231212732">"Usa sempre la verifica HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Valore predefinito"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Valore predefinito"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Valore predefinito"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Valore predefinito"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Valore predefinito"</item>
+ <item msgid="5618929009984956469">"16 bit/campione"</item>
+ <item msgid="3412640499234627248">"24 bit/campione"</item>
+ <item msgid="121583001492929387">"32 bit/campione"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Valore predefinito"</item>
+ <item msgid="4726688794884191540">"16 bit/campione"</item>
+ <item msgid="305344756485516870">"24 bit/campione"</item>
+ <item msgid="244568657919675099">"32 bit/campione"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Valore predefinito"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Valore predefinito"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Qualità audio preferita (990 kbps/909 kbps)"</item>
+ <item msgid="138837449700903545">"Standard (660 kbps/606 kbps)"</item>
+ <item msgid="4777177307869441982">"Collegamento preferito (330 kbps/303 kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Qualità audio preferita (990 kbps/909 kbps)"</item>
+ <item msgid="9091111147684472529">"Standard (660 kbps/606 kbps)"</item>
+ <item msgid="3367904477834831032">"Collegamento preferito (330 kbps/303 kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Off"</item>
<item msgid="1593289376502312923">"64 kB"</item>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index 74ee5a1..a33fa87 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Consenti sempre scansioni roaming Wi-Fi"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Dati cellulare sempre attivi"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Disattiva volume assoluto"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Seleziona codec A2DP Bluetooth preferito"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Frequenza di campionamento audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Seleziona frequenza di campionamento preferita codec A2DP Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bit per campione dell\'audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Seleziona bit per campione preferiti codec A2DP Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modalità canale audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Seleziona modalità canale preferita codec A2DP Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Qualità di riproduzione LDAC audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Seleziona qualità di riproduzione preferita LDAC codec A2DP Bluetooth"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostra opzioni per la certificazione display wireless"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumenta il livello di registrazione Wi-Fi, mostrando il SSID RSSI nel selettore Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Quando questa impostazione è attivata, il Wi-Fi sarà più aggressivo nel passare la connessione dati al cellulare, quando il segnale Wi-Fi è basso"</string>
diff --git a/packages/SettingsLib/res/values-iw/arrays.xml b/packages/SettingsLib/res/values-iw/arrays.xml
index b3aee1d..621e14d 100644
--- a/packages/SettingsLib/res/values-iw/arrays.xml
+++ b/packages/SettingsLib/res/values-iw/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"השתמש בבדיקת HDCP עבור תוכן DRM בלבד"</item>
<item msgid="45075631231212732">"תמיד השתמש בבדיקת HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"ברירת מחדל"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"ברירת מחדל"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"ברירת מחדל"</item>
+ <item msgid="8895532488906185219">"44.1 קילו-הרץ"</item>
+ <item msgid="2909915718994807056">"48.0 קילו-הרץ"</item>
+ <item msgid="3347287377354164611">"88.2 קילו-הרץ"</item>
+ <item msgid="1234212100239985373">"96.0 קילו-הרץ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"ברירת מחדל"</item>
+ <item msgid="4482862757811638365">"44.1 קילו-הרץ"</item>
+ <item msgid="354495328188724404">"48.0 קילו-הרץ"</item>
+ <item msgid="7329816882213695083">"88.2 קילו-הרץ"</item>
+ <item msgid="6967397666254430476">"96.0 קילו-הרץ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"ברירת מחדל"</item>
+ <item msgid="5618929009984956469">"16 סיביות/דגימה"</item>
+ <item msgid="3412640499234627248">"24 סיביות/דגימה"</item>
+ <item msgid="121583001492929387">"32 סיביות/דגימה"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"ברירת מחדל"</item>
+ <item msgid="4726688794884191540">"16 סיביות/דגימה"</item>
+ <item msgid="305344756485516870">"24 סיביות/דגימה"</item>
+ <item msgid="244568657919675099">"32 סיביות/דגימה"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"ברירת מחדל"</item>
+ <item msgid="4106832974775067314">"מונו"</item>
+ <item msgid="5571632958424639155">"סטריאו"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"ברירת מחדל"</item>
+ <item msgid="8900559293912978337">"מונו"</item>
+ <item msgid="8883739882299884241">"סטריאו"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"איכות צליל מועדפת (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"רגילה (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"חיבור מועדף (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"איכות צליל מועדפת (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"רגילה (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"חיבור מועדף (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"כבוי"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index aa3dc13..45dd7e7 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"התר תמיד סריקות נדידה של Wi‑Fi"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"נתונים סלולריים פעילים תמיד"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"השבת עוצמת קול מוחלטת"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec אודיו ל-Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"בחר codec A2DP מועדף ל-Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"קצב דגימה של אודיו ל-Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"בחר קצב דגימה מועדף ב-codec A2DP ל-Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"מספר סיביות לדגימה באודיו ל-Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"בחר מספר מועדף של סיביות לדגימה ב-codec A2DP ל-Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"מצב של ערוץ אודיו ל-Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"בחר מצב ערוץ מועדף ב-codec A2DP ל-Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"איכות נגינה של אודיו LDAC ל-Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"בחר איכות נגינה מועדפת ב-codec A2DP ל-Bluetooth"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"הצג אפשרויות עבור אישור של תצוגת WiFi"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"העלה את רמת הרישום של Wi‑Fi ביומן, הצג לכל SSID RSSI ב-Wi‑Fi Picker"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"כשתכונה זו מופעלת, Wi-Fi יתנהג בצורה אגרסיבית יותר בעת העברת חיבור הנתונים לרשת הסלולרית כשאות ה-Wi-Fi חלש."</string>
diff --git a/packages/SettingsLib/res/values-ja/arrays.xml b/packages/SettingsLib/res/values-ja/arrays.xml
index 3d7d070..cc00934 100644
--- a/packages/SettingsLib/res/values-ja/arrays.xml
+++ b/packages/SettingsLib/res/values-ja/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"DRMコンテンツにのみHDCPチェックを使用する"</item>
<item msgid="45075631231212732">"HDCPチェックを常に使用する"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"デフォルト"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"デフォルト"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"デフォルト"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"デフォルト"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"デフォルト"</item>
+ <item msgid="5618929009984956469">"16 ビット / サンプル"</item>
+ <item msgid="3412640499234627248">"24 ビット / サンプル"</item>
+ <item msgid="121583001492929387">"32 ビット / サンプル"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"デフォルト"</item>
+ <item msgid="4726688794884191540">"16 ビット / サンプル"</item>
+ <item msgid="305344756485516870">"24 ビット / サンプル"</item>
+ <item msgid="244568657919675099">"32 ビット / サンプル"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"デフォルト"</item>
+ <item msgid="4106832974775067314">"モノラル"</item>
+ <item msgid="5571632958424639155">"ステレオ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"デフォルト"</item>
+ <item msgid="8900559293912978337">"モノラル"</item>
+ <item msgid="8883739882299884241">"ステレオ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"優先する音質(990 kbps / 909 kbps)"</item>
+ <item msgid="138837449700903545">"標準(660 kbps / 606 kbps)"</item>
+ <item msgid="4777177307869441982">"優先する接続(330 kbps / 303 kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"優先する音質(990 kbps / 909 kbps)"</item>
+ <item msgid="9091111147684472529">"標準(660 kbps / 606 kbps)"</item>
+ <item msgid="3367904477834831032">"優先する接続(330 kbps / 303 kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"OFF"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index f760d93..12a8734 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fiローミングスキャンを常に許可する"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"モバイルデータを常にON"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"絶対音量を無効にする"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth オーディオ コーデック"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"優先する Bluetooth A2DP コーデックを選択"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth オーディオ サンプルレート"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"優先する Bluetooth A2DP コーデック サンプルレートを選択"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"サンプルあたりの Bluetooth オーディオ ビット"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"優先するサンプルあたりの Bluetooth A2DP コーデック ビットを選択"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth オーディオ チャンネル モード"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"優先する Bluetooth A2DP コーデック チャンネル モードを選択"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth オーディオ LDAC 再生音質"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"優先する Bluetooth A2DP コーデック LDAC 再生音質を選択"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ワイヤレスディスプレイ認証のオプションを表示"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fiログレベルを上げて、Wi-Fi選択ツールでSSID RSSIごとに表示します"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"有効にすると、Wi-Fiの電波強度が弱い場合は強制的にモバイルデータ接続に切り替わるようになります"</string>
diff --git a/packages/SettingsLib/res/values-ka-rGE/arrays.xml b/packages/SettingsLib/res/values-ka/arrays.xml
similarity index 76%
rename from packages/SettingsLib/res/values-ka-rGE/arrays.xml
rename to packages/SettingsLib/res/values-ka/arrays.xml
index 804e129..0e6eb7c 100644
--- a/packages/SettingsLib/res/values-ka-rGE/arrays.xml
+++ b/packages/SettingsLib/res/values-ka/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"HDCP შემოწმების გამოყენება მხოლოდ DRM კონტენტის შემთხვევაში"</item>
<item msgid="45075631231212732">"ყოველთვის გამოიყენე HDCP შემოწმება"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"ნაგულისხმევი"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"ნაგულისხმევი"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"ნაგულისხმევი"</item>
+ <item msgid="8895532488906185219">"44,1 კჰც"</item>
+ <item msgid="2909915718994807056">"48,0 კჰც"</item>
+ <item msgid="3347287377354164611">"88,2 კჰც"</item>
+ <item msgid="1234212100239985373">"96,0 კჰც"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"ნაგულისხმევი"</item>
+ <item msgid="4482862757811638365">"44,1 კჰც"</item>
+ <item msgid="354495328188724404">"48,0 კჰც"</item>
+ <item msgid="7329816882213695083">"88,2 კჰც"</item>
+ <item msgid="6967397666254430476">"96,0 კჰც"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"ნაგულისხმევი"</item>
+ <item msgid="5618929009984956469">"16 ბიტი/ნიმუში"</item>
+ <item msgid="3412640499234627248">"24 ბიტი/ნიმუში"</item>
+ <item msgid="121583001492929387">"32 ბიტი/ნიმუში"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"ნაგულისხმევი"</item>
+ <item msgid="4726688794884191540">"16 ბიტი/ნიმუში"</item>
+ <item msgid="305344756485516870">"24 ბიტი/ნიმუში"</item>
+ <item msgid="244568657919675099">"32 ბიტი/ნიმუში"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"ნაგულისხმევი"</item>
+ <item msgid="4106832974775067314">"მონო"</item>
+ <item msgid="5571632958424639155">"სტერეო"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"ნაგულისხმევი"</item>
+ <item msgid="8900559293912978337">"მონო"</item>
+ <item msgid="8883739882299884241">"სტერეო"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"სასურველია ხმის ხარისხი (990/909 კბიტი/წმ)"</item>
+ <item msgid="138837449700903545">"სტანდარტული (660/606 კბიტი/წმ)"</item>
+ <item msgid="4777177307869441982">"სასურველია კავშირი (330/303 კბიტი/წმ)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"სასურველია ხმის ხარისხი (990/909 კბიტი/წმ)"</item>
+ <item msgid="9091111147684472529">"სტანდარტული (660/606 კბიტი/წმ)"</item>
+ <item msgid="3367904477834831032">"სასურველია კავშირი (330/303 კბიტი/წმ)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"გამორთული"</item>
<item msgid="1593289376502312923">"64 კბაიტი"</item>
diff --git a/packages/SettingsLib/res/values-ka-rGE/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml
similarity index 96%
rename from packages/SettingsLib/res/values-ka-rGE/strings.xml
rename to packages/SettingsLib/res/values-ka/strings.xml
index 8a3b81b..18c2def 100644
--- a/packages/SettingsLib/res/values-ka-rGE/strings.xml
+++ b/packages/SettingsLib/res/values-ka/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi Roam სკანირების მუდამ დაშვება"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"ფიჭური მონაცემები ყოველთვის აქტიურია"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ხმის აბსოლუტური სიძლიერის გათიშვა"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth აუდიოს კოდეკი"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"აირჩიეთ Bluetooth A2DP-ის სასურველი კოდეკი"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth აუდიოს დისკრეტიზაციის სიხშირე"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"აირჩიეთ Bluetooth A2DP კოდეკის დისკრეტიზაციის სასურველი სიხშირე"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth აუდიოს ბიტების რაოდენობა ნიმუშზე"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"აირჩიეთ Bluetooth A2DP კოდეკის ბიტების სასურველი რაოდენობა ნიმუშზე"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth აუდიოს არხის რეჟიმი"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"აირჩიეთ Bluetooth A2DP კოდეკის არხის სასურველი რეჟიმი"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth აუდიოს LDAC დაკვრის ხარისხი"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"აირჩიეთ Bluetooth A2DP კოდეკის LDAC დაკვრის სასურველი ხარისხი"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"უსადენო ეკრანის სერტიფიცირების ვარიანტების ჩვენება"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi-ს აღრიცხვის დონის გაზრდა, Wi‑Fi ამომრჩეველში ყოველ SSID RSSI-ზე ჩვენება"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"თუ ჩართულია, Wi‑Fi სიგნალის შესუსტების შემთხვევაში Wi-Fi უფრო აქტიურად შეეცდება გადაიყვანოს ინტერნეტ-კავშირი მობილურ ინტერნეტზე"</string>
diff --git a/packages/SettingsLib/res/values-kk-rKZ/arrays.xml b/packages/SettingsLib/res/values-kk/arrays.xml
similarity index 76%
rename from packages/SettingsLib/res/values-kk-rKZ/arrays.xml
rename to packages/SettingsLib/res/values-kk/arrays.xml
index 78e2f76..e253a79 100644
--- a/packages/SettingsLib/res/values-kk-rKZ/arrays.xml
+++ b/packages/SettingsLib/res/values-kk/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"HDCP (кең жолақты сандық мазмұн қорғау) тексеруді DRM (авторлық құқықты техникалық қорғау) мазмұны үшін ғана қолданыңыз"</item>
<item msgid="45075631231212732">"Әрқашан HDCP (жоғары кең жолақты сандық мазмұн қорғаушы) тексерулерін қолданыңыз"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Әдепкі"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Әдепкі"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Әдепкі"</item>
+ <item msgid="8895532488906185219">"44,1 кГц"</item>
+ <item msgid="2909915718994807056">"48,0 кГц"</item>
+ <item msgid="3347287377354164611">"88,2 кГц"</item>
+ <item msgid="1234212100239985373">"96,0 кГц"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Әдепкі"</item>
+ <item msgid="4482862757811638365">"44,1 кГц"</item>
+ <item msgid="354495328188724404">"48,0 кГц"</item>
+ <item msgid="7329816882213695083">"88,2 кГц"</item>
+ <item msgid="6967397666254430476">"96,0 кГц"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Әдепкі"</item>
+ <item msgid="5618929009984956469">"16 бит/үлгі"</item>
+ <item msgid="3412640499234627248">"24 бит/үлгі"</item>
+ <item msgid="121583001492929387">"32 бит/үлгі"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Әдепкі"</item>
+ <item msgid="4726688794884191540">"16 бит/үлгі"</item>
+ <item msgid="305344756485516870">"24 бит/үлгі"</item>
+ <item msgid="244568657919675099">"32 бит/үлгі"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Әдепкі"</item>
+ <item msgid="4106832974775067314">"Моно"</item>
+ <item msgid="5571632958424639155">"Стерео"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Әдепкі"</item>
+ <item msgid="8900559293912978337">"Моно"</item>
+ <item msgid="8883739882299884241">"Стерео"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Таңдаулы дыбыс сапасы (990 кб/сек не 909 кб/сек)"</item>
+ <item msgid="138837449700903545">"Стандартты (660 кб/сек не 606 кб/сек)"</item>
+ <item msgid="4777177307869441982">"Таңдаулы байланыс (330 кб/сек не 303 кб/сек)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Таңдаулы дыбыс сапасы (990 кб/сек не 909 кб/сек)"</item>
+ <item msgid="9091111147684472529">"Стандартты (660 кб/сек не 606 кб/сек)"</item>
+ <item msgid="3367904477834831032">"Таңдаулы байланыс (330 кб/сек не 303 кб/сек)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Өшірулі"</item>
<item msgid="1593289376502312923">"64 КБ"</item>
diff --git a/packages/SettingsLib/res/values-kk-rKZ/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
similarity index 95%
rename from packages/SettingsLib/res/values-kk-rKZ/strings.xml
rename to packages/SettingsLib/res/values-kk/strings.xml
index 920b810..505b118 100644
--- a/packages/SettingsLib/res/values-kk-rKZ/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi роумингін іздеулерге әрқашан рұқсат ету"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Ұялы деректер әрқашан белсенді"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Абсолютті дыбыс деңгейін өшіру"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth аудимазмұны кодегі"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Таңдаулы Bluetooth A2DP кодегін таңдау"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth аудиомазмұны бойынша үлгі жиілігі"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Таңдаулы Bluetooth A2DP кодегі бойынша үлгі жиілігі"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth аудиомазмұны бойынша әр үлгіге келетін биттер саны"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Таңдаулы Bluetooth A2DP кодегі бойынша әр үлгіге келетін биттер санын таңдау"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth аудиомазмұны бойынша арна режимі"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Таңдаулы Bluetooth A2DP кодегі бойынша арна режимі"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth аудиомазмұны бойынша LDAC ойнату сапасы"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Таңдаулы Bluetooth A2DP кодегі бойынша LDAC ойнату сапасын таңдау"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Сымсыз дисплей растау опцияларын көрсету"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi жур. тір. дең. арт., Wi‑Fi желісін таңдағышта әр SSID RSSI бойынша көрсету"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Wi‑Fi сигналы әлсіз болғанда, деректер байланысы мәжбүрлі түрде ұялы желіге ауысады"</string>
diff --git a/packages/SettingsLib/res/values-km-rKH/arrays.xml b/packages/SettingsLib/res/values-km/arrays.xml
similarity index 76%
rename from packages/SettingsLib/res/values-km-rKH/arrays.xml
rename to packages/SettingsLib/res/values-km/arrays.xml
index 2879b09..569603f 100644
--- a/packages/SettingsLib/res/values-km-rKH/arrays.xml
+++ b/packages/SettingsLib/res/values-km/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"ប្រើការពិនិត្យ HDCP សម្រាប់តែមាតិកា DRM ប៉ុណ្ណោះ"</item>
<item msgid="45075631231212732">"ប្រើការពិនិត្យ HDCP ជានិច្ច"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"លំនាំដើម"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"លំនាំដើម"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"លំនាំដើម"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"លំនាំដើម"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"លំនាំដើម"</item>
+ <item msgid="5618929009984956469">"16 ប៊ីត/គំរូ"</item>
+ <item msgid="3412640499234627248">"24 ប៊ីត/គំរូ"</item>
+ <item msgid="121583001492929387">"32 ប៊ីត/គំរូ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"លំនាំដើម"</item>
+ <item msgid="4726688794884191540">"16 ប៊ីត/គំរូ"</item>
+ <item msgid="305344756485516870">"24 ប៊ីត/គំរូ"</item>
+ <item msgid="244568657919675099">"32 ប៊ីត/គំរូ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"លំនាំដើម"</item>
+ <item msgid="4106832974775067314">"ម៉ូណូ"</item>
+ <item msgid="5571632958424639155">"ស្តេរ៉េអូ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"លំនាំដើម"</item>
+ <item msgid="8900559293912978337">"ម៉ូណូ"</item>
+ <item msgid="8883739882299884241">"ស្តេរ៉េអូ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"គុណភាពសំឡេងដែលគួរប្រើ (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"ស្តង់ដា (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"ការតភ្ជាប់ដែលគួរប្រើ (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"គុណភាពសំឡេងដែលគួរប្រើ (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"ស្តង់ដា (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"ការតភ្ជាប់ដែលគួរប្រើ (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"បិទ"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-km-rKH/strings.xml b/packages/SettingsLib/res/values-km/strings.xml
similarity index 95%
rename from packages/SettingsLib/res/values-km-rKH/strings.xml
rename to packages/SettingsLib/res/values-km/strings.xml
index d162bd1..b7bddd8 100644
--- a/packages/SettingsLib/res/values-km-rKH/strings.xml
+++ b/packages/SettingsLib/res/values-km/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"តែងតែអនុញ្ញាតការវិភាគរ៉ូមវ៉ាយហ្វាយ"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"ទិន្នន័យចល័តសកម្មជានិច្ច"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"បិទកម្រិតសំឡេងលឺខ្លាំង"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"កូឌិកសំឡេងប៊្លូធូស"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"ជ្រើសរើសកូឌិកសម្រាប់ប៊្លូធូស A2DP ដែលគួរប្រើ"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"អត្រាគំរូសំឡេងប៊្លូធូស"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"ជ្រើសរើសអត្រាគំរូកូឌិកសម្រាប់ប៊្លូធូស A2DP ដែលគួរប្រើ"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"កម្រិតប៊ីតក្នុងមួយគំរូនៃសំឡេងប៊្លូធូស"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"ជ្រើសរើសកម្រិតប៊ីតក្នុងមួយគំរូនៃកូឌិកប៊្លូធូស A2DP ដែលគួរប្រើ"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"មុខងាររលកសញ្ញាសំឡេងប៊្លូធូស"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"ជ្រើសរើសមុខងាររលកសញ្ញាកូឌិកប៊្លូធូស A2DP ដែលគួរប្រើ"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"គុណភាពចាក់សម្រាប់សំឡេងប៊្លូធូស LDAC"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"ជ្រើសរើសគុណភាពចាក់ LDAC កូឌិក សម្រាប់ប៊្លូធូស A2DP ដែលគួរប្រើ"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"បង្ហាញជម្រើសសម្រាប់វិញ្ញាបនបត្របង្ហាញឥតខ្សែ"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"បង្កើនកម្រិតកំណត់ហេតុវ៉ាយហ្វាយបង្ហាញក្នុង SSID RSSI ក្នុងកម្មវិធីជ្រើសវ៉ាយហ្វាយ"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"ពេលបានបើក វ៉ាយហ្វាយនឹងកាន់តែបង្ខំក្នុងការបញ្ជូនការភ្ជាប់ទិន្នន័យទៅបណ្ដាញចល័ត នៅពេលសញ្ញាវ៉ាយហ្វាយយឺត"</string>
diff --git a/packages/SettingsLib/res/values-kn-rIN/arrays.xml b/packages/SettingsLib/res/values-kn/arrays.xml
similarity index 76%
rename from packages/SettingsLib/res/values-kn-rIN/arrays.xml
rename to packages/SettingsLib/res/values-kn/arrays.xml
index d3e9f65..ae3e97d 100644
--- a/packages/SettingsLib/res/values-kn-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-kn/arrays.xml
@@ -51,13 +51,73 @@
<string-array name="hdcp_checking_titles">
<item msgid="441827799230089869">"ಎಂದಿಗೂ ಪರಿಶೀಲಿಸದಿರು"</item>
<item msgid="6042769699089883931">"DRM ವಿಷಯಗಳಿಗಾಗಿ ಮಾತ್ರ ಪರಿಶೀಲಿಸಿ"</item>
- <item msgid="9174900380056846820">"ಯಾವಾಗಲೂ ಪರಿಶೀಲಿಸು"</item>
+ <item msgid="9174900380056846820">"ಯಾವಾಗಲೂ ಪರಿಶೀಲಿಸಿ"</item>
</string-array>
<string-array name="hdcp_checking_summaries">
<item msgid="505558545611516707">"HDCP ಪರಿಶೀಲನೆಯನ್ನು ಎಂದಿಗೂ ಬಳಸದಿರು"</item>
<item msgid="3878793616631049349">"DRM ವಿಷಯಗಳಿಗೆ ಮಾತ್ರ HDCP ಪರೀಕ್ಷಿಸುವಿಕೆಯನ್ನು ಬಳಸು"</item>
<item msgid="45075631231212732">"HDCP ಪರಿಶೀಲನೆಯನ್ನು ಯಾವಾಗಲೂ ಬಳಸು"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"ಡಿಫಾಲ್ಟ್"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"ಡಿಫಾಲ್ಟ್"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"ಡಿಫಾಲ್ಟ್"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"ಡಿಫಾಲ್ಟ್"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"ಡಿಫಾಲ್ಟ್"</item>
+ <item msgid="5618929009984956469">"16 ಬಿಟ್ಸ್/ಮಾದರಿ"</item>
+ <item msgid="3412640499234627248">"24 ಬಿಟ್ಸ್/ಮಾದರಿ"</item>
+ <item msgid="121583001492929387">"32 ಬಿಟ್ಸ್/ಮಾದರಿ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"ಡಿಫಾಲ್ಟ್"</item>
+ <item msgid="4726688794884191540">"16 ಬಿಟ್ಸ್/ಮಾದರಿ"</item>
+ <item msgid="305344756485516870">"24 ಬಿಟ್ಸ್/ಮಾದರಿ"</item>
+ <item msgid="244568657919675099">"32 ಬಿಟ್ಸ್/ಮಾದರಿ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"ಡಿಫಾಲ್ಟ್"</item>
+ <item msgid="4106832974775067314">"ಮೊನೊ"</item>
+ <item msgid="5571632958424639155">"ಸ್ಟೀರಿಯೊ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"ಡಿಫಾಲ್ಟ್"</item>
+ <item msgid="8900559293912978337">"ಮೊನೊ"</item>
+ <item msgid="8883739882299884241">"ಸ್ಟೀರಿಯೊ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"ಧ್ವನಿಯ ಗುಣಮಟ್ಟಕ್ಕೆ ಆದ್ಯತೆ ನೀಡಲಾಗಿದೆ (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"ಪ್ರಮಾಣಿತ (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"ಸಂಪರ್ಕಕ್ಕೆ ಆದ್ಯತೆ ನೀಡಲಾಗಿದೆ (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"ಧ್ವನಿಯ ಗುಣಮಟ್ಟಕ್ಕೆ ಆದ್ಯತೆ ನೀಡಲಾಗಿದೆ (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"ಪ್ರಮಾಣಿತ (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"ಸಂಪರ್ಕಕ್ಕೆ ಆದ್ಯತೆ ನೀಡಲಾಗಿದೆ (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ಆಫ್"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-kn-rIN/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml
similarity index 95%
rename from packages/SettingsLib/res/values-kn-rIN/strings.xml
rename to packages/SettingsLib/res/values-kn/strings.xml
index ca0ba0a..5ac99d3 100644
--- a/packages/SettingsLib/res/values-kn-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-kn/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"ವೈ-ಫೈ ರೋಮ್ ಸ್ಕ್ಯಾನ್ಗಳನ್ನು ಯಾವಾಗಲೂ ಅನುಮತಿಸಿ"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"ಸೆಲ್ಯುಲರ್ ಡೇಟಾ ಯಾವಾಗಲೂ ಸಕ್ರಿಯ"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ಸಂಪೂರ್ಣ ವಾಲ್ಯೂಮ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ಬ್ಲೂಟೂತ್ ಆಡಿಯೋ ಕೋಡೆಕ್"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"ಪ್ರಾಶಸ್ತ್ಯದ ಬ್ಲೂಟೂತ್ A2DP ಕೋಡೆಕ್ ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿ"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ಬ್ಲೂಟೂತ್ ಆಡಿಯೋ ಮಾದರಿ ದರ"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"ಪ್ರಾಶಸ್ತ್ಯದ ಬ್ಲೂಟೂಥ್ A2DP ಕೋಡೆಕ್ ಮಾದರಿ ದರವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"ಬ್ಲೂಟೂತ್ ಆಡಿಯೊ ಬಿಟ್ಸ್ನ ಪ್ರತಿ ಮಾದರಿ"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"ಪ್ರಾಶಸ್ತ್ಯದ ಬ್ಲೂಟೂತ್ A2DP ಕೋಡೆಕ್ ಬಿಟ್ಸ್ನ ಪ್ರತಿ ಮಾದರಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ಬ್ಲೂಟೂತ್ ಆಡಿಯೋ ಚಾನೆಲ್ ಮೋಡ್"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"ಪ್ರಾಶಸ್ತ್ಯದ ಬ್ಲೂಟೂತ್ A2DP ಕೋಡೆಕ್ ಚಾನಲ್ ಮೋಡ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"ಬ್ಲೂಟೂತ್ ಆಡಿಯೊ LDAC ಪ್ಲೇಬ್ಯಾಕ್ ಗುಣಮಟ್ಟ"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"ಪ್ರಾಶಸ್ತ್ಯದ ಬ್ಲೂಟೂತ್ A2DP ಕೋಡೆಕ್ LDAC ಪ್ಲೇಬ್ಯಾಕ್ ಗುಣಮಟ್ಟವನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ವೈರ್ಲೆಸ್ ಪ್ರದರ್ಶನ ಪ್ರಮಾಣೀಕರಣಕ್ಕಾಗಿ ಆಯ್ಕೆಗಳನ್ನು ತೋರಿಸು"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi ಲಾಗಿಂಗ್ ಮಟ್ಟನ್ನು ಹೆಚ್ಚಿಸಿ, Wi‑Fi ಆಯ್ಕೆಯಲ್ಲಿ ಪ್ರತಿಯೊಂದು SSID RSSI ತೋರಿಸಿ"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"ಸಕ್ರಿಯಗೊಂಡರೆ, Wi‑Fi ಸಿಗ್ನಲ್ ದುರ್ಬಲವಾಗಿದ್ದರೂ ಕೂಡ, ಸೆಲ್ಯುಲರ್ಗೆ ಡೇಟಾ ಸಂಪರ್ಕವನ್ನು ಹಸ್ತಾಂತರಿಸುವಲ್ಲಿ Wi‑Fi ಹೆಚ್ಚು ಆಕ್ರಮಣಕಾರಿಯಾಗಿರುತ್ತದೆ"</string>
diff --git a/packages/SettingsLib/res/values-ko/arrays.xml b/packages/SettingsLib/res/values-ko/arrays.xml
index 9cf5fd4..f709e88 100644
--- a/packages/SettingsLib/res/values-ko/arrays.xml
+++ b/packages/SettingsLib/res/values-ko/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"DRM 콘텐츠에 대해서만 HDCP 확인 사용"</item>
<item msgid="45075631231212732">"항상 HDCP 확인 사용"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"기본값"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"기본값"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"기본값"</item>
+ <item msgid="8895532488906185219">"44.1kHz"</item>
+ <item msgid="2909915718994807056">"48.0kHz"</item>
+ <item msgid="3347287377354164611">"88.2kHz"</item>
+ <item msgid="1234212100239985373">"96.0kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"기본값"</item>
+ <item msgid="4482862757811638365">"44.1kHz"</item>
+ <item msgid="354495328188724404">"48.0kHz"</item>
+ <item msgid="7329816882213695083">"88.2kHz"</item>
+ <item msgid="6967397666254430476">"96.0kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"기본값"</item>
+ <item msgid="5618929009984956469">"16비트/샘플"</item>
+ <item msgid="3412640499234627248">"24비트/샘플"</item>
+ <item msgid="121583001492929387">"32비트/샘플"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"기본값"</item>
+ <item msgid="4726688794884191540">"16비트/샘플"</item>
+ <item msgid="305344756485516870">"24비트/샘플"</item>
+ <item msgid="244568657919675099">"32비트/샘플"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"기본값"</item>
+ <item msgid="4106832974775067314">"모노"</item>
+ <item msgid="5571632958424639155">"스테레오"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"기본값"</item>
+ <item msgid="8900559293912978337">"모노"</item>
+ <item msgid="8883739882299884241">"스테레오"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"음질 우선(990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"표준(660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"연결 우선(330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"음질 우선(990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"표준(660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"연결 우선(330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"사용 안함"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index 2732853..a21fb25 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi 로밍 스캔 항상 허용"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"모바일 데이터 항상 활성화"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"절대 볼륨 사용 안함"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"블루투스 오디오 코덱"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"기본 블루투스 A2DP 코덱 선택"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"블루투스 오디오 샘플링 비율"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"기본 블루투스 A2DP 코덱 샘플링 비율 선택"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"블루투스 오디오 샘플당 비트"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"기본 블루투스 A2DP 코덱 샘플당 비트 선택"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"블루투스 오디오 채널 모드"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"기본 블루투스 A2DP 코덱 채널 모드 선택"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"블루투스 오디오 LDAC 재생 품질"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"기본 블루투스 A2DP 코덱 LDAC 재생 품질 선택"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"무선 디스플레이 인증서 옵션 표시"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi 로깅 수준을 높이고, Wi‑Fi 선택도구에서 SSID RSSI당 값을 표시합니다."</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"사용 설정하면 Wi-Fi 신호가 약할 때 데이터 연결을 Wi-Fi에서 데이터 네트워크로 더욱 적극적으로 핸드오버합니다."</string>
diff --git a/packages/SettingsLib/res/values-ky-rKG/arrays.xml b/packages/SettingsLib/res/values-ky/arrays.xml
similarity index 76%
rename from packages/SettingsLib/res/values-ky-rKG/arrays.xml
rename to packages/SettingsLib/res/values-ky/arrays.xml
index 1aadb9b..84d9002 100644
--- a/packages/SettingsLib/res/values-ky-rKG/arrays.xml
+++ b/packages/SettingsLib/res/values-ky/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"HDCP текшерүү DRM мазмунуна гана колдонулсун"</item>
<item msgid="45075631231212732">"Ар дайым HDCP текшерүү колдонулсун"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Демейки"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Демейки"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Демейки"</item>
+ <item msgid="8895532488906185219">"44,1 кГц"</item>
+ <item msgid="2909915718994807056">"48,0 кГц"</item>
+ <item msgid="3347287377354164611">"88,2 кГц"</item>
+ <item msgid="1234212100239985373">"96,0 кГц"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Демейки"</item>
+ <item msgid="4482862757811638365">"44,1 кГц"</item>
+ <item msgid="354495328188724404">"48,0 кГц"</item>
+ <item msgid="7329816882213695083">"88,2 кГц"</item>
+ <item msgid="6967397666254430476">"96,0 кГц"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Демейки"</item>
+ <item msgid="5618929009984956469">"16 бит/үлгү"</item>
+ <item msgid="3412640499234627248">"24 бит/үлгү"</item>
+ <item msgid="121583001492929387">"32 бит/үлгү"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Демейки"</item>
+ <item msgid="4726688794884191540">"16 бит/үлгү"</item>
+ <item msgid="305344756485516870">"24 бит/үлгү"</item>
+ <item msgid="244568657919675099">"32 бит/үлгү"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Демейки"</item>
+ <item msgid="4106832974775067314">"Моно"</item>
+ <item msgid="5571632958424639155">"Стерео"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Демейки"</item>
+ <item msgid="8900559293912978337">"Моно"</item>
+ <item msgid="8883739882299884241">"Стерео"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Тандалган добуш сапаты (990Кб/сек./909Кб/сек.)"</item>
+ <item msgid="138837449700903545">"Стандарт (660Кб/сек./606Кб/сек.)"</item>
+ <item msgid="4777177307869441982">"Тандалган туташуу (330Кб/сек./303Кб/сек.)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Тандалган добуш сапаты (990Кб/сек./909Кб/сек.)"</item>
+ <item msgid="9091111147684472529">"Стандарт (660Кб/сек./606Кб/сек.)"</item>
+ <item msgid="3367904477834831032">"Тандалган туташуу (330Кб/сек./303Кб/сек.)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Өчүк"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-ky-rKG/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
similarity index 96%
rename from packages/SettingsLib/res/values-ky-rKG/strings.xml
rename to packages/SettingsLib/res/values-ky/strings.xml
index 3783cce..d1320da 100644
--- a/packages/SettingsLib/res/values-ky-rKG/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi-Fi Роуминг Скандоо мүмкүнчүлүгүнө ар дайым уруксат берилсин"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Уюлдук дайындар ар дайым активдүү"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Үндүн абсолюттук деңгээли өчүрүлсүн"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth аудио кодек"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Керектүү Bluetooth A2DP кодекти тандаңыз"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth аудио үлгүсүнүн ылдамдыгы"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Bluetooth A2DP кодек үлгүсүнүн керектүү ылдамдыгын тандаңыз"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Бир үлгүдөгү Bluetooth аудио биттери"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Бир үлгү үчүн керектүү Bluetooth A2DP кодек биттерин тандаңыз"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth аудио каналынын режими"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Bluetooth A2DP кодек каналынын керектүү режимин тандаңыз"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth аудио LDAC ойнотуу сапаты"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Bluetooth A2DP кодек үчүн керектүү LDAC ойнотуу сапатын тандаңыз"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Зымсыз дисплейди сертификатто мүмкүнчүлүктөрүн көргөзүү"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fi Кармагычта Wi‑Fi протокол деңгээлин жогорулатуу жана ар бир SSID RSSI үчүн көрсөтүү."</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Иштетилгенде, Wi-Fi байланышы үзүл-кесил болуп жатканда, Wi-Fi дайындарды уюктук операторго өжөрлүк менен өткөрөт."</string>
diff --git a/packages/SettingsLib/res/values-lo-rLA/arrays.xml b/packages/SettingsLib/res/values-lo/arrays.xml
similarity index 77%
rename from packages/SettingsLib/res/values-lo-rLA/arrays.xml
rename to packages/SettingsLib/res/values-lo/arrays.xml
index a003655..45bb579 100644
--- a/packages/SettingsLib/res/values-lo-rLA/arrays.xml
+++ b/packages/SettingsLib/res/values-lo/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"ໃຊ້ການກວດສອບ HDCP ສຳລັບເນື້ອຫາ DRM ເທົ່ານັ້ນ"</item>
<item msgid="45075631231212732">"ໃຊ້ການກວດສອບ HDCP ສະເໝີ"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"ຄ່າເລີ່ມຕົ້ນ"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"ຄ່າເລີ່ມຕົ້ນ"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"ຄ່າເລີ່ມຕົ້ນ"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"ຄ່າເລີ່ມຕົ້ນ"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"ຄ່າເລີ່ມຕົ້ນ"</item>
+ <item msgid="5618929009984956469">"16 bits/sample"</item>
+ <item msgid="3412640499234627248">"24 bits/sample"</item>
+ <item msgid="121583001492929387">"32 bits/sample"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"ຄ່າເລີ່ມຕົ້ນ"</item>
+ <item msgid="4726688794884191540">"16 bits/sample"</item>
+ <item msgid="305344756485516870">"24 bits/sample"</item>
+ <item msgid="244568657919675099">"32 bits/sample"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"ຄ່າເລີ່ມຕົ້ນ"</item>
+ <item msgid="4106832974775067314">"ໂທນດຽວ"</item>
+ <item msgid="5571632958424639155">"ສະເຕຣິໂອ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"ຄ່າເລີ່ມຕົ້ນ"</item>
+ <item msgid="8900559293912978337">"ໂທນດຽວ"</item>
+ <item msgid="8883739882299884241">"ສະເຕຣິໂອ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Sound quality preferred (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"Standard (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"Connection preferred (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Sound quality preferred (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"Standard (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"Connection preferred (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ປິດ"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-lo-rLA/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
similarity index 97%
rename from packages/SettingsLib/res/values-lo-rLA/strings.xml
rename to packages/SettingsLib/res/values-lo/strings.xml
index 7b16fd9..639769a 100644
--- a/packages/SettingsLib/res/values-lo-rLA/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"ອະນຸຍາດການສະແກນການໂຣມ Wi‑Fi ສະເໝີ"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"ຂໍ້ມູນມືຖືເປີດຢູ່ສະເໝີ"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ປິດໃຊ້ລະດັບສຽງສົມບູນ"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio Codec"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Select Preferred Bluetooth A2DP Codec"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Audio Sample Rate"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Select Preferred Bluetooth A2DP Codec Sample Rate"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth Audio Bits Per Sample"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Select Preferred Bluetooth A2DP Codec Bits Per Sample"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio Channel Mode"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Select Preferred Bluetooth A2DP Codec Channel Mode"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth Audio LDAC Playback Quality"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Select Preferred Bluetooth A2DP Codec LDAC Playback Quality"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ສະແດງໂຕເລືອກສຳລັບການສະແດງການຮັບຮອງລະບົບໄຮ້ສາຍ"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"ເພີ່ມລະດັບການເກັບປະຫວັດ Wi‑Fi, ສະແດງຕໍ່ SSID RSSI ໃນ Wi‑Fi Picker"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"ເມື່ອເປີດນຳໃຊ້ແລ້ວ, ເຄືອຂ່າຍ Wi-Fi ຈະຖືກປ່ຽນໄປໃຊ້ເຄືອຂ່າຍໂທລະສັບແທນຫາກສັນຍານ Wi-Fi ອ່ອນ"</string>
diff --git a/packages/SettingsLib/res/values-lt/arrays.xml b/packages/SettingsLib/res/values-lt/arrays.xml
index 472365d..b61b6d8 100644
--- a/packages/SettingsLib/res/values-lt/arrays.xml
+++ b/packages/SettingsLib/res/values-lt/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Taikyti HDCP tikrinimą tik DRM turiniui"</item>
<item msgid="45075631231212732">"Visada naudoti HDCP tikrinimą"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Numatytasis"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Numatytasis"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Numatytasis"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Numatytasis"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Numatytasis"</item>
+ <item msgid="5618929009984956469">"16 bitų pavyzdyje"</item>
+ <item msgid="3412640499234627248">"24 bitai pavyzdyje"</item>
+ <item msgid="121583001492929387">"32 bitai pavyzdyje"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Numatytasis"</item>
+ <item msgid="4726688794884191540">"16 bitų pavyzdyje"</item>
+ <item msgid="305344756485516870">"24 bitai pavyzdyje"</item>
+ <item msgid="244568657919675099">"32 bitai pavyzdyje"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Numatytasis"</item>
+ <item msgid="4106832974775067314">"Monofoninis garsas"</item>
+ <item msgid="5571632958424639155">"Stereofoninis garsas"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Numatytasis"</item>
+ <item msgid="8900559293912978337">"Monofoninis garsas"</item>
+ <item msgid="8883739882299884241">"Stereofoninis garsas"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Pageid. garso kok. (990 KB/s / 909 KB/s)"</item>
+ <item msgid="138837449700903545">"Įprasta (660 KB/s / 606 KB/s)"</item>
+ <item msgid="4777177307869441982">"Pageidautin. ryšys (330 KB/s / 303 KB/s)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Pageid. garso kok. (990 KB/s / 909 KB/s)"</item>
+ <item msgid="9091111147684472529">"Įprasta (660 KB/s / 606 KB/s)"</item>
+ <item msgid="3367904477834831032">"Pageidautin. ryšys (330 KB/s / 303 KB/s)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Išjungta"</item>
<item msgid="1593289376502312923">"64 KB"</item>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index 85e044f..4616b86 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Visada leisti „Wi-Fi“ tarptiklinio ryšio nuskaitymą"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Korinio ryšio duomenys visada aktyvūs"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Išjungti didžiausią garsą"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"„Bluetooth“ garso kodekas"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Pasirinkite pageidaujamą „Bluetooth“ A2DP kodeką"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"„Bluetooth“ garso pavyzdžio dažnis"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Pasirinkite pageidaujamą „Bluetooth“ A2DP kodeko pavyzdžio dažnį"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"„Bluetooth“ garso įrašo bitų skaičius pavyzdyje"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Pasirinkite pageidaujamą „Bluetooth“ A2DP kodeko bitų skaičių pavyzdyje"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"„Bluetooth“ garso kanalo režimas"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Pasirinkite pageidaujamą „Bluetooth“ A2DP kodeko kanalo režimą"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"„Bluetooth“ garso LDAC atkūrimo kokybė"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Pasirinkite pageidaujamą „Bluetooth“ A2DP kodeko LDAC atkūrimo kokybę"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Rodyti belaidžio rodymo sertifikavimo parinktis"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Padidinti „Wi‑Fi“ įrašymo į žurnalą lygį, rodyti SSID RSSI „Wi-Fi“ rinkiklyje"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Jei įgalinta ši parinktis, „Wi‑Fi“ agresyviau perduos duomenų ryšį į mobiliojo ryšio tinklą, kai „Wi‑Fi“ signalas bus silpnas"</string>
diff --git a/packages/SettingsLib/res/values-lv/arrays.xml b/packages/SettingsLib/res/values-lv/arrays.xml
index 7edb745..1d8a501 100644
--- a/packages/SettingsLib/res/values-lv/arrays.xml
+++ b/packages/SettingsLib/res/values-lv/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Izmantot HDCP pārbaudi tikai DRM saturam"</item>
<item msgid="45075631231212732">"Vienmēr izmantot HDCP pārbaudi"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Noklusējums"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Noklusējums"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Noklusējums"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Noklusējums"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Noklusējums"</item>
+ <item msgid="5618929009984956469">"16 biti iztvērumā"</item>
+ <item msgid="3412640499234627248">"24 biti iztvērumā"</item>
+ <item msgid="121583001492929387">"32 biti iztvērumā"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Noklusējums"</item>
+ <item msgid="4726688794884191540">"16 biti iztvērumā"</item>
+ <item msgid="305344756485516870">"24 biti iztvērumā"</item>
+ <item msgid="244568657919675099">"32 biti iztvērumā"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Noklusējums"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Noklusējums"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Vēlamā skaņas kvalitāte (990/909 Kb/s)"</item>
+ <item msgid="138837449700903545">"Standarta (660/606 Kb/s)"</item>
+ <item msgid="4777177307869441982">"Vēlamais savienojums (330/303 Kb/s)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Vēlamā skaņas kvalitāte (990/909 Kb/s)"</item>
+ <item msgid="9091111147684472529">"Standarta (660/606 Kb/s)"</item>
+ <item msgid="3367904477834831032">"Vēlamais savienojums (330/303 Kb/s)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Izslēgts"</item>
<item msgid="1593289376502312923">"64 KB"</item>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index 36378f2..dd17509 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Vienmēr atļaut Wi‑Fi meklēšanu"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Vienmēr aktīvs mobilo datu savienojums"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Atspējot absolūto skaļumu"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth audio kodeks"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Atlasīt vēlamo Bluetooth A2DP kodeku"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth audio iztveršanas ātrums"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Atlasīt vēlamo Bluetooth A2DP kodeka iztveršanas ātrumu"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth audio bitu skaits iztvērumā"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Atlasīt vēlamo Bluetooth A2DP kodeka bitu skaitu iztvērumā"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth audio kanāla režīms"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Atlasīt vēlamo Bluetooth A2DP kodeka kanāla režīmu"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth audio LDAC atskaņošanas kvalitāte"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Atlasīt vēlamo Bluetooth A2DP kodeka LDAC atskaņošanas kvalitāti"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Rādīt bezvadu attēlošanas sertifikācijas iespējas"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Palieliniet Wi‑Fi reģistrēšanas līmeni; rādīt katram SSID RSSI Wi‑Fi atlasītājā."</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Ja opcija ir iespējota un Wi‑Fi signāls ir vājš, datu savienojuma pāreja no Wi-Fi uz mobilo tīklu tiks veikta agresīvāk."</string>
diff --git a/packages/SettingsLib/res/values-mk-rMK/arrays.xml b/packages/SettingsLib/res/values-mk/arrays.xml
similarity index 75%
rename from packages/SettingsLib/res/values-mk-rMK/arrays.xml
rename to packages/SettingsLib/res/values-mk/arrays.xml
index 48d4dca..e7a9563 100644
--- a/packages/SettingsLib/res/values-mk-rMK/arrays.xml
+++ b/packages/SettingsLib/res/values-mk/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Користи ХДЦП проверка само за ДРМ содржина"</item>
<item msgid="45075631231212732">"Секогаш користи ХДЦП проверка"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Стандардно"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Стандардно"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Стандардно"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Стандардно"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Стандардно"</item>
+ <item msgid="5618929009984956469">"16 бита/примерок"</item>
+ <item msgid="3412640499234627248">"24 бита/примерок"</item>
+ <item msgid="121583001492929387">"32 бита/примерок"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Стандардно"</item>
+ <item msgid="4726688794884191540">"16 бита/примерок"</item>
+ <item msgid="305344756485516870">"24 бита/примерок"</item>
+ <item msgid="244568657919675099">"32 бита/примерок"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Стандардно"</item>
+ <item msgid="4106832974775067314">"Моно"</item>
+ <item msgid="5571632958424639155">"Стерео"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Стандардно"</item>
+ <item msgid="8900559293912978337">"Моно"</item>
+ <item msgid="8883739882299884241">"Стерео"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Прет. квалитет на звук (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"Стандардно (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"Претпочитана врска (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Прет. квалитет на звук (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"Стандардно (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"Претпочитана врска (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Исклучено"</item>
<item msgid="1593289376502312923">"64.000"</item>
diff --git a/packages/SettingsLib/res/values-mk-rMK/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml
similarity index 95%
rename from packages/SettingsLib/res/values-mk-rMK/strings.xml
rename to packages/SettingsLib/res/values-mk/strings.xml
index ebe8d00..eb0760b 100644
--- a/packages/SettingsLib/res/values-mk-rMK/strings.xml
+++ b/packages/SettingsLib/res/values-mk/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Секогаш дозволувај Wi‑Fi скенирање во роаминг"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Мобилниот интернет е секогаш активен"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Оневозможете апсолутна јачина на звук"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Кодек за аудио преку Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Изберете претпочитан кодек за A2DP преку Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Стапка на примерок аудио преку Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Изберете претпочитана стапка на примерок за кодек за A2DP преку Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Бита по примерок аудио преку Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Изберете претпочитани бита по примерок кодек за A2DP преку Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Режим на канал за аудио преку Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Изберете претпочитан режим на канал за кодек за A2DP преку Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Квалитет на репродукција LDAC на аудио преку Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Изберете претпочитан квалитет на репродукција LDAC на кодек за A2DP преку Bluetooth"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Покажи ги опциите за безжичен приказ на сертификат"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Зголеми Wi‑Fi ниво на пријавување, прикажи по SSID RSSI во Wi‑Fi бирач"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Кога е вклучено, Wi-Fi ќе биде поагресивно при предавање на поврзувањето со податоци на мобилната мрежа при слаб сигнал на Wi-Fi."</string>
diff --git a/packages/SettingsLib/res/values-ml-rIN/arrays.xml b/packages/SettingsLib/res/values-ml/arrays.xml
similarity index 77%
rename from packages/SettingsLib/res/values-ml-rIN/arrays.xml
rename to packages/SettingsLib/res/values-ml/arrays.xml
index f8cc582..57755ed 100644
--- a/packages/SettingsLib/res/values-ml-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-ml/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"DRM ഉള്ളടക്കത്തിനുമാത്രമായി HDCP പരിശോധന ഉപയോഗിക്കുക"</item>
<item msgid="45075631231212732">"എല്ലായ്പ്പോഴും HDCP പരിശോധന ഉപയോഗിക്കുക"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"ഡിഫോൾട്ട്"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"ഡിഫോൾട്ട്"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"ഡിഫോൾട്ട്"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"ഡിഫോൾട്ട്"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"ഡിഫോൾട്ട്"</item>
+ <item msgid="5618929009984956469">"16 ബിറ്റ്/സാമ്പിൾ"</item>
+ <item msgid="3412640499234627248">"24 ബിറ്റ്/സാമ്പിൾ"</item>
+ <item msgid="121583001492929387">"32 ബിറ്റ്/സാമ്പിൾ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"ഡിഫോൾട്ട്"</item>
+ <item msgid="4726688794884191540">"16 ബിറ്റ്/സാമ്പിൾ"</item>
+ <item msgid="305344756485516870">"16 ബിറ്റ്/സാമ്പിൾ"</item>
+ <item msgid="244568657919675099">"32 ബിറ്റ്/സാമ്പിൾ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"ഡിഫോൾട്ട്"</item>
+ <item msgid="4106832974775067314">"മോണോ"</item>
+ <item msgid="5571632958424639155">"സ്റ്റീരിയോ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"ഡിഫോൾട്ട്"</item>
+ <item msgid="8900559293912978337">"മോണോ"</item>
+ <item msgid="8883739882299884241">"സ്റ്റീരിയോ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"നിർദ്ദേശിക്കുന്ന ശബ്ദ നിലവാരം (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"അടിസ്ഥാനം (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"നിർദ്ദേശിക്കുന്ന കണക്ഷൻ (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"നിർദ്ദേശിക്കുന്ന ശബ്ദ നിലവാരം (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"അടിസ്ഥാനം (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"നിർദ്ദേശിക്കുന്ന കണക്ഷൻ (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ഓഫ്"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-ml-rIN/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml
similarity index 96%
rename from packages/SettingsLib/res/values-ml-rIN/strings.xml
rename to packages/SettingsLib/res/values-ml/strings.xml
index 09c07ea..b88298d 100644
--- a/packages/SettingsLib/res/values-ml-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-ml/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"എപ്പോഴും വൈഫൈ റോം സ്കാൻ അനുവദിക്കൂ"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"സെല്ലുലാർ ഡാറ്റ എല്ലായ്പ്പോഴും സജീവം"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"അബ്സൊല്യൂട്ട് വോളിയം പ്രവർത്തനരഹിതമാക്കുക"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth ഓഡിയോ കോഡെക്"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"നിർദ്ദേശിക്കുന്ന Bluetooth A2DP കോഡെക് തിരഞ്ഞെടുക്കുക"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth ഓഡിയോ സാമ്പിൾ നിരക്ക്"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"നിർദ്ദേശിക്കുന്ന Bluetooth A2DP കോഡെക് സാമ്പിൾ നിരക്ക് തിരഞ്ഞെടുക്കുക"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"പ്രതി സാമ്പിളിലെ Bluetooth ഓഡിയോ ബിറ്റ് നി"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"പ്രതി സാമ്പിളിന് നിർദ്ദേശിക്കുന്ന Bluetooth A2DP കോഡെക് ബിറ്റ് നിരക്ക് തിരഞ്ഞെടുക്കുക"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth ഓഡിയോ ചാനൽ മോഡ്"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"നിർദ്ദേശിക്കുന്ന Bluetooth A2DP കോഡെക് ചാനൽ മോഡ് തിരഞ്ഞെടുക്കുക"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth ഓഡിയോ LDAC പ്ലേബാക്ക് നിലവാരം"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"നിർദ്ദേശിക്കുന്ന Bluetooth A2DP കോഡെക് LDAC പ്ലേബാക്ക് നിലവാരം തിരഞ്ഞെടുക്കുക"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"വയർലെസ് ഡിസ്പ്ലേ സർട്ടിഫിക്കേഷനായി ഓപ്ഷനുകൾ ദൃശ്യമാക്കുക"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"വൈഫൈ പിക്കറിൽ ഓരോ SSID RSSI പ്രകാരം കാണിക്കാൻ വൈഫൈ ലോഗിംഗ് നില വർദ്ധിപ്പിക്കുക"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"പ്രവർത്തനക്ഷമമായിരിക്കുമ്പോൾ, വൈഫൈ സിഗ്നൽ കുറവായിരിക്കുന്ന സമയത്ത് സെല്ലുലാറിലേക്ക് ഡാറ്റ കണക്ഷൻ മുഖേന കൈമാറുന്നതിൽ വൈഫൈ കൂടുതൽ പ്രവർത്തനക്ഷമമാകും"</string>
diff --git a/packages/SettingsLib/res/values-mn-rMN/arrays.xml b/packages/SettingsLib/res/values-mn/arrays.xml
similarity index 76%
rename from packages/SettingsLib/res/values-mn-rMN/arrays.xml
rename to packages/SettingsLib/res/values-mn/arrays.xml
index 60fe502..88d6517 100644
--- a/packages/SettingsLib/res/values-mn-rMN/arrays.xml
+++ b/packages/SettingsLib/res/values-mn/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"HDCP шалгахыг зөвхөн DRM контентэд ашиглах"</item>
<item msgid="45075631231212732">"Байнга HDCP шалгахыг ашиглах"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Өгөгдмөл"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Өгөгдмөл"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Өгөгдмөл"</item>
+ <item msgid="8895532488906185219">"44.1 кГц"</item>
+ <item msgid="2909915718994807056">"48.0 кГц"</item>
+ <item msgid="3347287377354164611">"88.2 кГц"</item>
+ <item msgid="1234212100239985373">"96.0 кГц"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Өгөгдмөл"</item>
+ <item msgid="4482862757811638365">"44.1 кГц"</item>
+ <item msgid="354495328188724404">"48.0 кГц"</item>
+ <item msgid="7329816882213695083">"88.2 кГц"</item>
+ <item msgid="6967397666254430476">"96.0 кГц"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Өгөгдмөл"</item>
+ <item msgid="5618929009984956469">"16 бит/жишээ"</item>
+ <item msgid="3412640499234627248">"24 бит/жишээ"</item>
+ <item msgid="121583001492929387">"32 бит/жишээ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Өгөгдмөл"</item>
+ <item msgid="4726688794884191540">"16 бит/жишээ"</item>
+ <item msgid="305344756485516870">"24 бит/жишээ"</item>
+ <item msgid="244568657919675099">"32 бит/жишээ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Өгөгдмөл"</item>
+ <item msgid="4106832974775067314">"Моно"</item>
+ <item msgid="5571632958424639155">"Стерео"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Өгөгдмөл"</item>
+ <item msgid="8900559293912978337">"Моно"</item>
+ <item msgid="8883739882299884241">"Стерео"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Давуу дууны чанар (990кб/с/909кб/с)"</item>
+ <item msgid="138837449700903545">"Стандарт (660кб/с/606кб/с)"</item>
+ <item msgid="4777177307869441982">"Давуу холболт (330кб/с/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Давуу дууны чанар (990кб/с/909кб/с)"</item>
+ <item msgid="9091111147684472529">"Стандарт (660кб/с/606кб/с)"</item>
+ <item msgid="3367904477834831032">"Давуу холболт (330кб/с/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Идэвхгүй"</item>
<item msgid="1593289376502312923">"64000"</item>
diff --git a/packages/SettingsLib/res/values-mn-rMN/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
similarity index 96%
rename from packages/SettingsLib/res/values-mn-rMN/strings.xml
rename to packages/SettingsLib/res/values-mn/strings.xml
index 86a62a2..f412ac4 100644
--- a/packages/SettingsLib/res/values-mn-rMN/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi Роум сканыг байнга зөвшөөрөх"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Үүрэн холбооны датаг үргэлж идэвхтэй байлгана"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Үнэмлэхүй дууны түвшинг идэвхгүй болгох"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth аудио кодлогч"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Давуу Bluetooth A2DP кодлогч сонгох"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth аудио жишээний үнэлгээ"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Давуу Bluetooth A2DP кодлогч жишээний үнэлгээ"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Жишээ тутмын Bluetooth аудионы бит"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Жишээ тутмын давуу Bluetooth A2DP кодлогч битийг сонгох"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth аудио сувгийн горим"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Давуу Bluetooth A2DP кодлогч сувгийн горимыг сонгох"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth аудио LDAC тоглуулагчийн чанар"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Давуу Bluetooth A2DP кодлогч LDAC тоглуулагчийн чанарыг сонгох"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Утасгүй дэлгэцийн сертификатын сонголтыг харуулах"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi лог-н түвшинг нэмэгдүүлэх, Wi‑Fi Сонгогч дээрх SSID-д ногдох RSSI-г харуулах"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Идэвхжүүлсэн үед Wi‑Fi дохио сул бол дата холболтыг Үүрэн рүү шилжүүлэхдээ илүү идэвхтэй байх болно"</string>
diff --git a/packages/SettingsLib/res/values-mr-rIN/arrays.xml b/packages/SettingsLib/res/values-mr/arrays.xml
similarity index 76%
rename from packages/SettingsLib/res/values-mr-rIN/arrays.xml
rename to packages/SettingsLib/res/values-mr/arrays.xml
index f950ba1..9204c458 100644
--- a/packages/SettingsLib/res/values-mr-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-mr/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"केवळ DRM सामग्रीसाठी HDCP तपासणी वापरा"</item>
<item msgid="45075631231212732">"नेहमी HDCP तपासणी वापरा"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"डीफॉल्ट"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"डीफॉल्ट"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"डीफॉल्ट"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"डीफॉल्ट"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"डीफॉल्ट"</item>
+ <item msgid="5618929009984956469">"16 बिट/नमुना"</item>
+ <item msgid="3412640499234627248">"24 बिट/नमुना"</item>
+ <item msgid="121583001492929387">"32 बिट/नमुना"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"डीफॉल्ट"</item>
+ <item msgid="4726688794884191540">"16 बिट/नमुना"</item>
+ <item msgid="305344756485516870">"24 बिट/नमुना"</item>
+ <item msgid="244568657919675099">"32 बिट/नमुना"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"डीफॉल्ट"</item>
+ <item msgid="4106832974775067314">"मोनो"</item>
+ <item msgid="5571632958424639155">"स्टिरिओ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"डीफॉल्ट"</item>
+ <item msgid="8900559293912978337">"मोनो"</item>
+ <item msgid="8883739882299884241">"स्टिरिओ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"प्राधान्य दिलेली ध्वनी गुणवत्ता (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"मानक (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"प्राधान्य दिलेलेे कनेेक्शन (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"प्राधान्य दिलेली ध्वनी गुणवत्ता (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"मानक (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"प्राधान्य दिलेलेे कनेेक्शन (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"बंद"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-mr-rIN/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
similarity index 96%
rename from packages/SettingsLib/res/values-mr-rIN/strings.xml
rename to packages/SettingsLib/res/values-mr/strings.xml
index be1fbc6..8b73d21 100644
--- a/packages/SettingsLib/res/values-mr-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"वाय-फाय रोम स्कॅनला नेहमी अनुमती द्या"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"सेल्युलर डेटा नेहमी सक्रिय"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"संपूर्ण आवाज अक्षम करा"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ब्लूटूथ ऑडिओ कोडेक"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"प्राधान्यीकृत ब्लूटुथ A2DP कोडेक निवडा"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ब्लूटूथ ऑडिओ नमुना दर"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"प्राधान्यीकृत ब्लूटुथ A2DP कोडेक नमुना दर निवडा"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"प्रति नमुना ब्लूटुथ ऑडिओ बिट"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"प्रति नमुना प्राधान्यीकृत ब्लूटुथ A2DP कोडेक बिट निवडा"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ब्लूटूथ ऑडिओ चॅनेल मोड"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"प्राधान्यीकृत ब्लूटुथ A2DP कोडेक चॅनेल मोड निवडा"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"ब्लूटुथ ऑडिओ LDAC प्लेबॅक गुणवत्ता"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"प्राधान्यीकृत ब्लूटुथ A2DP कोडेक LDAC प्लेबॅक गुणवत्ता निवडा"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"वायरलेस प्रदर्शन प्रमाणिकरणासाठी पर्याय दर्शवा"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"वाय-फाय लॉगिंग स्तर वाढवा, वाय-फाय निवडकामध्ये प्रति SSID RSSI दर्शवा"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"सक्षम केल्यास, वाय-फाय सिग्नल निम्न असताना, वाय-फाय डेटा कनेक्शन सेल्युलरवर बळपूर्वक स्विच करेल."</string>
diff --git a/packages/SettingsLib/res/values-ms-rMY/arrays.xml b/packages/SettingsLib/res/values-ms/arrays.xml
similarity index 74%
rename from packages/SettingsLib/res/values-ms-rMY/arrays.xml
rename to packages/SettingsLib/res/values-ms/arrays.xml
index 07f219c..7ec6fab 100644
--- a/packages/SettingsLib/res/values-ms-rMY/arrays.xml
+++ b/packages/SettingsLib/res/values-ms/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Gunakan penyemakan HDCP untuk kandungan DRM sahaja"</item>
<item msgid="45075631231212732">"Sentiasa gunakan penyemakan HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Lalai"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Lalai"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Lalai"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Lalai"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Lalai"</item>
+ <item msgid="5618929009984956469">"16 bit/sampel"</item>
+ <item msgid="3412640499234627248">"24 bit/sampel"</item>
+ <item msgid="121583001492929387">"32 bit/sampel"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Lalai"</item>
+ <item msgid="4726688794884191540">"16 bit/sampel"</item>
+ <item msgid="305344756485516870">"24 bit/sampel"</item>
+ <item msgid="244568657919675099">"32 bit/sampel"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Lalai"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Lalai"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Kualiti bunyi dipilih (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"Standard (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"Sambungan yang dipilih (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Kualiti bunyi dipilih (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"Standard (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"Sambungan yang dipilih (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Mati"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-ms-rMY/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml
similarity index 96%
rename from packages/SettingsLib/res/values-ms-rMY/strings.xml
rename to packages/SettingsLib/res/values-ms/strings.xml
index 8935581..e57219c 100644
--- a/packages/SettingsLib/res/values-ms-rMY/strings.xml
+++ b/packages/SettingsLib/res/values-ms/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Sentiasa benarkan Imbasan Perayauan Wi-Fi"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Data selular sentiasa aktif"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Lumpuhkan kelantangan mutlak"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec Audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Pilih Codec A2DP Bluetooth yang Diingini"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Kadar Sampel Audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Pilih Kadar Sampel Codec A2DP Bluetooth yang Diingini"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bit Per Sampel Audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Pilih Bit Per Sampel Codec A2DP Bluetooth yang Diingini"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Mod Saluran Audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Pilih Mod Saluran Codec A2DP Bluetooth yang Diingini"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Kualiti Main Balik LDAC Audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Pilih Kualiti Main Balik LDAC Codec A2DP Bluetooth yang Diingini"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Tunjukkan pilihan untuk pensijilan paparan wayarles"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Tingkatkan tahap pengelogan Wi-Fi, tunjuk setiap SSID RSSI dalam Pemilih Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Apabila didayakan, Wi-Fi akan menjadi lebih agresif dalam menyerahkan sambungan data ke Selular, apabila isyarat Wi-Fi rendah"</string>
diff --git a/packages/SettingsLib/res/values-my-rMM/arrays.xml b/packages/SettingsLib/res/values-my/arrays.xml
similarity index 78%
rename from packages/SettingsLib/res/values-my-rMM/arrays.xml
rename to packages/SettingsLib/res/values-my/arrays.xml
index 622d0aa..a43eb94 100644
--- a/packages/SettingsLib/res/values-my-rMM/arrays.xml
+++ b/packages/SettingsLib/res/values-my/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"DRMအကြောင်းအရာအတွက် HDCPစစ်ဆေးခြင်းကိုသုံးမည်"</item>
<item msgid="45075631231212732">"HDCP checkingအားအမြဲသုံးပါ"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"မူရင်း"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"မူရင်း"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"မူရင်း"</item>
+ <item msgid="8895532488906185219">"၄၄.၁ kHz"</item>
+ <item msgid="2909915718994807056">"၄၈.၀ kHz"</item>
+ <item msgid="3347287377354164611">"၈၈.၂ kHz"</item>
+ <item msgid="1234212100239985373">"၉၆.၀ kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"မူရင်း"</item>
+ <item msgid="4482862757811638365">"၄၄.၁ kHz"</item>
+ <item msgid="354495328188724404">"၄၈.၀ kHz"</item>
+ <item msgid="7329816882213695083">"၈၈.၂ kHz"</item>
+ <item msgid="6967397666254430476">"၉၆.၀ kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"မူရင်း"</item>
+ <item msgid="5618929009984956469">"၁၆ bits/နမူနာ"</item>
+ <item msgid="3412640499234627248">"၂၄ bits/နမူနာ"</item>
+ <item msgid="121583001492929387">"၃၂ bits/နမူနာ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"မူရင်း"</item>
+ <item msgid="4726688794884191540">"၁၆ bits/နမူနာ"</item>
+ <item msgid="305344756485516870">"၂၄ bits/နမူနာ"</item>
+ <item msgid="244568657919675099">"၃၂ bits/နမူနာ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"မူရင်း"</item>
+ <item msgid="4106832974775067314">"မိုနို"</item>
+ <item msgid="5571632958424639155">"စတီရီယို"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"မူရင်း"</item>
+ <item msgid="8900559293912978337">"မိုနို"</item>
+ <item msgid="8883739882299884241">"စတီရီယို"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"ပိုမိုနှစ်သက်သည့် အသံအရည်အသွေး (၉၉၀kbps/၉၀၉kbps)"</item>
+ <item msgid="138837449700903545">"ပုံမှန် (၆၆၀kbps/၆၀၆kbps)"</item>
+ <item msgid="4777177307869441982">"ပိုမိုနှစ်သက်သည့် မြန်နှုန်း (၃၃၀kbps/၃၀၃kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"ပိုမိုနှစ်သက်သည့် အသံအရည်အသွေး (၉၉၀kbps/၉၀၉kbps)"</item>
+ <item msgid="9091111147684472529">"ပုံမှန် (၆၆၀kbps/၆၀၆kbps)"</item>
+ <item msgid="3367904477834831032">"ပိုမိုနှစ်သက်သည့် ချိတ်ဆက်မှု (၃၃၀kbps/၃၀၃kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ပိတ်ပါ"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-my-rMM/strings.xml b/packages/SettingsLib/res/values-my/strings.xml
similarity index 95%
rename from packages/SettingsLib/res/values-my-rMM/strings.xml
rename to packages/SettingsLib/res/values-my/strings.xml
index 5f4dc50..3b70cc3 100644
--- a/packages/SettingsLib/res/values-my-rMM/strings.xml
+++ b/packages/SettingsLib/res/values-my/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi ရွမ်းရှာဖွေမှုကို အမြဲတမ်း ခွင့်ပြုမည်"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"ဆဲလ်လူလာဒေတာ အမြဲတမ်းဖွင့်ထားသည်"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ပကတိ အသံနှုန်း သတ်မှတ်ချက် ပိတ်ရန်"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ဘလူးတုသ်အသံ ကိုးဒက်ခ်"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"ပိုမိုနှစ်သက်သည့် ဘလူးတုသ် A2DP ကိုးဒက်ခ်ကို ရွေးချယ်ပါ"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ဘလူးတုသ်အသံနမူနာနှုန်း"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"ပိုမိုနှစ်သက်သည့် ဘလူးတုသ် A2DP ကိုးဒက်ခ် အသံနမူနာနှုန်းကို ရွေးချယ်ပါ"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"နမူနာတစ်ခုစီတွင် ပါဝင်သော ဘလူးတုသ်အသံပမာဏ Bits"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"ပိုမိုနှစ်သက်သည့် နမူနာတစ်ခုစီတွင် ပါဝင်သော ဘလူးတုသ် A2DP ကိုးဒက်ခ် Bits ကို ရွေးပါ"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ဘလူးတုသ်အသံချန်နယ်မုဒ်"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"ပိုမိုနှစ်သက်သည့် ဘလူးတုသ် A2DP ကိုးဒက်ခ် ချန်နယ်မုဒ်ကိုရွေးချယ်ပါ"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"ဘလူးတုသ်အသံ LDAC ကြည့်ရန် အရည်အသွေး"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"ပိုမိုနှစ်သက်သည့် ဘလူးတုသ်အသံ LDAC ကြည့်ရန် အရည်အသွေးကို ရွေးချယ်ပါ"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ကြိုးမဲ့ အခင်းအကျင်း အသိအမှတ်ပြုလက်မှတ်အတွက် ရွေးချယ်စရာများပြရန်"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi မှတ်တမ်းတင်ခြင်း နှုန်းအားမြင့်ကာ၊ Wi‑Fi ရွေးရာတွင် SSID RSSI ဖြင့်ပြပါ"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"ဖွင့်ထားလျှင်၊ Wi‑Fi မှ ဆယ်လူလာသို့ အချက်လက် ချိတ်ဆက်မှုအား လွှဲပြောင်းရာ၌ ပိုမိုထိရောက်ပါသည်၊ WIFI အားနည်းနေချိန်တွင်"</string>
diff --git a/packages/SettingsLib/res/values-nb/arrays.xml b/packages/SettingsLib/res/values-nb/arrays.xml
index 917518c..bf0b414 100644
--- a/packages/SettingsLib/res/values-nb/arrays.xml
+++ b/packages/SettingsLib/res/values-nb/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Bruk HDCP-kontroll kun for DRM-innhold"</item>
<item msgid="45075631231212732">"Bruk alltid HDCP-kontroll"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Standard"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Standard"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Standard"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Standard"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Standard"</item>
+ <item msgid="5618929009984956469">"16 bits/sample"</item>
+ <item msgid="3412640499234627248">"24 bits/sample"</item>
+ <item msgid="121583001492929387">"32 bits/sample"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Standard"</item>
+ <item msgid="4726688794884191540">"16 bits/sample"</item>
+ <item msgid="305344756485516870">"24 bits/sample"</item>
+ <item msgid="244568657919675099">"32 bits/sample"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Standard"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Standard"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Prioriter lydkvalitet (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"Standard (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"Prioriter tilkobling (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Prioriter lydkvalitet (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"Standard (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"Prioriter tilkobling (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Av"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index 76ff94f..53e0127 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Tillat alltid skanning for Wi-Fi-roaming"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobildata er alltid aktiv"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Slå av funksjonen for absolutt volum"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Kodek for Bluetooth-lyd"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Velg foretrukket A2DP-kodek for Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Samplefrekvens for Bluetooth-lyd"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Velg foretrukket samplefrekvens fra A2DP-kodek for Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits per sample for Bluetooth-lyd"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Velg foretrukket bits per sample fra A2DP-kodek for Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Kanalmodus for Bluetooth-lyd"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Velg foretrukket kanalmodus fra A2DP-kodek for Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"LDAC-avspillingskvalitet for Bluetooth-lyd"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Velg foretrukket LDAC-avspillingskvalitet fra A2DP-kodek for Bluetooth"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Vis alternativer for sertifisering av trådløs skjerm"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Øk Wi-Fi-loggenivå – vis per SSID RSSI i Wi-Fi-velgeren"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Hvis dette slås på, overfører Wi-Fi-nettverket datatilkoblingen til mobil mer aggressivt når Wi-Fi-signalet er lavt"</string>
diff --git a/packages/SettingsLib/res/values-ne-rNP/arrays.xml b/packages/SettingsLib/res/values-ne/arrays.xml
similarity index 76%
rename from packages/SettingsLib/res/values-ne-rNP/arrays.xml
rename to packages/SettingsLib/res/values-ne/arrays.xml
index 015a034..d9cd5d2 100644
--- a/packages/SettingsLib/res/values-ne-rNP/arrays.xml
+++ b/packages/SettingsLib/res/values-ne/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"DRM सामग्रीको लागि मात्र HDCP जाँचको प्रयोग गर्नुहोस्"</item>
<item msgid="45075631231212732">"सधैँ HDCP जाँच प्रयोग गर्नुहोस्"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"पूर्वनिर्धारित मान"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"पूर्वनिर्धारित मान"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"पूर्वनिर्धारित मान"</item>
+ <item msgid="8895532488906185219">"४४.१ kHz"</item>
+ <item msgid="2909915718994807056">"४८.० kHz"</item>
+ <item msgid="3347287377354164611">"८८.२ kHz"</item>
+ <item msgid="1234212100239985373">"९६.० kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"पूर्वनिर्धारित मान"</item>
+ <item msgid="4482862757811638365">"४४.१ kHz"</item>
+ <item msgid="354495328188724404">"४८.० kHz"</item>
+ <item msgid="7329816882213695083">"८८.२ kHz"</item>
+ <item msgid="6967397666254430476">"९६.० kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"पूर्वनिर्धारित मान"</item>
+ <item msgid="5618929009984956469">"१६ बिट/नमूना"</item>
+ <item msgid="3412640499234627248">"२४ बिट/नमूना"</item>
+ <item msgid="121583001492929387">"३२ बिट/नमूना"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"पूर्वनिर्धारित मान"</item>
+ <item msgid="4726688794884191540">"१६ बिट/नमूना"</item>
+ <item msgid="305344756485516870">"२४ बिट/नमूना"</item>
+ <item msgid="244568657919675099">"३२ बिट/नमूना"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"पूर्वनिर्धारित मान"</item>
+ <item msgid="4106832974775067314">"मोनो"</item>
+ <item msgid="5571632958424639155">"स्टेरियो"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"पूर्वनिर्धारित मान"</item>
+ <item msgid="8900559293912978337">"मोनो"</item>
+ <item msgid="8883739882299884241">"स्टेरियो"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"रुचाइएको आवाजको गुणस्तर (९९०kbps/९०९kbps)"</item>
+ <item msgid="138837449700903545">"मानक (६६०kbps/६०६kbps)"</item>
+ <item msgid="4777177307869441982">"रुचाइएको जडान (३३०kbps/३०३kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"रुचाइएको आवाजको गुणस्तर (९९०kbps/९०९kbps)"</item>
+ <item msgid="9091111147684472529">"मानक (६६०kbps/६०६kbps)"</item>
+ <item msgid="3367904477834831032">"रुचाइएको जडान (३३०kbps/३०३kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"निष्क्रिय गर्नुहोस्"</item>
<item msgid="1593289376502312923">"६४के"</item>
diff --git a/packages/SettingsLib/res/values-ne-rNP/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
similarity index 95%
rename from packages/SettingsLib/res/values-ne-rNP/strings.xml
rename to packages/SettingsLib/res/values-ne/strings.xml
index 8199cde..311af42 100644
--- a/packages/SettingsLib/res/values-ne-rNP/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi-Fi घुम्ने स्क्यान गर्न सधैँ अनुमति दिनुहोस्"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"सेलुलर डेटा सधैं सक्रिय"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"निरपेक्ष आवाज असक्षम गर्नुहोस्"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ब्लुटुथ अडियोको कोडेक"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"रुचाइको ब्लुटुथ A2DP कोडेक चयन गर्नुहोस्"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ब्लुटुथ अडियोको नमूना दर"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"रुचाइको ब्लुटुथ A2DP कोडेक नमूना दर चयन गर्नुहोस्"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"प्रति नमूना ब्लुटुथ अडियोका बिटहरू"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"रुचाइको प्रति नमूना ब्लुटुथ A2DP कोडेकको बिट चयन गर्नुहोस्"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ब्लुटुथ अडियो च्यानलको मोड"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"रुचाइको ब्लुटुथ A2DP कोडेक च्यानलको मोड चयन गर्नुहोस्"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"ब्लुटुथ अडियो LDAC प्लेब्याकको गुणस्तर"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"रुचाइको ब्लुटुथ A2DP कोडेक LDAC प्लेब्याकको गुणस्तर चयन गर्नुहोस्"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ताररहित प्रदर्शन प्रमाणीकरणका लागि विकल्पहरू देखाउनुहोस्"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fi लग स्तर बढाउनुहोस्, Wi-Fi चयनकर्तामा प्रति SSID RSSI देखाइन्छ"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Wi-Fi संकेत कम हुँदा, सक्षम जब गरिन्छ, Wi-Fi सेलुलर लागि डेटा जडान सुम्पनामा बढी आक्रामक हुनेछ"</string>
diff --git a/packages/SettingsLib/res/values-nl/arrays.xml b/packages/SettingsLib/res/values-nl/arrays.xml
index 8f73bf9..6eb2b67 100644
--- a/packages/SettingsLib/res/values-nl/arrays.xml
+++ b/packages/SettingsLib/res/values-nl/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"HDCP-controle alleen voor DRM-content gebruiken"</item>
<item msgid="45075631231212732">"HDCP-controle altijd gebruiken"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Standaard"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Standaard"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Standaard"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Standaard"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Standaard"</item>
+ <item msgid="5618929009984956469">"16 bits per sample"</item>
+ <item msgid="3412640499234627248">"24 bits per sample"</item>
+ <item msgid="121583001492929387">"32 bits per sample"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Standaard"</item>
+ <item msgid="4726688794884191540">"16 bits per sample"</item>
+ <item msgid="305344756485516870">"24 bits per sample"</item>
+ <item msgid="244568657919675099">"32 bits per sample"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Standaard"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Standaard"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Voorkeur geluidskwaliteit (990/909 kbps)"</item>
+ <item msgid="138837449700903545">"Standaard (660/606 kbps)"</item>
+ <item msgid="4777177307869441982">"Voorkeursverbinding (330/303 kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Voorkeur geluidskwaliteit (990/909 kbps)"</item>
+ <item msgid="9091111147684472529">"Standaard (660/606 kbps)"</item>
+ <item msgid="3367904477834831032">"Voorkeursverbinding (330/303 kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Uit"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index 89d7fab..698ff09 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Altijd roamingscans voor wifi toestaan"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobiele data altijd actief"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Absoluut volume uitschakelen"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth-audiocodec"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Voorkeur voor Bluetooth A2DP-codec selecteren"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bemonsteringsfrequentie (sample rate) van Bluetooth-audio"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Voorkeur voor bemonsteringsfrequentie (sample rate) voor Bluetooth A2DP-codec selecteren"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits per sample voor Bluetooth-audio"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Voorkeur voor bits per sample voor Bluetooth A2DP-codec selecteren"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Kanaalmodus voor Bluetooth-audio"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Voorkeur voor kanaalmodus voor Bluetooth A2DP-codec selecteren"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"LDAC-afspeelkwaliteit voor Bluetooth-audio"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Voorkeur voor LDAC-afspeelkwaliteit voor Bluetooth A2DP-codec selecteren"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Opties weergeven voor certificering van draadloze weergave"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Logniveau voor wifi verhogen, weergeven per SSID RSSI in wifi-kiezer"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Indien ingeschakeld, is wifi agressiever bij het overgeven van de gegevensverbinding aan mobiel wanneer het wifi-signaal zwak is"</string>
diff --git a/packages/SettingsLib/res/values-pa-rIN/arrays.xml b/packages/SettingsLib/res/values-pa/arrays.xml
similarity index 75%
rename from packages/SettingsLib/res/values-pa-rIN/arrays.xml
rename to packages/SettingsLib/res/values-pa/arrays.xml
index 54565bc..a53d534 100644
--- a/packages/SettingsLib/res/values-pa-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-pa/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"ਕੇਵਲ DRM ਸਮੱਗਰੀ ਲਈ HDCP ਜਾਂਚ"</item>
<item msgid="45075631231212732">"ਹਮੇਸਾਂ HDCP ਜਾਂਚ ਵਰਤੋ"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</item>
+ <item msgid="5618929009984956469">"16 ਬਿੱਟ/ਨਮੂਨਾ"</item>
+ <item msgid="3412640499234627248">"24 ਬਿੱਟ/ਨਮੂਨਾ"</item>
+ <item msgid="121583001492929387">"32 ਬਿੱਟ/ਨਮੂਨਾ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</item>
+ <item msgid="4726688794884191540">"16 ਬਿੱਟ/ਨਮੂਨਾ"</item>
+ <item msgid="305344756485516870">"24 ਬਿੱਟ/ਨਮੂਨਾ"</item>
+ <item msgid="244568657919675099">"32 ਬਿੱਟ/ਨਮੂਨਾ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</item>
+ <item msgid="4106832974775067314">"ਮੋਨੋ"</item>
+ <item msgid="5571632958424639155">"ਸਟੀਰੀਓ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</item>
+ <item msgid="8900559293912978337">"ਮੋਨੋ"</item>
+ <item msgid="8883739882299884241">"ਸਟੀਰੀਓ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"ਤਰਜੀਹੀ ਧੁਨੀ ਗੁਣਵੱਤਾ (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"ਮਿਆਰੀ ਗੁਣਵੱਤਾ (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"ਤਰਜੀਹੀ ਕਨੈਕਸ਼ਨ (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"ਤਰਜੀਹੀ ਧੁਨੀ ਗੁਣਵੱਤਾ (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"ਮਿਆਰੀ ਗੁਣਵੱਤਾ (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"ਤਰਜੀਹੀ ਕਨੈਕਸ਼ਨ (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ਬੰਦ"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-pa-rIN/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
similarity index 96%
rename from packages/SettingsLib/res/values-pa-rIN/strings.xml
rename to packages/SettingsLib/res/values-pa/strings.xml
index cb46376..f824746 100644
--- a/packages/SettingsLib/res/values-pa-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"ਹਮੇਸ਼ਾਂ Wi‑Fi Roam Scans ਦੀ ਆਗਿਆ ਦਿਓ"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"ਸੈਲਿਊਲਰ ਡੇਟਾ ਹਮੇਸ਼ਾ ਕਿਰਿਆਸ਼ੀਲ"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ਪੂਰਨ ਵੌਲਿਊਮ ਨੂੰ ਅਯੋਗ ਬਣਾਓ"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ਬਲੂਟੁੱਥ ਔਡੀਓ ਕੋਡੇਕ"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"ਤਰਜੀਹੀ ਬਲੂਟੁੱਥ A2DP ਕੋਡੇਕ ਚੁਣੋ"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ਬਲੂਟੁੱਥ ਔਡੀਓ ਨਮੂਨਾ ਦਰ"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"ਤਰਜੀਹੀ ਬਲੂਟੁੱਥ A2DP ਕੋਡੇਕ ਨਮੂਨਾ ਦਰ ਚੁਣੋ"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"ਪ੍ਰਤੀ ਨਮੂਨਾ ਬਲੂਟੁੱਥ ਔਡੀਓ ਬਿੱਟ"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"ਪ੍ਰਤੀ ਨਮੂਨਾ ਤਰਜੀਹੀ ਬਲੂਟੁੱਥ A2DP ਕੋਡੇਕ ਬਿੱਟ ਚੁਣੋ"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ਬਲੂਟੁੱਥ ਔਡੀਓ ਚੈਨਲ ਮੋਡ"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"ਤਰਜੀਹੀ ਬਲੂਟੁੱਥ A2DP ਕੋਡੇਕ ਚੈਨਲ ਮੋਡ ਚੁਣੋ"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"ਬਲੂਟੁੱਥ ਔਡੀਓ LDAC ਪਲੇਬੈਕ ਗੁਣਵੱਤਾ"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"ਤਰਜੀਹੀ ਬਲੂਟੁੱਥ A2DP ਕੋਡੇਕ LDAC ਪਲੇਬੈਕ ਗੁਣਵੱਤਾ ਚੁਣੋ"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ਵਾਇਰਲੈਸ ਡਿਸਪਲੇ ਪ੍ਰਮਾਣੀਕਰਨ ਲਈ ਚੋਣਾਂ ਦਿਖਾਓ"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi ਲੌਗਿੰਗ ਪੱਧਰ ਵਧਾਓ, Wi‑Fi Picker ਵਿੱਚ ਪ੍ਰਤੀ SSID RSSI ਦਿਖਾਓ"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"ਜਦੋਂ ਸਮਰਥਿਤ ਹੋਵੇ, ਤਾਂ Wi‑Fi ਸੈਲਿਊਲਰ ਨੂੰ ਡੈਟਾ ਕਨੈਕਸ਼ਨ ਹੈਂਡ ਓਵਰ ਕਰਨ ਵਿੱਚ ਵੱਧ ਅਗ੍ਰੈਸਿਵ ਹੋ ਜਾਏਗਾ, ਜਦੋਂ Wi‑Fi ਸਿਗਨਲ ਘੱਟ ਹੋਵੇ"</string>
diff --git a/packages/SettingsLib/res/values-pl/arrays.xml b/packages/SettingsLib/res/values-pl/arrays.xml
index eefca13..15a7b51 100644
--- a/packages/SettingsLib/res/values-pl/arrays.xml
+++ b/packages/SettingsLib/res/values-pl/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Użyj sprawdzania HDCP tylko w przypadku treści chronionych DRM"</item>
<item msgid="45075631231212732">"Zawsze używaj sprawdzania HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Wartość domyślna"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Wartość domyślna"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Wartość domyślna"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Wartość domyślna"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Wartość domyślna"</item>
+ <item msgid="5618929009984956469">"16 bitów/próbkę"</item>
+ <item msgid="3412640499234627248">"24 bity/próbkę"</item>
+ <item msgid="121583001492929387">"32 bity/próbkę"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Wartość domyślna"</item>
+ <item msgid="4726688794884191540">"16 bitów/próbkę"</item>
+ <item msgid="305344756485516870">"24 bity/próbkę"</item>
+ <item msgid="244568657919675099">"32 bity/próbkę"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Wartość domyślna"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Wartość domyślna"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Preferowana jakość dźwięku (990 kb/s / 909 kb/s)"</item>
+ <item msgid="138837449700903545">"Standardowa (660 kb/s / 606 kb/s)"</item>
+ <item msgid="4777177307869441982">"Preferowane połączenie (330 kb/s / 303 kb/s)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Preferowana jakość dźwięku (990 kb/s / 909 kb/s)"</item>
+ <item msgid="9091111147684472529">"Standardowa (660 kb/s / 606 kb/s)"</item>
+ <item msgid="3367904477834831032">"Preferowane połączenie (330 kb/s / 303 kb/s)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Wył."</item>
<item msgid="1593289376502312923">"64 KB"</item>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index 738974f..9c841fa 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Zawsze szukaj Wi-Fi w roamingu"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Dane komórkowe zawsze aktywne"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Wyłącz głośność bezwzględną"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Kodek dźwięku Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Wybierz preferowany kodek Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Dźwięk Bluetooth – współczynnik próbkowania"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Wybierz preferowany współczynnik próbkowania w kodeku Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Dźwięk Bluetooth – liczba bitów na próbkę"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Wybierz preferowaną liczbę bitów na próbkę w kodeku Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Dźwięk Bluetooth – tryb kanału"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Wybierz preferowany tryb kanału w kodeku Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Dźwięk Bluetooth – jakość dźwięku LDAC"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Wybierz preferowaną jakość dźwięku LDAC w kodeku Bluetooth A2DP"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Pokaż opcje certyfikacji wyświetlacza bezprzewodowego"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Zwiększ poziom rejestrowania Wi‑Fi, pokazuj według RSSI SSID w selektorze Wi‑Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Po włączeniu połączenie danych będzie bardziej agresywnie przełączać się z Wi-Fi na sieć komórkową przy słabym sygnale Wi-Fi"</string>
diff --git a/packages/SettingsLib/res/values-pt-rBR/arrays.xml b/packages/SettingsLib/res/values-pt-rBR/arrays.xml
index 5e49081b..4d1f3bb 100644
--- a/packages/SettingsLib/res/values-pt-rBR/arrays.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Usar a verificação HDCP somente para conteúdo DRM"</item>
<item msgid="45075631231212732">"Sempre usar a verificação HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Padrão"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Padrão"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Padrão"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Padrão"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Padrão"</item>
+ <item msgid="5618929009984956469">"16 bits/amostra"</item>
+ <item msgid="3412640499234627248">"24 bits/amostra"</item>
+ <item msgid="121583001492929387">"32 bits/amostra"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Padrão"</item>
+ <item msgid="4726688794884191540">"16 bits/amostra"</item>
+ <item msgid="305344756485516870">"24 bits/amostra"</item>
+ <item msgid="244568657919675099">"32 bits/amostra"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Padrão"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Estéreo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Padrão"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Estéreo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Qualidade de som preferencial (990 kbps/909 kbps)"</item>
+ <item msgid="138837449700903545">"Padrão (660 kbps/606 kbps)"</item>
+ <item msgid="4777177307869441982">"Conexão preferencial (330 kbps/303 kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Qualidade de som preferencial (990 kbps/909 kbps)"</item>
+ <item msgid="9091111147684472529">"Padrão (660 kbps/606 kbps)"</item>
+ <item msgid="3367904477834831032">"Conexão preferencial (330 kbps/303 kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Desativado"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index ab866c8..1c34317 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Sempre permitir verif. de roaming de Wi-Fi"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Dados da rede celular sempre ativos"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desativar volume absoluto"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec de áudio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Selecione o codec Bluetooth A2DP preferencial"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Taxa de amostra do áudio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Selecione a taxa de amostra do codec Bluetooth A2DP preferencial"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits por amostra do áudio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Selecione os bits por amostra do codec Bluetooth A2DP preferencial"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modo de canal de áudio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Selecione o modo de canal do codec Bluetooth A2DP preferencial"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Qualidade de reprodução LDAC de áudio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Selecione a qualidade de reprodução LDAC do codec Bluetooth A2DP preferencial"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opções de certificação de Display sem fio"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nível de registro do Wi-Fi; mostrar conforme o RSSI de SSID na Seleção de Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Quando ativada, o Wi-Fi será mais agressivo em transferir a conexão de dados para celular, quando o sinal de Wi-Fi estiver fraco"</string>
diff --git a/packages/SettingsLib/res/values-pt-rPT/arrays.xml b/packages/SettingsLib/res/values-pt-rPT/arrays.xml
index 06d4558..d17701e 100644
--- a/packages/SettingsLib/res/values-pt-rPT/arrays.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Utilizar a verificação HDCP para conteúdo DRM apenas"</item>
<item msgid="45075631231212732">"Utilizar sempre a verificação HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Predefinição"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Predefinição"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Predefinição"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Predefinição"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Predefinição"</item>
+ <item msgid="5618929009984956469">"16 bits/amostra"</item>
+ <item msgid="3412640499234627248">"24 bits/amostra"</item>
+ <item msgid="121583001492929387">"32 bits/amostra"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Predefinição"</item>
+ <item msgid="4726688794884191540">"16 bits/amostra"</item>
+ <item msgid="305344756485516870">"24 bits/amostra"</item>
+ <item msgid="244568657919675099">"32 bits/amostra"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Predefinição"</item>
+ <item msgid="4106832974775067314">"Monocromático"</item>
+ <item msgid="5571632958424639155">"Estéreo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Predefinição"</item>
+ <item msgid="8900559293912978337">"Monocromático"</item>
+ <item msgid="8883739882299884241">"Estéreo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Qual. som preferida (990 kbps/909 kbps)"</item>
+ <item msgid="138837449700903545">"Padrão (660 kbps/606 kbps)"</item>
+ <item msgid="4777177307869441982">"Ligação preferida (330 kbps/303 kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Qual. som preferida (990 kbps/909 kbps)"</item>
+ <item msgid="9091111147684472529">"Padrão (660 kbps/606 kbps)"</item>
+ <item msgid="3367904477834831032">"Ligação preferida (330 kbps/303 kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Desativado"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index 2e4bbdc8..a66ead0 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Permitir sempre a deteção de Wi-Fi em roaming"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Dados móveis sempre ativados"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desativar volume absoluto"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec de áudio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Selecionar Codec A2DP Bluetooth preferido"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Frequência de amostragem de áudio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Selecionar Frequência de amostragem de codec A2DP Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits por amostra de áudio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Selecionar Bits por amostra de codec A2DP Bluetooth preferido"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modo de canal áudio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Selecionar Modo de canal de codec A2DP Bluetooth preferido"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Qualidade de reprodução LDAC de áudio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Selecionar Qualidade de reprodução LDAC de codec A2DP Bluetooth"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opções da certificação de display sem fios"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nível de reg. de Wi-Fi, mostrar por RSSI de SSID no Selec. de Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Se estiver ativado, o Wi-Fi será mais agressivo ao transmitir a lig. de dados p/ a rede móvel quando o sinal Wi-Fi estiver fraco"</string>
diff --git a/packages/SettingsLib/res/values-pt/arrays.xml b/packages/SettingsLib/res/values-pt/arrays.xml
index 5e49081b..4d1f3bb 100644
--- a/packages/SettingsLib/res/values-pt/arrays.xml
+++ b/packages/SettingsLib/res/values-pt/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Usar a verificação HDCP somente para conteúdo DRM"</item>
<item msgid="45075631231212732">"Sempre usar a verificação HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Padrão"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Padrão"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Padrão"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Padrão"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Padrão"</item>
+ <item msgid="5618929009984956469">"16 bits/amostra"</item>
+ <item msgid="3412640499234627248">"24 bits/amostra"</item>
+ <item msgid="121583001492929387">"32 bits/amostra"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Padrão"</item>
+ <item msgid="4726688794884191540">"16 bits/amostra"</item>
+ <item msgid="305344756485516870">"24 bits/amostra"</item>
+ <item msgid="244568657919675099">"32 bits/amostra"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Padrão"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Estéreo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Padrão"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Estéreo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Qualidade de som preferencial (990 kbps/909 kbps)"</item>
+ <item msgid="138837449700903545">"Padrão (660 kbps/606 kbps)"</item>
+ <item msgid="4777177307869441982">"Conexão preferencial (330 kbps/303 kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Qualidade de som preferencial (990 kbps/909 kbps)"</item>
+ <item msgid="9091111147684472529">"Padrão (660 kbps/606 kbps)"</item>
+ <item msgid="3367904477834831032">"Conexão preferencial (330 kbps/303 kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Desativado"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index ab866c8..1c34317 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Sempre permitir verif. de roaming de Wi-Fi"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Dados da rede celular sempre ativos"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desativar volume absoluto"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec de áudio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Selecione o codec Bluetooth A2DP preferencial"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Taxa de amostra do áudio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Selecione a taxa de amostra do codec Bluetooth A2DP preferencial"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits por amostra do áudio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Selecione os bits por amostra do codec Bluetooth A2DP preferencial"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modo de canal de áudio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Selecione o modo de canal do codec Bluetooth A2DP preferencial"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Qualidade de reprodução LDAC de áudio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Selecione a qualidade de reprodução LDAC do codec Bluetooth A2DP preferencial"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opções de certificação de Display sem fio"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nível de registro do Wi-Fi; mostrar conforme o RSSI de SSID na Seleção de Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Quando ativada, o Wi-Fi será mais agressivo em transferir a conexão de dados para celular, quando o sinal de Wi-Fi estiver fraco"</string>
diff --git a/packages/SettingsLib/res/values-ro/arrays.xml b/packages/SettingsLib/res/values-ro/arrays.xml
index 46773e9..a6a0757 100644
--- a/packages/SettingsLib/res/values-ro/arrays.xml
+++ b/packages/SettingsLib/res/values-ro/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Utilizează verificarea HDCP numai pentru conținut DRM"</item>
<item msgid="45075631231212732">"Utilizează întotdeauna verificarea HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Prestabilit"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Prestabilit"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Prestabilit"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Prestabilit"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Prestabilit"</item>
+ <item msgid="5618929009984956469">"16 biți/eșantion"</item>
+ <item msgid="3412640499234627248">"24 biți/eșantion"</item>
+ <item msgid="121583001492929387">"32 biți/eșantion"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Prestabilit"</item>
+ <item msgid="4726688794884191540">"16 biți/eșantion"</item>
+ <item msgid="305344756485516870">"24 biți/eșantion"</item>
+ <item msgid="244568657919675099">"32 biți/eșantion"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Prestabilit"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Prestabilit"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Cal. pref. sunet (990 kbps/909 kbps)"</item>
+ <item msgid="138837449700903545">"Standard (660 kbps/606 kbps)"</item>
+ <item msgid="4777177307869441982">"Conexiune preferată (330 kbps/303 kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Cal. pref. sunet (990 kbps/909 kbps)"</item>
+ <item msgid="9091111147684472529">"Standard (660 kbps/606 kbps)"</item>
+ <item msgid="3367904477834831032">"Conexiune preferată (330 kbps/303 kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Dezactivată"</item>
<item msgid="1593289376502312923">"64 KB"</item>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index da2f76f..512ba3a 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Se permite întotdeauna scanarea traficului Wi-Fi"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Conexiunea de date mobile este întotdeauna activată"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Dezactivați volumul absolut"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Selectați codecul Bluetooth A2DP preferat"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Rată de eșantionare audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Selectați rata de eșantionare codec Bluetooth A2DP preferată"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Biți audio Bluetooth per eșantion"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Selectați biții codecului Bluetooth A2DP preferați per eșantion"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modul canal audio Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Selectați modul canal codec pentru Bluetooth A2DP preferat"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Calitatea redării Bluetooth audio LDAC"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Selectați calitatea redării LDAC a codecului pentru Bluetooth A2DP preferată"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Afișați opțiunile pentru certificarea Ecran wireless"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Măriți niv. de înr. prin Wi‑Fi, afișați în fcț. de SSID RSSI în Selectorul Wi‑Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Când este activată, funcția Wi-Fi va fi mai agresivă la predarea conexiunii de date către mobil când semnalul Wi-Fi este slab"</string>
diff --git a/packages/SettingsLib/res/values-ru/arrays.xml b/packages/SettingsLib/res/values-ru/arrays.xml
index 0e4816c..1080b01 100644
--- a/packages/SettingsLib/res/values-ru/arrays.xml
+++ b/packages/SettingsLib/res/values-ru/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Использовать проверку HDCP только для DRM-контента"</item>
<item msgid="45075631231212732">"Всегда использовать проверку HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"По умолчанию"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"По умолчанию"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"По умолчанию"</item>
+ <item msgid="8895532488906185219">"44,1 кГц"</item>
+ <item msgid="2909915718994807056">"48 кГц"</item>
+ <item msgid="3347287377354164611">"88,2 кГц"</item>
+ <item msgid="1234212100239985373">"96 кГц"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"По умолчанию"</item>
+ <item msgid="4482862757811638365">"44,1 кГц"</item>
+ <item msgid="354495328188724404">"48 кГц"</item>
+ <item msgid="7329816882213695083">"88,2 кГц"</item>
+ <item msgid="6967397666254430476">"96 кГц"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"По умолчанию"</item>
+ <item msgid="5618929009984956469">"16 бит/отсчет"</item>
+ <item msgid="3412640499234627248">"24 бит/отсчет"</item>
+ <item msgid="121583001492929387">"32 бит/отсчет"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"По умолчанию"</item>
+ <item msgid="4726688794884191540">"16 бит/отсчет"</item>
+ <item msgid="305344756485516870">"24 бит/отсчет"</item>
+ <item msgid="244568657919675099">"32 бит/отсчет"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"По умолчанию"</item>
+ <item msgid="4106832974775067314">"Моно"</item>
+ <item msgid="5571632958424639155">"Стерео"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"По умолчанию"</item>
+ <item msgid="8900559293912978337">"Моно"</item>
+ <item msgid="8883739882299884241">"Стерео"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Предпочтит. качество звука (990 кбит/с/909 кбит/с)"</item>
+ <item msgid="138837449700903545">"Стандартное (660 кбит/с/606 кбит/с)"</item>
+ <item msgid="4777177307869441982">"Предпочтит. соединение (330 кбит/с/303 кбит/с)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Предпочтит. качество звука (990 кбит/с/909 кбит/с)"</item>
+ <item msgid="9091111147684472529">"Стандартное (660 кбит/с/606 кбит/с)"</item>
+ <item msgid="3367904477834831032">"Предпочтит. соединение (330 кбит/с/303 кбит/с)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Выкл."</item>
<item msgid="1593289376502312923">"64 КБ"</item>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index 9600027..bad2158 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Всегда включать поиск сетей Wi-Fi"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Не отключать передачу данных"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Отключить абсолютный уровень громкости"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Аудиокодек для передачи через Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Выберите кодек A2DP для передачи через Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Частота дискретизации при передаче через Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Выберите частоту дискретизации для кодека A2DP (через Bluetooth)"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Глубина кодирования звука при передаче через Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Выберите глубину кодирования звука для кодека A2DP (через Bluetooth)"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Режим аудиоканала Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Выберите режим аудиоканала для кодека A2DP (через Bluetooth)"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Качество воспроизведения с кодеком A2DP (через Bluetooth)"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Выберите качество воспроизведения с кодеком A2DP (через Bluetooth)"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Показывать параметры сертификации беспроводных мониторов"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"При выборе Wi‑Fi указывать в журнале RSSI для каждого SSID"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Принудительно переключаться на мобильную сеть, если сигнал Wi-Fi слабый"</string>
diff --git a/packages/SettingsLib/res/values-si-rLK/arrays.xml b/packages/SettingsLib/res/values-si/arrays.xml
similarity index 77%
rename from packages/SettingsLib/res/values-si-rLK/arrays.xml
rename to packages/SettingsLib/res/values-si/arrays.xml
index ac1a6fe..afc125f 100644
--- a/packages/SettingsLib/res/values-si-rLK/arrays.xml
+++ b/packages/SettingsLib/res/values-si/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"DRM අන්තර්ගත සඳහා පමණක් HDCP පරික්ෂාව භාවිතා කරන්න"</item>
<item msgid="45075631231212732">"සැමවිටම HDCP පිරික්සුම භාවිතා කරන්න"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"පෙරනිමි"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"පෙරනිමි"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"පෙරනිමි"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"පෙරනිමි"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"පෙරනිමි"</item>
+ <item msgid="5618929009984956469">"බිටු 16/නියැදිය"</item>
+ <item msgid="3412640499234627248">"බිටු 24/නියැදිය"</item>
+ <item msgid="121583001492929387">"බිටු 32/නියැදිය"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"පෙරනිමි"</item>
+ <item msgid="4726688794884191540">"බිටු 16/නියැදිය"</item>
+ <item msgid="305344756485516870">"බිටු 24/නියැදිය"</item>
+ <item msgid="244568657919675099">"බිටු 32/නියැදිය"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"පෙරනිමි"</item>
+ <item msgid="4106832974775067314">"ඒකල"</item>
+ <item msgid="5571632958424639155">"ස්ටීරියෝ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"පෙරනිමි"</item>
+ <item msgid="8900559293912978337">"ඒකල"</item>
+ <item msgid="8883739882299884241">"ස්ටීරියෝ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"වඩා කැමති හඬ ගුණත්වය (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"සම්මත (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"වඩා කැමති සබැඳුම (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"වඩා කැමති හඬ ගුණත්වය (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"සම්මත (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"වඩා කැමති සබැඳුම (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ක්රියාවිරහිතය"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-si-rLK/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
similarity index 95%
rename from packages/SettingsLib/res/values-si-rLK/strings.xml
rename to packages/SettingsLib/res/values-si/strings.xml
index b775db6..fb6545b 100644
--- a/packages/SettingsLib/res/values-si-rLK/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi රෝම් පරිලෝකන වෙතට සැමවිට අවසර දෙන්න"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"සෙලියුලර් දත්ත සැමවිට ක්රියාකාරීය"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"නිරපේක්ෂ හඩ පරිමාව අබල කරන්න"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"බ්ලූටූත් ශ්රව්ය Codec"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"වඩා කැමති බ්ලූටූත් A2DP Codec තෝරන්න"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"බ්ලූටූත් ශ්රව්ය නියැදි අනුපාතය"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"වඩා කැමති බ්ලූටූත් A2DP Codec නියැදි අනුපාතය තෝරන්න"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"නියැදියකට බ්ලූටූත් ශ්රව්ය බිටු"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"නියැදියකට වඩා කැමති බ්ලූටූත් A2DP Codec බිටු තෝරන්න"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"බ්ලූටූත් ශ්රව්ය නාලිකා ප්රකාරය"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"වඩා කැමති බ්ලූටූත් A2DP Codec නාලිකා ප්රකාරය තෝරන්න"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"බ්ලූටූත් ශ්රව්ය LDAC පසුධාවන ගුණත්වය"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"වඩා කැමති බ්ලූටූත් A2DP Codec පසුධාවන ගුණත්වය තෝරන්න"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"නොරැහැන් සංදර්ශක සහතිකය සඳහා විකල්ප පෙන්වන්න"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi ලොග් මට්ටම වැඩි කරන්න, Wi‑Fi තෝරනයෙහි SSID RSSI අනුව පෙන්වන්න"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"සබල විට Wi‑Fi සිග්නලය අඩු විට Wi‑Fi දත්ත සම්බන්ධතාවය සෙලියුලර් වෙත භාර දීමට වඩා ආක්රමණික වේ"</string>
diff --git a/packages/SettingsLib/res/values-sk/arrays.xml b/packages/SettingsLib/res/values-sk/arrays.xml
index 77fa6fd..66fabb2 100644
--- a/packages/SettingsLib/res/values-sk/arrays.xml
+++ b/packages/SettingsLib/res/values-sk/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Použiť kontrolu HDCP len pre obsah DRM"</item>
<item msgid="45075631231212732">"Vždy používať kontrolu HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Predvolené"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Predvolené"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Predvolené"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Predvolené"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Predvolené"</item>
+ <item msgid="5618929009984956469">"16 bitov na vzorku"</item>
+ <item msgid="3412640499234627248">"24 bitov na vzorku"</item>
+ <item msgid="121583001492929387">"32 bitov na vzorku"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Predvolené"</item>
+ <item msgid="4726688794884191540">"16 bitov na vzorku"</item>
+ <item msgid="305344756485516870">"24 bitov na vzorku"</item>
+ <item msgid="244568657919675099">"32 bitov na vzorku"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Predvolené"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Predvolené"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Preferovanie kvality zvuku (990/909 kb/s)"</item>
+ <item msgid="138837449700903545">"Štandardné (660/606 kb/s)"</item>
+ <item msgid="4777177307869441982">"Preferovanie pripojenia (330/303 kb/s)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Preferovanie kvality zvuku (990/909 kb/s)"</item>
+ <item msgid="9091111147684472529">"Štandardné (660/606 kb/s)"</item>
+ <item msgid="3367904477834831032">"Preferovanie pripojenia (330/303 kb/s)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Vypnuté"</item>
<item msgid="1593289376502312923">"64 kB"</item>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index 8130866..65de397 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Vždy povoliť funkciu Wi-Fi Roam Scans"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobilné dáta vždy aktívne"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Zakázať absolútnu hlasitosť"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio – kodek"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Vyberte preferovaný kodek Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Audio – vzorkovacia frekvencia"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Zvoľte preferovanú vzorkovaciu frekvenciu kodeku Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth Audio – počet bitov na vzorku"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Zvoľte preferovaný počet bitov na vzorky kodeku Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio – režim kanála"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Zvoľte preferovaný režim kanála kodeku Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Kvalita prehrávania LDAC Bluetooth Audio"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Zvoľte preferovanú kvalitu prehrávania LDAC kodeku Bluetooth A2DP"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Zobraziť možnosti certifikácie bezdrôtového zobrazenia"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Zvýšiť úroveň denníkov Wi-Fi, zobrazovať podľa SSID RSSI pri výbere siete Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Keď túto možnosť zapnete, Wi-Fi bude agresívnejšie odovzdávať dát. pripoj. na mob. sieť vtedy, keď bude slabý signál Wi-Fi"</string>
diff --git a/packages/SettingsLib/res/values-sl/arrays.xml b/packages/SettingsLib/res/values-sl/arrays.xml
index 54cdd0e..6b6e0c8 100644
--- a/packages/SettingsLib/res/values-sl/arrays.xml
+++ b/packages/SettingsLib/res/values-sl/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Preverjanje HDCP uporabi samo za vsebino DRM"</item>
<item msgid="45075631231212732">"Vedno uporabi preverjanje HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Privzeto"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Privzeto"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Privzeto"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Privzeto"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Privzeto"</item>
+ <item msgid="5618929009984956469">"16 bitov/vzorec"</item>
+ <item msgid="3412640499234627248">"24 bitov/vzorec"</item>
+ <item msgid="121583001492929387">"32 bitov/vzorec"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Privzeto"</item>
+ <item msgid="4726688794884191540">"16 bitov/vzorec"</item>
+ <item msgid="305344756485516870">"24 bitov/vzorec"</item>
+ <item msgid="244568657919675099">"32 bitov/vzorec"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Privzeto"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Privzeto"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Prednostna kakovost zvoka (990/909 kb/s)"</item>
+ <item msgid="138837449700903545">"Standardno (660/606 kb/s)"</item>
+ <item msgid="4777177307869441982">"Prednostna povezava (330/303 kb/s)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Prednostna kakovost zvoka (990/909 kb/s)"</item>
+ <item msgid="9091111147684472529">"Standardno (660/606 kb/s)"</item>
+ <item msgid="3367904477834831032">"Prednostna povezava (330/303 kb/s)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Izklopljeno"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index a3b666ca..ef21240 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Vedno omogoči iskanje omrežij Wi-Fi za gostovanje"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Prenos podatkov v mobilnih omrežjih je vedno aktiven"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Onemogočanje absolutnega praga glasnosti"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Zvočni kodek za Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Izberite prednostni kodek A2DP za Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Hitrost vzorčenja zvoka prek Bluetootha"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Izberite prednostno hitrost vzorčenja za kodek A2DP za Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Število bitov na vzorec za zvok prek Bluetootha"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Izberite prednostno število bitov na vzorec za kodek A2DP za Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Način zvočnega kanala prek Bluetootha"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Izberite prednostni način kanala za kodek A2DP za Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Kakovost predvajanja LDAC za zvok prek Bluetootha"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Izberite prednostno kakovost predvajanja LDAC za kodek A2DP za Bluetooth"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Pokaži možnosti za potrdilo brezžičnega zaslona"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povečaj raven zapis. dnev. za Wi-Fi; v izbir. Wi‑Fi-ja pokaži glede na SSID RSSI"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Če je ta možnost omogočena, Wi-Fi odločneje preda podatkovno povezavo mobilnemu omrežju, ko je signal Wi-Fi šibek"</string>
diff --git a/packages/SettingsLib/res/values-sq-rAL/arrays.xml b/packages/SettingsLib/res/values-sq/arrays.xml
similarity index 75%
rename from packages/SettingsLib/res/values-sq-rAL/arrays.xml
rename to packages/SettingsLib/res/values-sq/arrays.xml
index 8fab1dc..e52b9fa 100644
--- a/packages/SettingsLib/res/values-sq-rAL/arrays.xml
+++ b/packages/SettingsLib/res/values-sq/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Përdor kontrollin e HDCP-së vetëm për përmbajtjet DRM"</item>
<item msgid="45075631231212732">"Përdor gjithmonë kontrollin e HDCP-së"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"I parazgjedhur"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"I parazgjedhur"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"I parazgjedhur"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"I parazgjedhur"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"I parazgjedhur"</item>
+ <item msgid="5618929009984956469">"16 bite/shembull"</item>
+ <item msgid="3412640499234627248">"24 bite/shembull"</item>
+ <item msgid="121583001492929387">"32 bite/shembull"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"I parazgjedhur"</item>
+ <item msgid="4726688794884191540">"16 bite/shembull"</item>
+ <item msgid="305344756485516870">"24 bite/shembull"</item>
+ <item msgid="244568657919675099">"32 bite/shembull"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"I parazgjedhur"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"I parazgjedhur"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Cilësia e preferuar e zërit (990 kbps/909 kbps)"</item>
+ <item msgid="138837449700903545">"Standarde (660 kbps/606 kbps)"</item>
+ <item msgid="4777177307869441982">"Lidhja e preferuar (330 kbps/303 kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Cilësia e preferuar e zërit (990 kbps/909 kbps)"</item>
+ <item msgid="9091111147684472529">"Standarde (660 kbps/606 kbps)"</item>
+ <item msgid="3367904477834831032">"Lidhja e preferuar (330 kbps/303 kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Joaktiv"</item>
<item msgid="1593289376502312923">"64 mijë"</item>
diff --git a/packages/SettingsLib/res/values-sq-rAL/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml
similarity index 96%
rename from packages/SettingsLib/res/values-sq-rAL/strings.xml
rename to packages/SettingsLib/res/values-sq/strings.xml
index 232ca0a..56c36c0 100644
--- a/packages/SettingsLib/res/values-sq-rAL/strings.xml
+++ b/packages/SettingsLib/res/values-sq/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Lejo gjithmonë skanimet për Wi-Fi edhe kur je në lëvizje"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Të dhënat celulare gjithmonë aktive"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Çaktivizo volumin absolut"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Kodeku Bluetooth Audio"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Zgjidh kodekun e preferuar Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Shpejtësia e shembullit të Bluetooth Audio"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Zgjidh shpejtësinë e preferuar të shembullit të kodekut Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bite për shembull Bluetooth Audio"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Zgjidh bite për shembull të preferuar të kodekut Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Regjimi i kanalit Bluetooth Audio"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Zgjidh regjimi e preferuar të kanalit të kodekut Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Cilësia e luajtjes së Bluetooth Audio LDAC"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Zgjidh cilësinë e preferuar të luajtjes të kodekut Bluetooth A2DP"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Shfaq opsionet për certifikimin e ekranit valor"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Rrit nivelin regjistrues të Wi‑Fi duke shfaqur SSID RSSI-në te Zgjedhësi i Wi‑Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Kur ky funksion aktivizohet, Wi‑Fi bëhet më agresiv në kalimin e lidhjes së të dhënave te rrjeti celular, në rastet kur sinjali Wi‑Fi është i dobët"</string>
diff --git a/packages/SettingsLib/res/values-sr/arrays.xml b/packages/SettingsLib/res/values-sr/arrays.xml
index 97a01db..8448c10 100644
--- a/packages/SettingsLib/res/values-sr/arrays.xml
+++ b/packages/SettingsLib/res/values-sr/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Користи HDCP проверу само за DRM садржај"</item>
<item msgid="45075631231212732">"Увек користи HDCP проверу"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Подразумевано"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Подразумевано"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Подразумевано"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Подразумевано"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Подразумевано"</item>
+ <item msgid="5618929009984956469">"16 битова по узорку"</item>
+ <item msgid="3412640499234627248">"24 бита по узорку"</item>
+ <item msgid="121583001492929387">"32 бита по узорку"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Подразумевано"</item>
+ <item msgid="4726688794884191540">"16 битова по узорку"</item>
+ <item msgid="305344756485516870">"24 бита по узорку"</item>
+ <item msgid="244568657919675099">"32 бита по узорку"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Подразумевано"</item>
+ <item msgid="4106832974775067314">"Моно"</item>
+ <item msgid="5571632958424639155">"Стерео"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Подразумевано"</item>
+ <item msgid="8900559293912978337">"Моно"</item>
+ <item msgid="8883739882299884241">"Стерео"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Жељени квалитет звука (990 kb/s/909 kb/s)"</item>
+ <item msgid="138837449700903545">"Стандардно (660 kb/s/606 kb/s)"</item>
+ <item msgid="4777177307869441982">"Жељена веза (330 kb/s/303 kb/s)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Жељени квалитет звука (990 kb/s/909 kb/s)"</item>
+ <item msgid="9091111147684472529">"Стандардно (660 kb/s/606 kb/s)"</item>
+ <item msgid="3367904477834831032">"Жељена веза (330 kb/s/303 kb/s)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Искључено"</item>
<item msgid="1593289376502312923">"64 kB"</item>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index 5fd58a5..fd33eab 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Увек дозволи скенирање Wi‑Fi-ја у ромингу"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Подаци за мобилне уређаје су увек активни"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Онемогући главно подешавање јачине звука"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth аудио кодек"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Изаберите жељени Bluetooth A2DP кодек"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Брзина узорковања за Bluetooth аудио"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Изаберите жељену брзину узорковања за Bluetooth A2DP кодек"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Битова по узорку за Bluetooth аудио"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Изаберите жељени број битова по узорку за Bluetooth A2DP кодек"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Режим канала за Bluetooth аудио"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Изаберите жељени режим канала за Bluetooth A2DP кодек"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Квалитет LDAC снимка за Bluetooth аудио"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Изаберите жељени квалитет LDAC снимка за Bluetooth A2DP кодек"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Приказ опција за сертификацију бежичног екрана"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Повећава ниво евидентирања за Wi‑Fi. Приказ по SSID RSSI-у у бирачу Wi‑Fi мреже"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Када се омогући, Wi‑Fi ће бити агресивнији при пребацивању мреже за пренос података на Мобилну, када је Wi‑Fi сигнал слаб"</string>
diff --git a/packages/SettingsLib/res/values-sv/arrays.xml b/packages/SettingsLib/res/values-sv/arrays.xml
index 746bc15..e3e0103 100644
--- a/packages/SettingsLib/res/values-sv/arrays.xml
+++ b/packages/SettingsLib/res/values-sv/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Använd bara HDCP-kontroll för DRM-innehåll"</item>
<item msgid="45075631231212732">"Använd alltid HDCP-kontroll"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Standard"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Standard"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Standard"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Standard"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Standard"</item>
+ <item msgid="5618929009984956469">"16 bitar/sampling"</item>
+ <item msgid="3412640499234627248">"24 bitar/sampling"</item>
+ <item msgid="121583001492929387">"32 bitar/sampling"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Standard"</item>
+ <item msgid="4726688794884191540">"16 bitar/sampling"</item>
+ <item msgid="305344756485516870">"24 bitar/sampling"</item>
+ <item msgid="244568657919675099">"32 bitar/sampling"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Standard"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Standard"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Föredragen ljudkvalitet (990 kbit/s eller 909 kbit/s)"</item>
+ <item msgid="138837449700903545">"Standard (660 kbit/s eller 606 kbit/s)"</item>
+ <item msgid="4777177307869441982">"Föredragen anslutning (330 kbit/s eller 303 kbit/s)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Föredragen ljudkvalitet (990 kbit/s eller 909 kbit/s)"</item>
+ <item msgid="9091111147684472529">"Standard (660 kbit/s eller 606 kbit/s)"</item>
+ <item msgid="3367904477834831032">"Föredragen anslutning (330 kbit/s eller 303 kbit/s)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Av"</item>
<item msgid="1593289376502312923">"64 kB"</item>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index ee93622..3b45fde 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Tillåt alltid sökning efter Wi-Fi-roaming"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobildata alltid aktiverad"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Inaktivera Absolute volume"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Ljudkodek för Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Välj föredragen A2DP-kodek för Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Samplingsfrekvens för Bluetooth-ljud"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Välj föredragen samplingsfrekvens för A2DP-kodek för Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Antar bitar per sampling för Bluetooth-ljud"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Välj föredraget antal bitar per sampling för A2DP-kodek för Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Kanalläge för Bluetooth-ljud"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Välj föredraget kanalläge för A2DP-kodek för Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Uppspelningskvalitet för Bluetooth-ljud via LDAC"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Välj föredragen uppspelningskvalitet för A2DP-kodek för Bluetooth via LDAC"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Visa certifieringsalternativ för Wi-Fi-skärmdelning"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Öka loggningsnivån för Wi-Fi, visa per SSID RSSI i Wi‑Fi Picker"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"När funktionen har aktiverats kommer dataanslutningen lämnas över från Wi-Fi till mobilen på ett aggressivare sätt när Wi-Fi-signalen är svag"</string>
diff --git a/packages/SettingsLib/res/values-sw/arrays.xml b/packages/SettingsLib/res/values-sw/arrays.xml
index f56961b..b4aeb1f 100644
--- a/packages/SettingsLib/res/values-sw/arrays.xml
+++ b/packages/SettingsLib/res/values-sw/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Tumia ukaguaji wa HDCP kwa maudhui ya DRM pekee"</item>
<item msgid="45075631231212732">"Kila wakati tumia ukakuaji wa HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Chaguo-msingi"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Chaguo-msingi"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Chaguo-msingi"</item>
+ <item msgid="8895532488906185219">"kHz 44.1"</item>
+ <item msgid="2909915718994807056">"kHz 48.0"</item>
+ <item msgid="3347287377354164611">"kHz 88.2"</item>
+ <item msgid="1234212100239985373">"kHz 96.0"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Chaguo-msingi"</item>
+ <item msgid="4482862757811638365">"kHz 44.1"</item>
+ <item msgid="354495328188724404">"kHz 48.0"</item>
+ <item msgid="7329816882213695083">"kHz 88.2"</item>
+ <item msgid="6967397666254430476">"kHz 96.0"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Chaguo-msingi"</item>
+ <item msgid="5618929009984956469">"Biti 16 kwa kila sampuli"</item>
+ <item msgid="3412640499234627248">"Biti 24 kwa kila sampuli"</item>
+ <item msgid="121583001492929387">"Biti 32 kwa kila sampuli"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Chaguo-msingi"</item>
+ <item msgid="4726688794884191540">"Biti 16 kwa kila sampuli"</item>
+ <item msgid="305344756485516870">"Biti 24 kwa kila sampuli"</item>
+ <item msgid="244568657919675099">"Biti 32 kwa kila sampuli"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Chaguo-msingi"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Chaguo-msingi"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Ubora wa sauti unaopendelewa (kbps990/kbps909)"</item>
+ <item msgid="138837449700903545">"Ubora wa sauti wa kawaida (kbps660/kbps606)"</item>
+ <item msgid="4777177307869441982">"Muunganisho unaopendelewa (kbps330/kbps303)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Ubora wa sauti unaopendelewa (kbps990/kbps909)"</item>
+ <item msgid="9091111147684472529">"Ubora wa sauti wa kawaida (kbps660/kbps606)"</item>
+ <item msgid="3367904477834831032">"Muunganisho unaopendelewa (kbps330/kbps303)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Imezimwa"</item>
<item msgid="1593289376502312923">"K64"</item>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index 3c06d72..563283b 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Ruhusu Uchanganuzi wa Matumizi ya Mitandao mingine"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Data ya kifaa cha mkononi inatumika kila wakati"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Zima sauti kamili"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Kodeki ya Sauti ya Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Chagua Kodeki Unayopendelea ya A2DP ya Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Kiwango cha Sampuli ya Sauti ya Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Chagua Kiwango Unachopendelea cha Sampuli ya Kodeki ya A2DP ya Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Biti za Sauti ya Bluetooth kwa Kila Sampuli"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Chagua Biti za Kodeki ya A2DP ya Bluetooth Unazopendelea kwa Kila Sampuli"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Hali ya Kituo cha Sauti ya Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Chagua Hali ya Kituo cha Kodeki ya A2DP ya Bluetooth Unayopendelea"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Ubora wa Kucheza LDAC ya Sauti ya Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Chagua Ubora Unaopendelea wa Kucheza LDAC ya Kodeki ya A2DP ya Bluetooth"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Onyesha chaguo za cheti cha kuonyesha pasiwaya"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Ongeza hatua ya uwekaji kumbukumbu ya Wi-Fi, onyesha kwa kila SSID RSSI kwenye Kichukuzi cha Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Ikiwashwa, Wifi itakabidhi kwa hima muunganisho wa data kwa mtandao wa Simu za Mkononi, mawimbi ya Wifi yanapokuwa hafifu"</string>
diff --git a/packages/SettingsLib/res/values-ta-rIN/arrays.xml b/packages/SettingsLib/res/values-ta/arrays.xml
similarity index 77%
rename from packages/SettingsLib/res/values-ta-rIN/arrays.xml
rename to packages/SettingsLib/res/values-ta/arrays.xml
index e21e1c4..9b3b1d4 100644
--- a/packages/SettingsLib/res/values-ta-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-ta/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"DRM உள்ளடக்கத்திற்கு மட்டும் HDCP சோதனையைப் பயன்படுத்து"</item>
<item msgid="45075631231212732">"HDCP சரிபார்ப்பை எப்போதும் பயன்படுத்து"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"இயல்பு"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"இயல்பு"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"இயல்பு"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"இயல்பு"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"இயல்பு"</item>
+ <item msgid="5618929009984956469">"16 பிட்கள்/சாம்பிள்"</item>
+ <item msgid="3412640499234627248">"24 பிட்கள்/சாம்பிள்"</item>
+ <item msgid="121583001492929387">"32 பிட்கள்/சாம்பிள்"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"இயல்பு"</item>
+ <item msgid="4726688794884191540">"16 பிட்கள்/சாம்பிள்"</item>
+ <item msgid="305344756485516870">"24 பிட்கள்/சாம்பிள்"</item>
+ <item msgid="244568657919675099">"32 பிட்கள்/சாம்பிள்"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"இயல்பு"</item>
+ <item msgid="4106832974775067314">"மோனோ"</item>
+ <item msgid="5571632958424639155">"ஸ்டீரியோ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"இயல்பு"</item>
+ <item msgid="8900559293912978337">"மோனோ"</item>
+ <item msgid="8883739882299884241">"ஸ்டீரியோ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"ஒலித் தரம் (பரிந்துரை) (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"நிலையானது (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"இணைப்பு (பரிந்துரை) (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"ஒலித் தரம் (பரிந்துரை) (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"நிலையானது (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"இணைப்பு (பரிந்துரை) (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"முடக்கு"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-ta-rIN/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
similarity index 95%
rename from packages/SettingsLib/res/values-ta-rIN/strings.xml
rename to packages/SettingsLib/res/values-ta/strings.xml
index daf3ff2..c628d5e 100644
--- a/packages/SettingsLib/res/values-ta-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"எப்போதும் வைஃபை ரோமிங் ஸ்கேன்களை அனுமதி"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"செல்லுலார் தரவு எப்போதும் இயக்கத்தில்"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"அப்சல்யூட் ஒலியளவு அம்சத்தை முடக்கு"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"புளூடூத் ஆடியோ கோடெக்"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"பரிந்துரைக்கப்படும் புளூடூத் A2DP கோடெக்கைத் தேர்ந்தெடுக்கவும்"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"புளூடூத் ஆடியோ சாம்பிள் ரேட்"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"பரிந்துரைக்கப்படும் புளூடூத் A2DP கோடெக் சாம்பிள் ரேட்டைத் தேர்ந்தெடுக்கவும்"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"புளூடூத் ஆடியோ பிட்கள்/சாம்பிள்"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"ஒரு சாம்பிளுக்குப் பரிந்துரைக்கப்படும் புளூடூத் A2DP கோடெக் பிட்களைத் தேர்ந்தெடுக்கவும்"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"புளூடூத் ஆடியோ சேனல் பயன்முறை"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"பரிந்துரைக்கப்படும் புளூடூத் A2DP கோடெக் சேனல் பயன்முறையைத் தேர்ந்தெடுக்கவும்"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"புளூடூத் ஆடியோ LDAC வீடியோவின் தரம்"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"பரிந்துரைக்கப்படும் புளூடூத் A2DP கோடெக் LDAC வீடியோவின் தரத்தைத் தேர்ந்தெடுக்கவும்"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"வயர்லெஸ் காட்சி சான்றுக்கான விருப்பங்களைக் காட்டு"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wifi நுழைவு அளவை அதிகரித்து, வைஃபை தேர்வியில் ஒவ்வொன்றிற்கும் SSID RSSI ஐ காட்டுக"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"இயக்கப்பட்டதும், வைஃபை சிக்னல் குறையும் போது, வைஃபை முழுமையாக ஒத்துழைக்காமல் இருப்பதால் செல்லுலாரின் தரவு இணைப்புக்கு மாறும்"</string>
diff --git a/packages/SettingsLib/res/values-te-rIN/arrays.xml b/packages/SettingsLib/res/values-te/arrays.xml
similarity index 77%
rename from packages/SettingsLib/res/values-te-rIN/arrays.xml
rename to packages/SettingsLib/res/values-te/arrays.xml
index f1d20b7..beb705a 100644
--- a/packages/SettingsLib/res/values-te-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-te/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"DRM కంటెంట్కు మాత్రమే HDCP తనిఖీని ఉపయోగించండి"</item>
<item msgid="45075631231212732">"ఎప్పటికీ HDCP తనిఖీని ఉపయోగించు"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"డిఫాల్ట్"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"డిఫాల్ట్"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"డిఫాల్ట్"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"డిఫాల్ట్"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"డిఫాల్ట్"</item>
+ <item msgid="5618929009984956469">"16 బిట్లు/నమూనా"</item>
+ <item msgid="3412640499234627248">"24 బిట్లు/నమూనా"</item>
+ <item msgid="121583001492929387">"32 బిట్లు/నమూనా"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"డిఫాల్ట్"</item>
+ <item msgid="4726688794884191540">"16 బిట్లు/నమూనా"</item>
+ <item msgid="305344756485516870">"24 బిట్లు/నమూనా"</item>
+ <item msgid="244568657919675099">"32 బిట్లు/నమూనా"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"డిఫాల్ట్"</item>
+ <item msgid="4106832974775067314">"మోనో"</item>
+ <item msgid="5571632958424639155">"స్టీరియో"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"డిఫాల్ట్"</item>
+ <item msgid="8900559293912978337">"మోనో"</item>
+ <item msgid="8883739882299884241">"స్టీరియో"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"ప్రాధాన్య శబ్ద నాణ్యత (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"ప్రామాణికం (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"ప్రాధాన్య కనెక్షన్ (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"ప్రాధాన్య శబ్ద నాణ్యత (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"ప్రామాణికం (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"ప్రాధాన్య కనెక్షన్ (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ఆఫ్"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-te-rIN/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
similarity index 96%
rename from packages/SettingsLib/res/values-te-rIN/strings.xml
rename to packages/SettingsLib/res/values-te/strings.xml
index 31defb6..0d21371 100644
--- a/packages/SettingsLib/res/values-te-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi సంచార స్కాన్లను ఎల్లప్పుడూ అనుమతించు"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"ఎల్లప్పుడూ సెల్యులార్ డేటాను సక్రియంగా ఉంచు"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"సంపూర్ణ వాల్యూమ్ను నిలిపివేయి"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"బ్లూటూత్ ఆడియో కోడెక్"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"ప్రాధాన్య బ్లూటూత్ A2DP కోడెక్ను ఎంచుకోండి"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"బ్లూటూత్ ఆడియో నమూనా రేట్"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"ప్రాధాన్య బ్లూటూత్ A2DP కోడెక్ నమూనా రేట్ను ఎంచుకోండి"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"ఒక్కో నమూనాకు బ్లూటూత్ ఆడియో బిట్లు"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"ఒక్కో నమూనాకు ప్రాధాన్య బ్లూటూత్ A2DP కోడెక్ బిట్లను ఎంచుకోండి"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"బ్లూటూత్ ఆడియో ఛానెల్ మోడ్"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"ప్రాధాన్య బ్లూటూత్ A2DP కోడెక్ ఛానెల్ మోడ్ను ఎంచుకోండి"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"బ్లూటూత్ ఆడియో LDAC ప్లేబ్యాక్ నాణ్యత"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"ప్రాధాన్య బ్లూటూత్ A2DP కోడెక్ LDAC ప్లేబ్యాక్ నాణ్యతను ఎంచుకోండి"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"వైర్లెస్ ప్రదర్శన ప్రమాణపత్రం కోసం ఎంపికలను చూపు"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi ఎంపికలో SSID RSSI ప్రకారం చూపబడే Wi‑Fi లాగింగ్ స్థాయిని పెంచండి"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"ప్రారంభించబడినప్పుడు, Wi‑Fi సిగ్నల్ బలహీనంగా ఉంటే డేటా కనెక్షన్ను సెల్యులార్కి మార్చేలా Wi‑Fiపై మరింత తీవ్ర ఒత్తిడి కలుగుతుంది"</string>
diff --git a/packages/SettingsLib/res/values-th/arrays.xml b/packages/SettingsLib/res/values-th/arrays.xml
index 7ac53d9..1032337 100644
--- a/packages/SettingsLib/res/values-th/arrays.xml
+++ b/packages/SettingsLib/res/values-th/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"ใช้การตรวจสอบ HDCP สำหรับเนื้อหา DRM เท่านั้น"</item>
<item msgid="45075631231212732">"ใช้การตรวจสอบ HDCP เสมอ"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"ค่าเริ่มต้น"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"ค่าเริ่มต้น"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"ค่าเริ่มต้น"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"ค่าเริ่มต้น"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"ค่าเริ่มต้น"</item>
+ <item msgid="5618929009984956469">"16 บิต/ตัวอย่าง"</item>
+ <item msgid="3412640499234627248">"24 บิต/ตัวอย่าง"</item>
+ <item msgid="121583001492929387">"32 บิต/ตัวอย่าง"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"ค่าเริ่มต้น"</item>
+ <item msgid="4726688794884191540">"16 บิต/ตัวอย่าง"</item>
+ <item msgid="305344756485516870">"24 บิต/ตัวอย่าง"</item>
+ <item msgid="244568657919675099">"32 บิต/ตัวอย่าง"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"ค่าเริ่มต้น"</item>
+ <item msgid="4106832974775067314">"โมโน"</item>
+ <item msgid="5571632958424639155">"สเตอริโอ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"ค่าเริ่มต้น"</item>
+ <item msgid="8900559293912978337">"โมโน"</item>
+ <item msgid="8883739882299884241">"สเตอริโอ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"คุณภาพเสียงที่ต้องการ (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"มาตรฐาน (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"การเชื่อมต่อที่ต้องการ (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"คุณภาพเสียงที่ต้องการ (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"มาตรฐาน (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"การเชื่อมต่อที่ต้องการ (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ปิด"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index 5ec5871..60d91b5 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"ใช้การสแกน Wi-Fi ข้ามเครือข่ายเสมอ"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"เปิดใช้ข้อมูลมือถือเสมอ"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ปิดใช้การควบคุมระดับเสียงของอุปกรณ์อื่น"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ตัวแปลงรหัสเสียงบลูทูธ"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"เลือกตัวแปลงรหัสบลูทูธ A2DP ที่ต้องการ"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"อัตราตัวอย่างเสียงบลูทูธ"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"เลือกอัตราตัวอย่างของตัวแปลงรหัสบลูทูธ A2DP ที่ต้องการ"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"บิตต่อตัวอย่างของเสียงบลูทูธ"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"เลือกบิตต่อตัวอย่างของตัวแปลงรหัสบลูทูธ A2DP ที่ต้องการ"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"โหมดช่องสัญญาณเสียงบลูทูธ"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"เลือกโหมดช่องสัญญาณเสียงของตัวแปลงรหัสบลูทูธ A2DP ที่ต้องการ"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"คุณภาพการเล่นเสียงบลูทูธ LDAC"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"เลือกคุณภาพการเล่น LDAC ของตัวแปลงรหัสบลูทูธ A2DP ที่ต้องการ"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"แสดงตัวเลือกสำหรับการรับรองการแสดงผล แบบไร้สาย"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"เพิ่มระดับการบันทึก Wi‑Fi แสดงต่อ SSID RSSI ในตัวเลือก Wi‑Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"เมื่อเปิดใช้แล้ว Wi-Fi จะส่งผ่านการเชื่อมต่อข้อมูลไปยังเครือข่ายมือถือในทันทีที่พบสัญญาณ Wi-Fi อ่อน"</string>
diff --git a/packages/SettingsLib/res/values-tl/arrays.xml b/packages/SettingsLib/res/values-tl/arrays.xml
index 756e865..c0e9843 100644
--- a/packages/SettingsLib/res/values-tl/arrays.xml
+++ b/packages/SettingsLib/res/values-tl/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Gamitin lang ang pagsusuring HDCP para sa nilalamang DRM"</item>
<item msgid="45075631231212732">"Palaging gumamit ng pagsusuring HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Default"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Default"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Default"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Default"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Default"</item>
+ <item msgid="5618929009984956469">"16 bits/sample"</item>
+ <item msgid="3412640499234627248">"24 bits/sample"</item>
+ <item msgid="121583001492929387">"32 bits/sample"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Default"</item>
+ <item msgid="4726688794884191540">"16 bits/sample"</item>
+ <item msgid="305344756485516870">"24 bits/sample"</item>
+ <item msgid="244568657919675099">"32 bits/sample"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Default"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Default"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Gustong kalidad tunog (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"Karaniwan (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"Gustong koneksyon (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Gustong kalidad tunog (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"Karaniwan (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"Gustong koneksyon (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"I-off"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index 07e1c8bd..58781b2 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Palaging payagan ang Mga Pag-scan sa Roaming ng Wi‑Fi"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Palaging aktibo ang cellular data"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"I-disable ang absolute volume"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio Codec"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Piliin ang Gustong Bluetooth A2DP Codec"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Sample na Rate ng Bluetooth Audio"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Piliin ang Gustong Sample na Rate ng Bluetooth A2DP Codec"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits Per Sample ng Bluetooth Audio"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Piliin ang Gustong Bits Per Sample ng Bluetooth A2DP Codec"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Channel Mode ng Bluetooth Audio"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Piliin ang Gustong Channel Mode ng Bluetooth A2DP Codec"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Playback Quality ng Bluetooth Audio LDAC"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Piliin ang Gustong Playback Quality ng Bluetooth A2DP Codec LDAC"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Ipakita ang mga opsyon para sa certification ng wireless display"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Pataasin ang antas ng Wi‑Fi logging, ipakita sa bawat SSID RSSI sa Wi‑Fi Picker"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Kapag naka-enable, mas magiging agresibo ang Wi‑Fi sa paglipat ng koneksyon ng data sa Cellular, kapag mahina ang signal ng Wi‑Fi"</string>
diff --git a/packages/SettingsLib/res/values-tr/arrays.xml b/packages/SettingsLib/res/values-tr/arrays.xml
index ec989a4..ee668c7 100644
--- a/packages/SettingsLib/res/values-tr/arrays.xml
+++ b/packages/SettingsLib/res/values-tr/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"HDCP denetimini yalnızca DRM içeriği için kullan"</item>
<item msgid="45075631231212732">"HDCP denetimini her zaman kullan"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Varsayılan"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Varsayılan"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Varsayılan"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Varsayılan"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Varsayılan"</item>
+ <item msgid="5618929009984956469">"16 bit/örnek"</item>
+ <item msgid="3412640499234627248">"24 bit/örnek"</item>
+ <item msgid="121583001492929387">"32 bit/örnek"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Varsayılan"</item>
+ <item msgid="4726688794884191540">"16 bit/örnek"</item>
+ <item msgid="305344756485516870">"24 bit/örnek"</item>
+ <item msgid="244568657919675099">"32 bit/örnek"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Varsayılan"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Varsayılan"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Ses kalitesi öncelikli (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"Standart (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"Bağlantı öncelikli (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Ses kalitesi öncelikli (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"Standart (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"Bağlantı öncelikli (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Kapalı"</item>
<item msgid="1593289376502312923">"64 KB"</item>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index 78b4a61..b5c081a 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Kablosuz Dolaşım Taramalarına daima izin ver"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Hücresel veri her zaman etkin"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Mutlak sesi iptal et"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Ses Codec\'i"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Tercih Edilen Bluetooth A2DP Codec\'ini Seçin"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Ses Örnek Hızı"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Tercih Edilen Bluetooth A2DP Codec\'i Örnek Hızını Seçin"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth Ses Örnek Başına Bit Sayısı"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Tercih Edilen Bluetooth A2DP Codec\'i Örnek Başına Bit Sayısını Seçin"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Ses Kanalı Modu"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Tercih Edilen Bluetooth A2DP Codec\'i Kanal Modunu Seçin"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth Ses LDAC Oynatma Kalitesi"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Tercih Edilen Bluetooth A2DP Codec\'i LDAC Oynatma Kalitesini Seçin"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Kablosuz ekran sertifikası seçeneklerini göster"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Kablosuz günlük kaydı seviyesini artır. Kablosuz Seçici\'de her bir SSID RSSI için göster."</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Etkinleştirildiğinde, Kablosuz ağ sinyali zayıfken veri bağlantısının Hücresel ağa geçirilmesinde daha agresif olunur"</string>
diff --git a/packages/SettingsLib/res/values-uk/arrays.xml b/packages/SettingsLib/res/values-uk/arrays.xml
index e546fa2..91a6d6f 100644
--- a/packages/SettingsLib/res/values-uk/arrays.xml
+++ b/packages/SettingsLib/res/values-uk/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Використовувати перевірку HDCP лише для вмісту, захищеного DRM"</item>
<item msgid="45075631231212732">"Завжди використовувати перевірку HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"За умовчанням"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"За умовчанням"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"За умовчанням"</item>
+ <item msgid="8895532488906185219">"44,1 кГц"</item>
+ <item msgid="2909915718994807056">"48 кГц"</item>
+ <item msgid="3347287377354164611">"88,2 кГц"</item>
+ <item msgid="1234212100239985373">"96 кГц"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"За умовчанням"</item>
+ <item msgid="4482862757811638365">"44,1 кГц"</item>
+ <item msgid="354495328188724404">"48 кГц"</item>
+ <item msgid="7329816882213695083">"88,2 кГц"</item>
+ <item msgid="6967397666254430476">"96 кГц"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"За умовчанням"</item>
+ <item msgid="5618929009984956469">"16 бітів на зразок"</item>
+ <item msgid="3412640499234627248">"24 біти на зразок"</item>
+ <item msgid="121583001492929387">"32 біти на зразок"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"За умовчанням"</item>
+ <item msgid="4726688794884191540">"16 бітів на зразок"</item>
+ <item msgid="305344756485516870">"24 біти на зразок"</item>
+ <item msgid="244568657919675099">"32 біти на зразок"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"За умовчанням"</item>
+ <item msgid="4106832974775067314">"Моно"</item>
+ <item msgid="5571632958424639155">"Стерео"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"За умовчанням"</item>
+ <item msgid="8900559293912978337">"Моно"</item>
+ <item msgid="8883739882299884241">"Стерео"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Реком. якість звуку (990 та 909 Кбіт/с)"</item>
+ <item msgid="138837449700903545">"Стандартна якість (660 і 606 Кбіт/с)"</item>
+ <item msgid="4777177307869441982">"Рекоменд. з’єднання (330 і 303 Кбіт/с)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Реком. якість звуку (990 та 909 Кбіт/с)"</item>
+ <item msgid="9091111147684472529">"Стандартна якість (660 і 606 Кбіт/с)"</item>
+ <item msgid="3367904477834831032">"Рекоменд. з’єднання (330 і 303 Кбіт/с)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Вимкнено"</item>
<item msgid="1593289376502312923">"64 Кб"</item>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index 29557ec..bafd8b6 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Завжди шукати мережі Wi-Fi"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Не вимикати передавання даних"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Вимкнути абсолютну гучність"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Кодек для аудіо Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Виберіть кодек Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Частота вибірки для аудіо Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Виберіть частоту вибірки для кодека Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Кількість бітів на зразок для аудіо Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Виберіть кількість бітів на зразок для кодека Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Режим каналу для аудіо Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Виберіть режим каналу для кодека Bluetooth A2DP"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Якість відтворення аудіо Bluetooth LDAC"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Виберіть якість відтворення для кодека Bluetooth A2DP"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Показати параметри сертифікації бездротового екрана"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Показувати в журналі RSSI для кожного SSID під час вибору Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Примусово перемикатися на мобільну мережу, коли сигнал Wi-Fi слабкий"</string>
diff --git a/packages/SettingsLib/res/values-ur-rPK/arrays.xml b/packages/SettingsLib/res/values-ur/arrays.xml
similarity index 76%
rename from packages/SettingsLib/res/values-ur-rPK/arrays.xml
rename to packages/SettingsLib/res/values-ur/arrays.xml
index 245fed8..d7dd3d2 100644
--- a/packages/SettingsLib/res/values-ur-rPK/arrays.xml
+++ b/packages/SettingsLib/res/values-ur/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"HDCP چیکنگ صرف DRM مواد کیلئے استعمال کریں"</item>
<item msgid="45075631231212732">"ہمیشہ HDCP چیکنگ استعمال کریں"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"ڈیفالٹ"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"ڈیفالٹ"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"ڈیفالٹ"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"ڈیفالٹ"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"ڈیفالٹ"</item>
+ <item msgid="5618929009984956469">"16 بٹس/نمونہ"</item>
+ <item msgid="3412640499234627248">"24 بٹس/نمونہ"</item>
+ <item msgid="121583001492929387">"32 بٹس/نمونہ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"ڈیفالٹ"</item>
+ <item msgid="4726688794884191540">"16 بٹس/نمونہ"</item>
+ <item msgid="305344756485516870">"24 بٹس/نمونہ"</item>
+ <item msgid="244568657919675099">"32 بٹس/نمونہ"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"ڈیفالٹ"</item>
+ <item msgid="4106832974775067314">"مونو"</item>
+ <item msgid="5571632958424639155">"اسٹیریو"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"ڈیفالٹ"</item>
+ <item msgid="8900559293912978337">"مونو"</item>
+ <item msgid="8883739882299884241">"اسٹیریو"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"آواز کا معیار ترجیحی (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"معیاری (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"کنکشن ترجیحی (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"آواز کا معیار ترجیحی (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"معیاری (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"کنکشن ترجیحی (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"آف"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-ur-rPK/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml
similarity index 96%
rename from packages/SettingsLib/res/values-ur-rPK/strings.xml
rename to packages/SettingsLib/res/values-ur/strings.xml
index e1b545f..ce27df8 100644
--- a/packages/SettingsLib/res/values-ur-rPK/strings.xml
+++ b/packages/SettingsLib/res/values-ur/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"ہمیشہ Wi‑Fi روم اسکینز کی اجازت دیں"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"سیلولر ڈیٹا کو ہمیشہ فعال رکھیں"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"مطلق والیوم کو غیر فعال کریں"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"بلوٹوتھ آڈیو کوڈیک"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"ترجیحی بلوٹوتھ A2DP کوڈیک منتخب کریں"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"بلوٹوتھ آڈیو کے نمونے کی شرح"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"ترجیحی بلوٹوتھ A2DP کوڈیک نمونے کی شرح منتخب کریں"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"بلوٹوتھ آڈیو بٹس فی نمونہ"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"ترجیحی بلو ٹوتھ A2DP کوڈیک بٹس فی نمونہ منتخب کریں"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"بلوٹوتھ آڈیو چینل موڈ"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"ترجیحی بلوٹوتھ A2DP کوڈیک چینل موڈ منتخب کریں"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"بلوٹوتھ آڈیو LDAC پلے بیک کا معیار"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"ترجیحی بلوٹوتھ A2DP کوڈیک LDAC پلے بیک کا معیار منتخب کریں"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"وائرلیس ڈسپلے سرٹیفیکیشن کیلئے اختیارات دکھائیں"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi لاگنگ لیول میں اضافہ کریں، Wi‑Fi منتخب کنندہ میں فی SSID RSSI دکھائیں"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"فعال ہونے پر، جب Wi‑Fi سگنل کمزور ہوگا تو Wi‑Fi سیلولر پر ڈیٹا کنکشن بھیجنے کیلئے مزید جارحانہ کاروائی کرے گا۔"</string>
diff --git a/packages/SettingsLib/res/values-uz-rUZ/arrays.xml b/packages/SettingsLib/res/values-uz/arrays.xml
similarity index 75%
rename from packages/SettingsLib/res/values-uz-rUZ/arrays.xml
rename to packages/SettingsLib/res/values-uz/arrays.xml
index 69b9bfb..11b3de7 100644
--- a/packages/SettingsLib/res/values-uz-rUZ/arrays.xml
+++ b/packages/SettingsLib/res/values-uz/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"HDCP tekshiruvi faqat DRM kontent uchun ishlatilsin"</item>
<item msgid="45075631231212732">"Har doim HDCP tekshiruvidan foydalanilsin"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Standart"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Standart"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Standart"</item>
+ <item msgid="8895532488906185219">"44.1 kGs"</item>
+ <item msgid="2909915718994807056">"48.0 kGs"</item>
+ <item msgid="3347287377354164611">"88.2 kGs"</item>
+ <item msgid="1234212100239985373">"96.0 kGs"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Standart"</item>
+ <item msgid="4482862757811638365">"44.1 kGs"</item>
+ <item msgid="354495328188724404">"48.0 kGs"</item>
+ <item msgid="7329816882213695083">"88.2 kGs"</item>
+ <item msgid="6967397666254430476">"96.0 kGs"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Standart"</item>
+ <item msgid="5618929009984956469">"16 bit/namuna"</item>
+ <item msgid="3412640499234627248">"24 bit/namuna"</item>
+ <item msgid="121583001492929387">"32 bit/namuna"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Standart"</item>
+ <item msgid="4726688794884191540">"16 bit/namuna"</item>
+ <item msgid="305344756485516870">"24 bit/namuna"</item>
+ <item msgid="244568657919675099">"32 bit/namuna"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Standart"</item>
+ <item msgid="4106832974775067314">"Mono"</item>
+ <item msgid="5571632958424639155">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Standart"</item>
+ <item msgid="8900559293912978337">"Mono"</item>
+ <item msgid="8883739882299884241">"Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"O‘zingizga ma’qul ovoz sifati (990/909 kbit/s)"</item>
+ <item msgid="138837449700903545">"Standart (660/606 kbit/s)"</item>
+ <item msgid="4777177307869441982">"O‘zingizga ma’qul ulanish (330/303 kbit/s)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"O‘zingizga ma’qul ovoz sifati (990/909 kbit/s)"</item>
+ <item msgid="9091111147684472529">"Standart (660/606 kbit/s)"</item>
+ <item msgid="3367904477834831032">"O‘zingizga ma’qul ulanish (330/303 kbit/s)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"O‘chiq"</item>
<item msgid="1593289376502312923">"64 KB"</item>
diff --git a/packages/SettingsLib/res/values-uz-rUZ/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml
similarity index 95%
rename from packages/SettingsLib/res/values-uz-rUZ/strings.xml
rename to packages/SettingsLib/res/values-uz/strings.xml
index 05879a2..6efc6c4 100644
--- a/packages/SettingsLib/res/values-uz-rUZ/strings.xml
+++ b/packages/SettingsLib/res/values-uz/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi-Fi tarmoqlarini qidirishga doim ruxsat"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobil internet o‘chirilmasin"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Ovoz balangligining mutlaq darajasini o‘chirib qo‘yish"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth audio kodeki"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"O‘zingizga ma’qul Bluetooth A2DP kodekini tanlang"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth audio namunasi chastotasi"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"O‘zingizga ma’qul Bluetooth A2DP kodek namunasi chastotasini tanlang"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth audio namunasidagi bitlar soni"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"O‘zingizga ma’qul Bluetooth A2DP kodek namunasidagi bitlar sonini tanlang"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth audio kanali rejimi"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"O‘zingizga ma’qul Bluetooth A2DP kodek kanali rejimini tanlang"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth audio LDAC ijrosi sifati"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"O‘zingizga ma’qul Bluetooth A2DP kodek LDAC ijrosi sifatini tanlang"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Simsiz monitorlarni sertifikatlash parametrini ko‘rsatish"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fi ulanishini tanlashda har bir SSID uchun jurnalda ko‘rsatilsin"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Agar ushbu funksiya yoqilsa, Wi-Fi signali past bo‘lganda internetga ulanish majburiy ravishda mobil internetga o‘tkaziladi."</string>
diff --git a/packages/SettingsLib/res/values-vi/arrays.xml b/packages/SettingsLib/res/values-vi/arrays.xml
index 4d79d39..e7dbd4e 100644
--- a/packages/SettingsLib/res/values-vi/arrays.xml
+++ b/packages/SettingsLib/res/values-vi/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Chỉ sử dụng kiểm tra HDCP cho nội dung DRM"</item>
<item msgid="45075631231212732">"Luôn sử dụng kiểm tra HDCP"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Mặc định"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Mặc định"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Mặc định"</item>
+ <item msgid="8895532488906185219">"44,1 kHz"</item>
+ <item msgid="2909915718994807056">"48,0 kHz"</item>
+ <item msgid="3347287377354164611">"88,2 kHz"</item>
+ <item msgid="1234212100239985373">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Mặc định"</item>
+ <item msgid="4482862757811638365">"44,1 kHz"</item>
+ <item msgid="354495328188724404">"48,0 kHz"</item>
+ <item msgid="7329816882213695083">"88,2 kHz"</item>
+ <item msgid="6967397666254430476">"96,0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Mặc định"</item>
+ <item msgid="5618929009984956469">"16 bit/mẫu"</item>
+ <item msgid="3412640499234627248">"24 bit/mẫu"</item>
+ <item msgid="121583001492929387">"32 bit/mẫu"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Mặc định"</item>
+ <item msgid="4726688794884191540">"16 bit/mẫu"</item>
+ <item msgid="305344756485516870">"24 bit/mẫu"</item>
+ <item msgid="244568657919675099">"32 bit/mẫu"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Mặc định"</item>
+ <item msgid="4106832974775067314">"Đơn âm"</item>
+ <item msgid="5571632958424639155">"Âm thanh nổi"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Mặc định"</item>
+ <item msgid="8900559293912978337">"Đơn âm"</item>
+ <item msgid="8883739882299884241">"Âm thanh nổi"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"C.lượng â.thanh ưu tiên (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"Tiêu chuẩn (660kb/giây/606kb/giây)"</item>
+ <item msgid="4777177307869441982">"Kết nối được ưu tiên (330kb/giây/303kb/giây)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"C.lượng â.thanh ưu tiên (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"Tiêu chuẩn (660kb/giây/606kb/giây)"</item>
+ <item msgid="3367904477834831032">"Kết nối được ưu tiên (330kb/giây/303kb/giây)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Tắt"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index 28dbe51..5822f18 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Luôn cho phép quét chuyển vùng Wi‑Fi"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Dữ liệu di động luôn hoạt động"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Vô hiệu hóa âm lượng tuyệt đối"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec âm thanh Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Chọn Codec A2DP Bluetooth ưu tiên"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Tốc độ lấy mẫu âm thanh Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Chọn tốc độ lấy mẫu Codec A2DP Bluetooth ưu tiên"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Số bit âm thanh Bluetooth mỗi mẫu"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Chọn số bit Codec A2DP Bluetooth ưu tiên mỗi mẫu"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Chế độ kênh âm thanh Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Chọn chế độ kênh Codec A2DP Bluetooth ưu tiên"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Chất lượng phát lại LDAC Âm thanh Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Chọn chất lượng phát lại LDAC Codec A2DP Bluetooth ưu tiên"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Hiển thị tùy chọn chứng nhận hiển thị không dây"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Tăng mức ghi nhật ký Wi‑Fi, hiển thị mỗi SSID RSSI trong bộ chọn Wi‑Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Khi được bật, Wi‑Fi sẽ tích cực hơn trong việc chuyển vùng kết nối dữ liệu sang mạng di động khi tín hiệu Wi‑Fi yếu"</string>
diff --git a/packages/SettingsLib/res/values-zh-rCN/arrays.xml b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
index f449a94..0ef095d 100644
--- a/packages/SettingsLib/res/values-zh-rCN/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"仅使用 HDCP 检查 DRM 内容"</item>
<item msgid="45075631231212732">"始终使用 HDCP 检查"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"默认"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"默认"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"默认"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"默认"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"默认"</item>
+ <item msgid="5618929009984956469">"16 位/样本"</item>
+ <item msgid="3412640499234627248">"24 位/样本"</item>
+ <item msgid="121583001492929387">"32 位/样本"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"默认"</item>
+ <item msgid="4726688794884191540">"16 位/样本"</item>
+ <item msgid="305344756485516870">"24 位/样本"</item>
+ <item msgid="244568657919675099">"32 位/样本"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"默认"</item>
+ <item msgid="4106832974775067314">"单声道"</item>
+ <item msgid="5571632958424639155">"立体声"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"默认"</item>
+ <item msgid="8900559293912978337">"单声道"</item>
+ <item msgid="8883739882299884241">"立体声"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"音质优先 (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"标准 (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"连接优先 (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"音质优先 (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"标准 (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"连接优先 (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"关闭"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index 7c8bb20..35a1dfc 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"一律允许WLAN漫游扫描"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"始终开启移动数据网络"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"停用绝对音量功能"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"蓝牙音频编解码器"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"选择首选的蓝牙 A2DP 编解码器"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"蓝牙音频采样率"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"选择首选的蓝牙 A2DP 编解码器采样率"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"蓝牙音频每样本位数"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"选择首选的蓝牙 A2DP 编解码器每样本位数"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"蓝牙音频声道模式"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"选择首选的蓝牙 A2DP 编解码器声道模式"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"蓝牙音频 LDAC 播放质量"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"选择首选的蓝牙 A2DP 编解码器 LDAC 播放质量"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"显示无线显示认证选项"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"提升WLAN日志记录级别(在WLAN选择器中显示每个SSID的RSSI)"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"开启此设置后,系统会在WLAN信号较弱时,主动将网络模式从WLAN网络切换到移动数据网络"</string>
diff --git a/packages/SettingsLib/res/values-zh-rHK/arrays.xml b/packages/SettingsLib/res/values-zh-rHK/arrays.xml
index 949bbce..872e7c9 100644
--- a/packages/SettingsLib/res/values-zh-rHK/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"僅使用 HDCP 檢查 DRM 內容"</item>
<item msgid="45075631231212732">"永遠使用 HDCP 檢查"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"預設"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"預設"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"預設"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"預設"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"預設"</item>
+ <item msgid="5618929009984956469">"每個樣本 16 位元"</item>
+ <item msgid="3412640499234627248">"每個樣本 24 位元"</item>
+ <item msgid="121583001492929387">"每個樣本 32 位元"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"預設"</item>
+ <item msgid="4726688794884191540">"每個樣本 16 位元"</item>
+ <item msgid="305344756485516870">"每個樣本 24 位元"</item>
+ <item msgid="244568657919675099">"每個樣本 32 位元"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"預設"</item>
+ <item msgid="4106832974775067314">"單聲道"</item>
+ <item msgid="5571632958424639155">"立體聲"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"預設"</item>
+ <item msgid="8900559293912978337">"單聲道"</item>
+ <item msgid="8883739882299884241">"立體聲"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"音質優先 (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"標準 (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"連線優先 (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"音質優先 (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"標準 (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"連線優先 (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"關閉"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index 62c7715..3c5c328 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"永遠允許 Wi-Fi 漫遊掃瞄"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"經常啟用流動數據"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"停用絕對音量功能"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"藍牙音訊編解碼器"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"選取偏好的藍牙 A2DP 編解碼器"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"藍牙音訊取樣率"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"選取偏好的藍牙 A2DP 編解碼器取樣率"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"藍牙音訊每個樣本位元數"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"選取偏好的藍牙 A2DP 編解碼器每個樣本位元數"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"藍牙音訊聲道模式"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"選取偏好的藍牙 A2DP 編解碼器聲道模式"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"藍牙音訊 LDAC 播放音質"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"選取偏好的藍牙 A2DP 編解碼器 LDAC 播放音質"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"顯示無線螢幕分享認證的選項"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"讓 Wi‑Fi 記錄功能升級,在 Wi‑Fi 選擇器中依每個 SSID RSSI 顯示 Wi‑Fi 詳細紀錄"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"啟用時,Wi-Fi 連線會在訊號不穩的情況下更積極轉換成流動數據連線"</string>
diff --git a/packages/SettingsLib/res/values-zh-rTW/arrays.xml b/packages/SettingsLib/res/values-zh-rTW/arrays.xml
index 766bc95..ad99128 100644
--- a/packages/SettingsLib/res/values-zh-rTW/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"僅使用 HDCP 檢查 DRM 內容"</item>
<item msgid="45075631231212732">"一律使用 HDCP 檢查"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"預設"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"預設"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"預設"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"預設"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"預設"</item>
+ <item msgid="5618929009984956469">"16 位元/樣本"</item>
+ <item msgid="3412640499234627248">"24 位元/樣本"</item>
+ <item msgid="121583001492929387">"32 位元/樣本"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"預設"</item>
+ <item msgid="4726688794884191540">"16 位元/樣本"</item>
+ <item msgid="305344756485516870">"24 位元/樣本"</item>
+ <item msgid="244568657919675099">"32 位元/樣本"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"預設"</item>
+ <item msgid="4106832974775067314">"單聲道"</item>
+ <item msgid="5571632958424639155">"立體聲"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"預設"</item>
+ <item msgid="8900559293912978337">"單聲道"</item>
+ <item msgid="8883739882299884241">"立體聲"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"音質優先 (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"標準 (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"連線優先 (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"音質優先 (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"標準 (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"連線優先 (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"關閉"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index 17a62e1..861834b 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"一律允許 Wi-Fi 漫遊掃描"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"行動數據連線一律保持啟用狀態"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"停用絕對音量功能"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"藍牙音訊轉碼器"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"選取偏好的藍牙 A2DP 轉碼器"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"藍牙音訊取樣率"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"選取偏好的藍牙 A2DP 轉碼器取樣率"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"藍牙音訊每單位樣本位元數"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"選取偏好的藍牙 A2DP 轉碼器每單位樣本位元數"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"藍牙音訊聲道模式"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"選取偏好的藍牙 A2DP 轉碼器聲道模式"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"藍牙音訊 LDAC 播放品質"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"選取偏好的藍牙 A2DP 轉碼器 LDAC 播放品質"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"顯示無線螢幕分享認證的選項"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"讓 Wi‑Fi 記錄功能升級,在 Wi‑Fi 選擇器中依每個 SSID RSSI 顯示 Wi‑Fi 詳細紀錄"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"啟用時,Wi-Fi 連線在訊號不穩的情況下會更積極轉換成行動數據連線"</string>
diff --git a/packages/SettingsLib/res/values-zu/arrays.xml b/packages/SettingsLib/res/values-zu/arrays.xml
index a2b176c..50c1274 100644
--- a/packages/SettingsLib/res/values-zu/arrays.xml
+++ b/packages/SettingsLib/res/values-zu/arrays.xml
@@ -58,6 +58,66 @@
<item msgid="3878793616631049349">"Sebenzisa ukuhlola kwe-HDCP kokuqukethwe i-DRM kuphela"</item>
<item msgid="45075631231212732">"Sebenzisa njalo ukuhlola kwe-HDPC"</item>
</string-array>
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item msgid="1852387125374225729">"Okuzenzakalelayo"</item>
+ <item msgid="7539690996561263909">"SBC"</item>
+ <item msgid="4260844283202960798">"aptX"</item>
+ <item msgid="7279983368484312990">"aptX-HD"</item>
+ <item msgid="2301339338870319651">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_summaries">
+ <item msgid="9072025520360316957">"Okuzenzakalelayo"</item>
+ <item msgid="6898329690939802290">"SBC"</item>
+ <item msgid="1190434429082395888">"aptX"</item>
+ <item msgid="649699003004233053">"aptX-HD"</item>
+ <item msgid="508106435710925399">"LDAC"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item msgid="7102940318360468759">"Okuzenzakalelayo"</item>
+ <item msgid="8895532488906185219">"44.1 kHz"</item>
+ <item msgid="2909915718994807056">"48.0 kHz"</item>
+ <item msgid="3347287377354164611">"88.2 kHz"</item>
+ <item msgid="1234212100239985373">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+ <item msgid="7224433008148687313">"Okuzenzakalelayo"</item>
+ <item msgid="4482862757811638365">"44.1 kHz"</item>
+ <item msgid="354495328188724404">"48.0 kHz"</item>
+ <item msgid="7329816882213695083">"88.2 kHz"</item>
+ <item msgid="6967397666254430476">"96.0 kHz"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item msgid="6694044160540313386">"Okuzenzakalelayo"</item>
+ <item msgid="5618929009984956469">"16 bits/isampula"</item>
+ <item msgid="3412640499234627248">"24 bits/isampula"</item>
+ <item msgid="121583001492929387">"32 bits/isampula"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+ <item msgid="5091076677792306320">"Okuzenzakalelayo"</item>
+ <item msgid="4726688794884191540">"16 bits/isampula"</item>
+ <item msgid="305344756485516870">"24 bits/isampula"</item>
+ <item msgid="244568657919675099">"32 bits/isampula"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item msgid="13423709606339855">"Okuzenzakalelayo"</item>
+ <item msgid="4106832974775067314">"Okukodwa"</item>
+ <item msgid="5571632958424639155">"I-Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+ <item msgid="8128478683963250130">"Okuzenzakalelayo"</item>
+ <item msgid="8900559293912978337">"Okukodwa"</item>
+ <item msgid="8883739882299884241">"I-Stereo"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item msgid="2944889121850394020">"Ikhwalithi yomsindo ekhethwayo (990kbps/909kbps)"</item>
+ <item msgid="138837449700903545">"Okujwayelekile (660kbps/606kbps)"</item>
+ <item msgid="4777177307869441982">"Uxhumo olukhethwayo (330kbps/303kbps)"</item>
+ </string-array>
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+ <item msgid="172302906231378902">"Ikhwalithi yomsindo ekhethwayo (990kbps/909kbps)"</item>
+ <item msgid="9091111147684472529">"Okujwayelekile (660kbps/606kbps)"</item>
+ <item msgid="3367904477834831032">"Uxhumo olukhethwayo (330kbps/303kbps)"</item>
+ </string-array>
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Valiwe"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index 7e982ee..289f4f6 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -170,6 +170,16 @@
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Vumela njalo ukuskena kokuzula kwe-Wi-Fi"</string>
<string name="mobile_data_always_on" msgid="7745605759775320362">"Idatha yeselula ihlala isebenza"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Khubaza ivolumu ngokuphelele"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"I-Bluetooth Audio Codec"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Khetha i-Bluetooth A2DP Codec ethandwayo"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Isilinganiso sesampula yomsindo we-Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Khetha isilinganiso sesampuli ye-Bluetooth A2DP Codec ethandwayo"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Ama-Bits omsindo we-Bluetooth ngesampula ngayinye"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Khetha i-Bluetooth A2DP Codec Bits ethandwayo ngesampula ngayinye"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Imodi yesiteshi somsindo we-Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Khetha imodi yesiteshi se-Bluetooth A2DP Codec ethandwayo"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Ikhwalithi yokudlala ye-LDAC yomsindo we-Bluetooth"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Khetha ikhwalithi yokudlala ye-Bluetooth A2DP Codec LDAC ethandwayo"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Bonisa izinketho zokunikeza isitifiketi ukubukeka okungenantambo"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"khuphula izinga lokungena le-Wi-Fi, bonisa nge-SSID RSSI engayodwana kusikhethi se-Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Uma inikwe amandla, i-Wi-Fi izoba namandla kakhulu ekunikezeleni ukuxhumeka kwedatha kuselula, uma isiginali ye-Wi-Fi iphansi"</string>
diff --git a/packages/SettingsLib/res/values/arrays.xml b/packages/SettingsLib/res/values/arrays.xml
index 362cf44..5c00985 100644
--- a/packages/SettingsLib/res/values/arrays.xml
+++ b/packages/SettingsLib/res/values/arrays.xml
@@ -100,6 +100,129 @@
<item>Always use HDCP checking</item>
</string-array>
+
+ <!-- Bluetooth settings -->
+
+ <!-- Titles for Bluetooth Audio Codec selection preference. [CHAR LIMIT=40] -->
+ <string-array name="bluetooth_a2dp_codec_titles">
+ <item>Default</item>
+ <item>SBC</item>
+ <item>aptX</item>
+ <item>aptX-HD</item>
+ <item>LDAC</item>
+ </string-array>
+
+ <!-- Values for Bluetooth Audio Codec selection preference. -->
+ <string-array name="bluetooth_a2dp_codec_values" translatable="false" >
+ <item>1000000</item>
+ <item>0</item>
+ <item>1</item>
+ <item>2</item>
+ <item>3</item>
+ </string-array>
+
+ <!-- Summaries for Bluetooth Audio Codec selection preference. [CHAR LIMIT=40]-->
+ <string-array name="bluetooth_a2dp_codec_summaries" >
+ <item>Default</item>
+ <item>SBC</item>
+ <item>aptX</item>
+ <item>aptX-HD</item>
+ <item>LDAC</item>
+ </string-array>
+
+ <!-- Titles for Bluetooth Audio Codec Sample Rate selection preference. [CHAR LIMIT=40] -->
+ <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+ <item>Default</item>
+ <item>44.1 kHz</item>
+ <item>48.0 kHz</item>
+ <item>88.2 kHz</item>
+ <item>96.0 kHz</item>
+ </string-array>
+
+ <!-- Values for Bluetooth Audio Codec Sample Rate selection preference. -->
+ <string-array name="bluetooth_a2dp_codec_sample_rate_values" translatable="false" >
+ <item>0</item>
+ <item>1</item>
+ <item>2</item>
+ <item>4</item>
+ <item>8</item>
+ </string-array>
+
+ <!-- Summaries for Bluetooth Audio Codec Sample Rate selection preference. [CHAR LIMIT=40]-->
+ <string-array name="bluetooth_a2dp_codec_sample_rate_summaries" >
+ <item>Default</item>
+ <item>44.1 kHz</item>
+ <item>48.0 kHz</item>
+ <item>88.2 kHz</item>
+ <item>96.0 kHz</item>
+ </string-array>
+
+ <!-- Titles for Bluetooth Audio Codec Bits Per Sample selection preference. [CHAR LIMIT=40] -->
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+ <item>Default</item>
+ <item>16 bits/sample</item>
+ <item>24 bits/sample</item>
+ <item>32 bits/sample</item>
+ </string-array>
+
+ <!-- Values for Bluetooth Audio Codec Bits Per Sample selection preference. -->
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_values" translatable="false" >
+ <item>0</item>
+ <item>1</item>
+ <item>2</item>
+ <item>4</item>
+ </string-array>
+
+ <!-- Summaries for Bluetooth Audio Codec Bits Per Sample selection preference. [CHAR LIMIT=40]-->
+ <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries" >
+ <item>Default</item>
+ <item>16 bits/sample</item>
+ <item>24 bits/sample</item>
+ <item>32 bits/sample</item>
+ </string-array>
+
+ <!-- Titles for Bluetooth Audio Codec Channel Mode selection preference. [CHAR LIMIT=40] -->
+ <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+ <item>Default</item>
+ <item>Mono</item>
+ <item>Stereo</item>
+ </string-array>
+
+ <!-- Values for Bluetooth Audio Codec Channel Mode selection preference. -->
+ <string-array name="bluetooth_a2dp_codec_channel_mode_values" translatable="false" >
+ <item>0</item>
+ <item>1</item>
+ <item>2</item>
+ </string-array>
+
+ <!-- Summaries for Bluetooth Audio Codec Channel Mode selection preference. [CHAR LIMIT=40]-->
+ <string-array name="bluetooth_a2dp_codec_channel_mode_summaries" >
+ <item>Default</item>
+ <item>Mono</item>
+ <item>Stereo</item>
+ </string-array>
+
+ <!-- Titles for Bluetooth Audio Codec LDAC Playback Quality selection preference. [CHAR LIMIT=40] -->
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+ <item>Sound quality preferred (990kbps/909kbps)</item>
+ <item>Standard (660kbps/606kbps)</item>
+ <item>Connection preferred (330kbps/303kbps)</item>
+ </string-array>
+
+ <!-- Values for Bluetooth Audio Codec LDAC Playback Quaility selection preference. -->
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_values" translatable="false" >
+ <item>1000</item>
+ <item>1001</item>
+ <item>1002</item>
+ </string-array>
+
+ <!-- Summaries for Bluetooth Audio Codec LDAC Playback Quality selection preference. [CHAR LIMIT=40]-->
+ <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries" >
+ <item>Sound quality preferred (990kbps/909kbps)</item>
+ <item>Standard (660kbps/606kbps)</item>
+ <item>Connection preferred (330kbps/303kbps)</item>
+ </string-array>
+
<!-- Titles for logd limit size selection preference. [CHAR LIMIT=14] -->
<string-array name="select_logd_size_titles">
<item>Off</item>
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index f176aac..93bd5dc 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -428,6 +428,31 @@
<!-- Setting Checkbox title for disabling Bluetooth absolute volume -->
<string name="bluetooth_disable_absolute_volume">Disable absolute volume</string>
+ <!-- UI debug setting: Select Bluetooth Audio Codec -->
+ <string name="bluetooth_select_a2dp_codec_type">Bluetooth Audio Codec</string>
+ <!-- UI debug setting: Select Preferred Bluetooth A2DP Codec -->
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title">Select Preferred Bluetooth A2DP Codec</string>
+
+ <!-- UI debug setting: Select Bluetooth Audio Sample Rate -->
+ <string name="bluetooth_select_a2dp_codec_sample_rate">Bluetooth Audio Sample Rate</string>
+ <!-- UI debug setting: Select Preferred Bluetooth A2DP Codec Sample Rate -->
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title">Select Preferred Bluetooth A2DP Codec Sample Rate</string>
+
+ <!-- UI debug setting: Select Bluetooth Audio Bits Per Sample -->
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample">Bluetooth Audio Bits Per Sample</string>
+ <!-- UI debug setting: Select Preferred Bluetooth A2DP Codec Bits Per Sample -->
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title">Select Preferred Bluetooth A2DP Codec Bits Per Sample</string>
+
+ <!-- UI debug setting: Select Bluetooth Audio Channel Mode -->
+ <string name="bluetooth_select_a2dp_codec_channel_mode">Bluetooth Audio Channel Mode</string>
+ <!-- UI debug setting: Select Preferred Bluetooth A2DP Codec Channel Mode -->
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title">Select Preferred Bluetooth A2DP Codec Channel Mode</string>
+
+ <!-- UI debug setting: Select Bluetooth Audio LDAC Playback Quality -->
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality">Bluetooth Audio LDAC Playback Quality</string>
+ <!-- UI debug setting: Select Preferred Bluetooth A2DP Codec LDAC Playback Quality -->
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title">Select Preferred Bluetooth A2DP Codec LDAC Playback Quality</string>
+
<!-- setting Checkbox summary whether to show options for wireless display certification -->
<string name="wifi_display_certification_summary">Show options for wireless display certification</string>
<!-- Setting Checkbox summary whether to enable Wifi verbose Logging [CHAR LIMIT=80] -->
diff --git a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageManagerVolumeProvider.java b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageManagerVolumeProvider.java
index de76279..320494c 100644
--- a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageManagerVolumeProvider.java
+++ b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageManagerVolumeProvider.java
@@ -41,4 +41,9 @@
public List<VolumeInfo> getVolumes() {
return mStorageManager.getVolumes();
}
+
+ @Override
+ public VolumeInfo findEmulatedForPrivate(VolumeInfo privateVolume) {
+ return mStorageManager.findEmulatedForPrivate(privateVolume);
+ }
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageVolumeProvider.java b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageVolumeProvider.java
index 95bb18d..646c42f 100644
--- a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageVolumeProvider.java
+++ b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageVolumeProvider.java
@@ -34,4 +34,9 @@
* Returns a list of VolumeInfos for the device.
*/
List<VolumeInfo> getVolumes();
+
+ /**
+ * Returns the emulated volume for a given private volume.
+ */
+ VolumeInfo findEmulatedForPrivate(VolumeInfo privateVolume);
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
index 37f2fe9..6010621 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
@@ -377,11 +377,17 @@
? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
: PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
- if (isDashboardFeatureEnabled()) {
- new CategoriesUpdateTask().execute();
- } else {
- new CategoriesUpdater().execute();
- }
+ }
+ }
+
+ /**
+ * Updates dashboard categories. Only necessary to call this after setTileEnabled
+ */
+ public void updateCategories() {
+ if (isDashboardFeatureEnabled()) {
+ new CategoriesUpdateTask().execute();
+ } else {
+ new CategoriesUpdater().execute();
}
}
diff --git a/packages/SettingsProvider/res/values-az-rAZ/defaults.xml b/packages/SettingsProvider/res/values-az/defaults.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-az-rAZ/defaults.xml
rename to packages/SettingsProvider/res/values-az/defaults.xml
diff --git a/packages/SettingsProvider/res/values-az-rAZ/strings.xml b/packages/SettingsProvider/res/values-az/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-az-rAZ/strings.xml
rename to packages/SettingsProvider/res/values-az/strings.xml
diff --git a/packages/SettingsProvider/res/values-be-rBY/defaults.xml b/packages/SettingsProvider/res/values-be/defaults.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-be-rBY/defaults.xml
rename to packages/SettingsProvider/res/values-be/defaults.xml
diff --git a/packages/SettingsProvider/res/values-be-rBY/strings.xml b/packages/SettingsProvider/res/values-be/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-be-rBY/strings.xml
rename to packages/SettingsProvider/res/values-be/strings.xml
diff --git a/packages/SettingsProvider/res/values-bn-rBD/defaults.xml b/packages/SettingsProvider/res/values-bn-rBD/defaults.xml
deleted file mode 100644
index 4a87a12..0000000
--- a/packages/SettingsProvider/res/values-bn-rBD/defaults.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="def_device_name" msgid="6309317409634339402">"%1$s %2$s"</string>
- <string name="def_device_name_simple" msgid="9037785625140748221">"%1$s"</string>
- <string name="def_nfc_payment_component" msgid="5861297439873026958"></string>
-</resources>
diff --git a/packages/SettingsProvider/res/values-be-rBY/defaults.xml b/packages/SettingsProvider/res/values-bn/defaults.xml
similarity index 100%
copy from packages/SettingsProvider/res/values-be-rBY/defaults.xml
copy to packages/SettingsProvider/res/values-bn/defaults.xml
diff --git a/packages/SettingsProvider/res/values-bn-rBD/strings.xml b/packages/SettingsProvider/res/values-bn/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-bn-rBD/strings.xml
rename to packages/SettingsProvider/res/values-bn/strings.xml
diff --git a/packages/SettingsProvider/res/values-bs-rBA/defaults.xml b/packages/SettingsProvider/res/values-bs-rBA/defaults.xml
deleted file mode 100644
index 4a87a12..0000000
--- a/packages/SettingsProvider/res/values-bs-rBA/defaults.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="def_device_name" msgid="6309317409634339402">"%1$s %2$s"</string>
- <string name="def_device_name_simple" msgid="9037785625140748221">"%1$s"</string>
- <string name="def_nfc_payment_component" msgid="5861297439873026958"></string>
-</resources>
diff --git a/packages/SettingsProvider/res/values-be-rBY/defaults.xml b/packages/SettingsProvider/res/values-bs/defaults.xml
similarity index 100%
copy from packages/SettingsProvider/res/values-be-rBY/defaults.xml
copy to packages/SettingsProvider/res/values-bs/defaults.xml
diff --git a/packages/SettingsProvider/res/values-bs-rBA/strings.xml b/packages/SettingsProvider/res/values-bs/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-bs-rBA/strings.xml
rename to packages/SettingsProvider/res/values-bs/strings.xml
diff --git a/packages/SettingsProvider/res/values-et-rEE/defaults.xml b/packages/SettingsProvider/res/values-et/defaults.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-et-rEE/defaults.xml
rename to packages/SettingsProvider/res/values-et/defaults.xml
diff --git a/packages/SettingsProvider/res/values-et-rEE/strings.xml b/packages/SettingsProvider/res/values-et/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-et-rEE/strings.xml
rename to packages/SettingsProvider/res/values-et/strings.xml
diff --git a/packages/SettingsProvider/res/values-eu-rES/defaults.xml b/packages/SettingsProvider/res/values-eu/defaults.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-eu-rES/defaults.xml
rename to packages/SettingsProvider/res/values-eu/defaults.xml
diff --git a/packages/SettingsProvider/res/values-eu-rES/strings.xml b/packages/SettingsProvider/res/values-eu/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-eu-rES/strings.xml
rename to packages/SettingsProvider/res/values-eu/strings.xml
diff --git a/packages/SettingsProvider/res/values-gl-rES/defaults.xml b/packages/SettingsProvider/res/values-gl/defaults.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-gl-rES/defaults.xml
rename to packages/SettingsProvider/res/values-gl/defaults.xml
diff --git a/packages/SettingsProvider/res/values-gl-rES/strings.xml b/packages/SettingsProvider/res/values-gl/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-gl-rES/strings.xml
rename to packages/SettingsProvider/res/values-gl/strings.xml
diff --git a/packages/SettingsProvider/res/values-gu-rIN/defaults.xml b/packages/SettingsProvider/res/values-gu-rIN/defaults.xml
deleted file mode 100644
index 4a87a12..0000000
--- a/packages/SettingsProvider/res/values-gu-rIN/defaults.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="def_device_name" msgid="6309317409634339402">"%1$s %2$s"</string>
- <string name="def_device_name_simple" msgid="9037785625140748221">"%1$s"</string>
- <string name="def_nfc_payment_component" msgid="5861297439873026958"></string>
-</resources>
diff --git a/packages/SettingsProvider/res/values-gl-rES/defaults.xml b/packages/SettingsProvider/res/values-gu/defaults.xml
similarity index 100%
copy from packages/SettingsProvider/res/values-gl-rES/defaults.xml
copy to packages/SettingsProvider/res/values-gu/defaults.xml
diff --git a/packages/SettingsProvider/res/values-gu-rIN/strings.xml b/packages/SettingsProvider/res/values-gu/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-gu-rIN/strings.xml
rename to packages/SettingsProvider/res/values-gu/strings.xml
diff --git a/packages/SettingsProvider/res/values-hy-rAM/defaults.xml b/packages/SettingsProvider/res/values-hy/defaults.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-hy-rAM/defaults.xml
rename to packages/SettingsProvider/res/values-hy/defaults.xml
diff --git a/packages/SettingsProvider/res/values-hy-rAM/strings.xml b/packages/SettingsProvider/res/values-hy/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-hy-rAM/strings.xml
rename to packages/SettingsProvider/res/values-hy/strings.xml
diff --git a/packages/SettingsProvider/res/values-is-rIS/defaults.xml b/packages/SettingsProvider/res/values-is/defaults.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-is-rIS/defaults.xml
rename to packages/SettingsProvider/res/values-is/defaults.xml
diff --git a/packages/SettingsProvider/res/values-is-rIS/strings.xml b/packages/SettingsProvider/res/values-is/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-is-rIS/strings.xml
rename to packages/SettingsProvider/res/values-is/strings.xml
diff --git a/packages/SettingsProvider/res/values-ka-rGE/defaults.xml b/packages/SettingsProvider/res/values-ka/defaults.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-ka-rGE/defaults.xml
rename to packages/SettingsProvider/res/values-ka/defaults.xml
diff --git a/packages/SettingsProvider/res/values-ka-rGE/strings.xml b/packages/SettingsProvider/res/values-ka/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-ka-rGE/strings.xml
rename to packages/SettingsProvider/res/values-ka/strings.xml
diff --git a/packages/SettingsProvider/res/values-kk-rKZ/defaults.xml b/packages/SettingsProvider/res/values-kk-rKZ/defaults.xml
deleted file mode 100644
index 4a87a12..0000000
--- a/packages/SettingsProvider/res/values-kk-rKZ/defaults.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="def_device_name" msgid="6309317409634339402">"%1$s %2$s"</string>
- <string name="def_device_name_simple" msgid="9037785625140748221">"%1$s"</string>
- <string name="def_nfc_payment_component" msgid="5861297439873026958"></string>
-</resources>
diff --git a/packages/SettingsProvider/res/values-ka-rGE/defaults.xml b/packages/SettingsProvider/res/values-kk/defaults.xml
similarity index 100%
copy from packages/SettingsProvider/res/values-ka-rGE/defaults.xml
copy to packages/SettingsProvider/res/values-kk/defaults.xml
diff --git a/packages/SettingsProvider/res/values-kk-rKZ/strings.xml b/packages/SettingsProvider/res/values-kk/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-kk-rKZ/strings.xml
rename to packages/SettingsProvider/res/values-kk/strings.xml
diff --git a/packages/SettingsProvider/res/values-km-rKH/defaults.xml b/packages/SettingsProvider/res/values-km-rKH/defaults.xml
deleted file mode 100644
index 4a87a12..0000000
--- a/packages/SettingsProvider/res/values-km-rKH/defaults.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="def_device_name" msgid="6309317409634339402">"%1$s %2$s"</string>
- <string name="def_device_name_simple" msgid="9037785625140748221">"%1$s"</string>
- <string name="def_nfc_payment_component" msgid="5861297439873026958"></string>
-</resources>
diff --git a/packages/SettingsProvider/res/values-ka-rGE/defaults.xml b/packages/SettingsProvider/res/values-km/defaults.xml
similarity index 100%
copy from packages/SettingsProvider/res/values-ka-rGE/defaults.xml
copy to packages/SettingsProvider/res/values-km/defaults.xml
diff --git a/packages/SettingsProvider/res/values-km-rKH/strings.xml b/packages/SettingsProvider/res/values-km/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-km-rKH/strings.xml
rename to packages/SettingsProvider/res/values-km/strings.xml
diff --git a/packages/SettingsProvider/res/values-kn-rIN/defaults.xml b/packages/SettingsProvider/res/values-kn-rIN/defaults.xml
deleted file mode 100644
index 4a87a12..0000000
--- a/packages/SettingsProvider/res/values-kn-rIN/defaults.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="def_device_name" msgid="6309317409634339402">"%1$s %2$s"</string>
- <string name="def_device_name_simple" msgid="9037785625140748221">"%1$s"</string>
- <string name="def_nfc_payment_component" msgid="5861297439873026958"></string>
-</resources>
diff --git a/packages/SettingsProvider/res/values-ka-rGE/defaults.xml b/packages/SettingsProvider/res/values-kn/defaults.xml
similarity index 100%
copy from packages/SettingsProvider/res/values-ka-rGE/defaults.xml
copy to packages/SettingsProvider/res/values-kn/defaults.xml
diff --git a/packages/SettingsProvider/res/values-kn-rIN/strings.xml b/packages/SettingsProvider/res/values-kn/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-kn-rIN/strings.xml
rename to packages/SettingsProvider/res/values-kn/strings.xml
diff --git a/packages/SettingsProvider/res/values-ky-rKG/defaults.xml b/packages/SettingsProvider/res/values-ky-rKG/defaults.xml
deleted file mode 100644
index 4a87a12..0000000
--- a/packages/SettingsProvider/res/values-ky-rKG/defaults.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="def_device_name" msgid="6309317409634339402">"%1$s %2$s"</string>
- <string name="def_device_name_simple" msgid="9037785625140748221">"%1$s"</string>
- <string name="def_nfc_payment_component" msgid="5861297439873026958"></string>
-</resources>
diff --git a/packages/SettingsProvider/res/values-ka-rGE/defaults.xml b/packages/SettingsProvider/res/values-ky/defaults.xml
similarity index 100%
copy from packages/SettingsProvider/res/values-ka-rGE/defaults.xml
copy to packages/SettingsProvider/res/values-ky/defaults.xml
diff --git a/packages/SettingsProvider/res/values-ky-rKG/strings.xml b/packages/SettingsProvider/res/values-ky/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-ky-rKG/strings.xml
rename to packages/SettingsProvider/res/values-ky/strings.xml
diff --git a/packages/SettingsProvider/res/values-lo-rLA/defaults.xml b/packages/SettingsProvider/res/values-lo/defaults.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-lo-rLA/defaults.xml
rename to packages/SettingsProvider/res/values-lo/defaults.xml
diff --git a/packages/SettingsProvider/res/values-lo-rLA/strings.xml b/packages/SettingsProvider/res/values-lo/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-lo-rLA/strings.xml
rename to packages/SettingsProvider/res/values-lo/strings.xml
diff --git a/packages/SettingsProvider/res/values-mk-rMK/defaults.xml b/packages/SettingsProvider/res/values-mk/defaults.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-mk-rMK/defaults.xml
rename to packages/SettingsProvider/res/values-mk/defaults.xml
diff --git a/packages/SettingsProvider/res/values-mk-rMK/strings.xml b/packages/SettingsProvider/res/values-mk/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-mk-rMK/strings.xml
rename to packages/SettingsProvider/res/values-mk/strings.xml
diff --git a/packages/SettingsProvider/res/values-ml-rIN/defaults.xml b/packages/SettingsProvider/res/values-ml-rIN/defaults.xml
deleted file mode 100644
index 4a87a12..0000000
--- a/packages/SettingsProvider/res/values-ml-rIN/defaults.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="def_device_name" msgid="6309317409634339402">"%1$s %2$s"</string>
- <string name="def_device_name_simple" msgid="9037785625140748221">"%1$s"</string>
- <string name="def_nfc_payment_component" msgid="5861297439873026958"></string>
-</resources>
diff --git a/packages/SettingsProvider/res/values-mk-rMK/defaults.xml b/packages/SettingsProvider/res/values-ml/defaults.xml
similarity index 100%
copy from packages/SettingsProvider/res/values-mk-rMK/defaults.xml
copy to packages/SettingsProvider/res/values-ml/defaults.xml
diff --git a/packages/SettingsProvider/res/values-ml-rIN/strings.xml b/packages/SettingsProvider/res/values-ml/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-ml-rIN/strings.xml
rename to packages/SettingsProvider/res/values-ml/strings.xml
diff --git a/packages/SettingsProvider/res/values-mn-rMN/defaults.xml b/packages/SettingsProvider/res/values-mn-rMN/defaults.xml
deleted file mode 100644
index 4a87a12..0000000
--- a/packages/SettingsProvider/res/values-mn-rMN/defaults.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="def_device_name" msgid="6309317409634339402">"%1$s %2$s"</string>
- <string name="def_device_name_simple" msgid="9037785625140748221">"%1$s"</string>
- <string name="def_nfc_payment_component" msgid="5861297439873026958"></string>
-</resources>
diff --git a/packages/SettingsProvider/res/values-mk-rMK/defaults.xml b/packages/SettingsProvider/res/values-mn/defaults.xml
similarity index 100%
copy from packages/SettingsProvider/res/values-mk-rMK/defaults.xml
copy to packages/SettingsProvider/res/values-mn/defaults.xml
diff --git a/packages/SettingsProvider/res/values-mn-rMN/strings.xml b/packages/SettingsProvider/res/values-mn/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-mn-rMN/strings.xml
rename to packages/SettingsProvider/res/values-mn/strings.xml
diff --git a/packages/SettingsProvider/res/values-mr-rIN/defaults.xml b/packages/SettingsProvider/res/values-mr-rIN/defaults.xml
deleted file mode 100644
index 4a87a12..0000000
--- a/packages/SettingsProvider/res/values-mr-rIN/defaults.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="def_device_name" msgid="6309317409634339402">"%1$s %2$s"</string>
- <string name="def_device_name_simple" msgid="9037785625140748221">"%1$s"</string>
- <string name="def_nfc_payment_component" msgid="5861297439873026958"></string>
-</resources>
diff --git a/packages/SettingsProvider/res/values-mk-rMK/defaults.xml b/packages/SettingsProvider/res/values-mr/defaults.xml
similarity index 100%
copy from packages/SettingsProvider/res/values-mk-rMK/defaults.xml
copy to packages/SettingsProvider/res/values-mr/defaults.xml
diff --git a/packages/SettingsProvider/res/values-mr-rIN/strings.xml b/packages/SettingsProvider/res/values-mr/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-mr-rIN/strings.xml
rename to packages/SettingsProvider/res/values-mr/strings.xml
diff --git a/packages/SettingsProvider/res/values-ms-rMY/defaults.xml b/packages/SettingsProvider/res/values-ms-rMY/defaults.xml
deleted file mode 100644
index 4a87a12..0000000
--- a/packages/SettingsProvider/res/values-ms-rMY/defaults.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="def_device_name" msgid="6309317409634339402">"%1$s %2$s"</string>
- <string name="def_device_name_simple" msgid="9037785625140748221">"%1$s"</string>
- <string name="def_nfc_payment_component" msgid="5861297439873026958"></string>
-</resources>
diff --git a/packages/SettingsProvider/res/values-mk-rMK/defaults.xml b/packages/SettingsProvider/res/values-ms/defaults.xml
similarity index 100%
copy from packages/SettingsProvider/res/values-mk-rMK/defaults.xml
copy to packages/SettingsProvider/res/values-ms/defaults.xml
diff --git a/packages/SettingsProvider/res/values-ms-rMY/strings.xml b/packages/SettingsProvider/res/values-ms/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-ms-rMY/strings.xml
rename to packages/SettingsProvider/res/values-ms/strings.xml
diff --git a/packages/SettingsProvider/res/values-my-rMM/defaults.xml b/packages/SettingsProvider/res/values-my-rMM/defaults.xml
deleted file mode 100644
index 4a87a12..0000000
--- a/packages/SettingsProvider/res/values-my-rMM/defaults.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="def_device_name" msgid="6309317409634339402">"%1$s %2$s"</string>
- <string name="def_device_name_simple" msgid="9037785625140748221">"%1$s"</string>
- <string name="def_nfc_payment_component" msgid="5861297439873026958"></string>
-</resources>
diff --git a/packages/SettingsProvider/res/values-mk-rMK/defaults.xml b/packages/SettingsProvider/res/values-my/defaults.xml
similarity index 100%
copy from packages/SettingsProvider/res/values-mk-rMK/defaults.xml
copy to packages/SettingsProvider/res/values-my/defaults.xml
diff --git a/packages/SettingsProvider/res/values-my-rMM/strings.xml b/packages/SettingsProvider/res/values-my/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-my-rMM/strings.xml
rename to packages/SettingsProvider/res/values-my/strings.xml
diff --git a/packages/SettingsProvider/res/values-ne-rNP/defaults.xml b/packages/SettingsProvider/res/values-ne/defaults.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-ne-rNP/defaults.xml
rename to packages/SettingsProvider/res/values-ne/defaults.xml
diff --git a/packages/SettingsProvider/res/values-ne-rNP/strings.xml b/packages/SettingsProvider/res/values-ne/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-ne-rNP/strings.xml
rename to packages/SettingsProvider/res/values-ne/strings.xml
diff --git a/packages/SettingsProvider/res/values-pa-rIN/defaults.xml b/packages/SettingsProvider/res/values-pa/defaults.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-pa-rIN/defaults.xml
rename to packages/SettingsProvider/res/values-pa/defaults.xml
diff --git a/packages/SettingsProvider/res/values-pa-rIN/strings.xml b/packages/SettingsProvider/res/values-pa/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-pa-rIN/strings.xml
rename to packages/SettingsProvider/res/values-pa/strings.xml
diff --git a/packages/SettingsProvider/res/values-si-rLK/defaults.xml b/packages/SettingsProvider/res/values-si/defaults.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-si-rLK/defaults.xml
rename to packages/SettingsProvider/res/values-si/defaults.xml
diff --git a/packages/SettingsProvider/res/values-si-rLK/strings.xml b/packages/SettingsProvider/res/values-si/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-si-rLK/strings.xml
rename to packages/SettingsProvider/res/values-si/strings.xml
diff --git a/packages/SettingsProvider/res/values-sq-rAL/defaults.xml b/packages/SettingsProvider/res/values-sq-rAL/defaults.xml
deleted file mode 100644
index 4a87a12..0000000
--- a/packages/SettingsProvider/res/values-sq-rAL/defaults.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="def_device_name" msgid="6309317409634339402">"%1$s %2$s"</string>
- <string name="def_device_name_simple" msgid="9037785625140748221">"%1$s"</string>
- <string name="def_nfc_payment_component" msgid="5861297439873026958"></string>
-</resources>
diff --git a/packages/SettingsProvider/res/values-si-rLK/defaults.xml b/packages/SettingsProvider/res/values-sq/defaults.xml
similarity index 100%
copy from packages/SettingsProvider/res/values-si-rLK/defaults.xml
copy to packages/SettingsProvider/res/values-sq/defaults.xml
diff --git a/packages/SettingsProvider/res/values-sq-rAL/strings.xml b/packages/SettingsProvider/res/values-sq/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-sq-rAL/strings.xml
rename to packages/SettingsProvider/res/values-sq/strings.xml
diff --git a/packages/SettingsProvider/res/values-ta-rIN/defaults.xml b/packages/SettingsProvider/res/values-ta/defaults.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-ta-rIN/defaults.xml
rename to packages/SettingsProvider/res/values-ta/defaults.xml
diff --git a/packages/SettingsProvider/res/values-ta-rIN/strings.xml b/packages/SettingsProvider/res/values-ta/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-ta-rIN/strings.xml
rename to packages/SettingsProvider/res/values-ta/strings.xml
diff --git a/packages/SettingsProvider/res/values-te-rIN/defaults.xml b/packages/SettingsProvider/res/values-te-rIN/defaults.xml
deleted file mode 100644
index 4a87a12..0000000
--- a/packages/SettingsProvider/res/values-te-rIN/defaults.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="def_device_name" msgid="6309317409634339402">"%1$s %2$s"</string>
- <string name="def_device_name_simple" msgid="9037785625140748221">"%1$s"</string>
- <string name="def_nfc_payment_component" msgid="5861297439873026958"></string>
-</resources>
diff --git a/packages/SettingsProvider/res/values-ta-rIN/defaults.xml b/packages/SettingsProvider/res/values-te/defaults.xml
similarity index 100%
copy from packages/SettingsProvider/res/values-ta-rIN/defaults.xml
copy to packages/SettingsProvider/res/values-te/defaults.xml
diff --git a/packages/SettingsProvider/res/values-te-rIN/strings.xml b/packages/SettingsProvider/res/values-te/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-te-rIN/strings.xml
rename to packages/SettingsProvider/res/values-te/strings.xml
diff --git a/packages/SettingsProvider/res/values-ur-rPK/defaults.xml b/packages/SettingsProvider/res/values-ur/defaults.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-ur-rPK/defaults.xml
rename to packages/SettingsProvider/res/values-ur/defaults.xml
diff --git a/packages/SettingsProvider/res/values-ur-rPK/strings.xml b/packages/SettingsProvider/res/values-ur/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-ur-rPK/strings.xml
rename to packages/SettingsProvider/res/values-ur/strings.xml
diff --git a/packages/SettingsProvider/res/values-uz-rUZ/defaults.xml b/packages/SettingsProvider/res/values-uz-rUZ/defaults.xml
deleted file mode 100644
index 4a87a12..0000000
--- a/packages/SettingsProvider/res/values-uz-rUZ/defaults.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="def_device_name" msgid="6309317409634339402">"%1$s %2$s"</string>
- <string name="def_device_name_simple" msgid="9037785625140748221">"%1$s"</string>
- <string name="def_nfc_payment_component" msgid="5861297439873026958"></string>
-</resources>
diff --git a/packages/SettingsProvider/res/values-ur-rPK/defaults.xml b/packages/SettingsProvider/res/values-uz/defaults.xml
similarity index 100%
copy from packages/SettingsProvider/res/values-ur-rPK/defaults.xml
copy to packages/SettingsProvider/res/values-uz/defaults.xml
diff --git a/packages/SettingsProvider/res/values-uz-rUZ/strings.xml b/packages/SettingsProvider/res/values-uz/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-uz-rUZ/strings.xml
rename to packages/SettingsProvider/res/values-uz/strings.xml
diff --git a/packages/Shell/res/values-az-rAZ/strings.xml b/packages/Shell/res/values-az/strings.xml
similarity index 100%
rename from packages/Shell/res/values-az-rAZ/strings.xml
rename to packages/Shell/res/values-az/strings.xml
diff --git a/packages/Shell/res/values-be-rBY/strings.xml b/packages/Shell/res/values-be/strings.xml
similarity index 100%
rename from packages/Shell/res/values-be-rBY/strings.xml
rename to packages/Shell/res/values-be/strings.xml
diff --git a/packages/Shell/res/values-bn-rBD/strings.xml b/packages/Shell/res/values-bn/strings.xml
similarity index 100%
rename from packages/Shell/res/values-bn-rBD/strings.xml
rename to packages/Shell/res/values-bn/strings.xml
diff --git a/packages/Shell/res/values-bs-rBA/strings.xml b/packages/Shell/res/values-bs/strings.xml
similarity index 100%
rename from packages/Shell/res/values-bs-rBA/strings.xml
rename to packages/Shell/res/values-bs/strings.xml
diff --git a/packages/Shell/res/values-da/strings.xml b/packages/Shell/res/values-da/strings.xml
index 154193e..3a1fe57 100644
--- a/packages/Shell/res/values-da/strings.xml
+++ b/packages/Shell/res/values-da/strings.xml
@@ -23,8 +23,8 @@
<string name="bugreport_updating_wait" msgid="3322151947853929470">"Vent et øjeblik…"</string>
<string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"Fejlrapporten vises på telefonen om et øjeblik"</string>
<string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"Tryk for at dele din fejlrapport"</string>
- <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"Tryk for at dele din fejlrapport uden et skærmbillede, eller vent på, at skærmbilledet fuldføres"</string>
- <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"Tryk for at dele din fejlrapport uden et skærmbillede, eller vent på, at skærmbilledet fuldføres"</string>
+ <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"Tryk for at dele din fejlrapport uden et screenshot, eller vent på, at screenshott fuldføres"</string>
+ <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"Tryk for at dele din fejlrapport uden et screenshot, eller vent på, at screenshott fuldføres"</string>
<string name="bugreport_confirm" msgid="5917407234515812495">"Fejlrapporter indeholder data fra systemets forskellige logfiler, som kan være data, du mener er følsomme, f.eks. appforbrug og placeringsdata. Del kun fejlrapporter med personer og apps, du har tillid til."</string>
<string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"Vis ikke igen"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Fejlrapporter"</string>
@@ -32,9 +32,9 @@
<string name="bugreport_add_details_to_zip_failed" msgid="1302931926486712371">"Oplysningerne i fejlrapporten kunne ikke føjes til zip-filen"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"ikke navngivet"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Oplysninger"</string>
- <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Skærmbillede"</string>
- <string name="bugreport_screenshot_taken" msgid="5684211273096253120">"Der blev taget et skærmbillede."</string>
- <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Der kunne ikke tages et skærmbillede."</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Screenshot"</string>
+ <string name="bugreport_screenshot_taken" msgid="5684211273096253120">"Der blev taget et screenshot."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Der kunne ikke tages et screenshot."</string>
<string name="bugreport_info_dialog_title" msgid="1355948594292983332">"Oplysninger om fejlrapporten <xliff:g id="ID">#%d</xliff:g>"</string>
<string name="bugreport_info_name" msgid="4414036021935139527">"Filnavn"</string>
<string name="bugreport_info_title" msgid="2306030793918239804">"Fejlrapportens titel"</string>
diff --git a/packages/Shell/res/values-et-rEE/strings.xml b/packages/Shell/res/values-et/strings.xml
similarity index 100%
rename from packages/Shell/res/values-et-rEE/strings.xml
rename to packages/Shell/res/values-et/strings.xml
diff --git a/packages/Shell/res/values-eu-rES/strings.xml b/packages/Shell/res/values-eu/strings.xml
similarity index 100%
rename from packages/Shell/res/values-eu-rES/strings.xml
rename to packages/Shell/res/values-eu/strings.xml
diff --git a/packages/Shell/res/values-gl-rES/strings.xml b/packages/Shell/res/values-gl/strings.xml
similarity index 100%
rename from packages/Shell/res/values-gl-rES/strings.xml
rename to packages/Shell/res/values-gl/strings.xml
diff --git a/packages/Shell/res/values-gu-rIN/strings.xml b/packages/Shell/res/values-gu/strings.xml
similarity index 100%
rename from packages/Shell/res/values-gu-rIN/strings.xml
rename to packages/Shell/res/values-gu/strings.xml
diff --git a/packages/Shell/res/values-hy-rAM/strings.xml b/packages/Shell/res/values-hy/strings.xml
similarity index 100%
rename from packages/Shell/res/values-hy-rAM/strings.xml
rename to packages/Shell/res/values-hy/strings.xml
diff --git a/packages/Shell/res/values-is-rIS/strings.xml b/packages/Shell/res/values-is/strings.xml
similarity index 100%
rename from packages/Shell/res/values-is-rIS/strings.xml
rename to packages/Shell/res/values-is/strings.xml
diff --git a/packages/Shell/res/values-ka-rGE/strings.xml b/packages/Shell/res/values-ka/strings.xml
similarity index 100%
rename from packages/Shell/res/values-ka-rGE/strings.xml
rename to packages/Shell/res/values-ka/strings.xml
diff --git a/packages/Shell/res/values-kk-rKZ/strings.xml b/packages/Shell/res/values-kk/strings.xml
similarity index 100%
rename from packages/Shell/res/values-kk-rKZ/strings.xml
rename to packages/Shell/res/values-kk/strings.xml
diff --git a/packages/Shell/res/values-km-rKH/strings.xml b/packages/Shell/res/values-km/strings.xml
similarity index 100%
rename from packages/Shell/res/values-km-rKH/strings.xml
rename to packages/Shell/res/values-km/strings.xml
diff --git a/packages/Shell/res/values-kn-rIN/strings.xml b/packages/Shell/res/values-kn/strings.xml
similarity index 100%
rename from packages/Shell/res/values-kn-rIN/strings.xml
rename to packages/Shell/res/values-kn/strings.xml
diff --git a/packages/Shell/res/values-ky-rKG/strings.xml b/packages/Shell/res/values-ky/strings.xml
similarity index 100%
rename from packages/Shell/res/values-ky-rKG/strings.xml
rename to packages/Shell/res/values-ky/strings.xml
diff --git a/packages/Shell/res/values-lo-rLA/strings.xml b/packages/Shell/res/values-lo/strings.xml
similarity index 100%
rename from packages/Shell/res/values-lo-rLA/strings.xml
rename to packages/Shell/res/values-lo/strings.xml
diff --git a/packages/Shell/res/values-mk-rMK/strings.xml b/packages/Shell/res/values-mk/strings.xml
similarity index 100%
rename from packages/Shell/res/values-mk-rMK/strings.xml
rename to packages/Shell/res/values-mk/strings.xml
diff --git a/packages/Shell/res/values-ml-rIN/strings.xml b/packages/Shell/res/values-ml/strings.xml
similarity index 100%
rename from packages/Shell/res/values-ml-rIN/strings.xml
rename to packages/Shell/res/values-ml/strings.xml
diff --git a/packages/Shell/res/values-mn-rMN/strings.xml b/packages/Shell/res/values-mn/strings.xml
similarity index 100%
rename from packages/Shell/res/values-mn-rMN/strings.xml
rename to packages/Shell/res/values-mn/strings.xml
diff --git a/packages/Shell/res/values-mr-rIN/strings.xml b/packages/Shell/res/values-mr/strings.xml
similarity index 100%
rename from packages/Shell/res/values-mr-rIN/strings.xml
rename to packages/Shell/res/values-mr/strings.xml
diff --git a/packages/Shell/res/values-ms-rMY/strings.xml b/packages/Shell/res/values-ms/strings.xml
similarity index 100%
rename from packages/Shell/res/values-ms-rMY/strings.xml
rename to packages/Shell/res/values-ms/strings.xml
diff --git a/packages/Shell/res/values-my-rMM/strings.xml b/packages/Shell/res/values-my/strings.xml
similarity index 100%
rename from packages/Shell/res/values-my-rMM/strings.xml
rename to packages/Shell/res/values-my/strings.xml
diff --git a/packages/Shell/res/values-ne-rNP/strings.xml b/packages/Shell/res/values-ne/strings.xml
similarity index 100%
rename from packages/Shell/res/values-ne-rNP/strings.xml
rename to packages/Shell/res/values-ne/strings.xml
diff --git a/packages/Shell/res/values-pa-rIN/strings.xml b/packages/Shell/res/values-pa/strings.xml
similarity index 100%
rename from packages/Shell/res/values-pa-rIN/strings.xml
rename to packages/Shell/res/values-pa/strings.xml
diff --git a/packages/Shell/res/values-si-rLK/strings.xml b/packages/Shell/res/values-si/strings.xml
similarity index 100%
rename from packages/Shell/res/values-si-rLK/strings.xml
rename to packages/Shell/res/values-si/strings.xml
diff --git a/packages/Shell/res/values-sq-rAL/strings.xml b/packages/Shell/res/values-sq/strings.xml
similarity index 100%
rename from packages/Shell/res/values-sq-rAL/strings.xml
rename to packages/Shell/res/values-sq/strings.xml
diff --git a/packages/Shell/res/values-ta-rIN/strings.xml b/packages/Shell/res/values-ta/strings.xml
similarity index 100%
rename from packages/Shell/res/values-ta-rIN/strings.xml
rename to packages/Shell/res/values-ta/strings.xml
diff --git a/packages/Shell/res/values-te-rIN/strings.xml b/packages/Shell/res/values-te/strings.xml
similarity index 100%
rename from packages/Shell/res/values-te-rIN/strings.xml
rename to packages/Shell/res/values-te/strings.xml
diff --git a/packages/Shell/res/values-ur-rPK/strings.xml b/packages/Shell/res/values-ur/strings.xml
similarity index 100%
rename from packages/Shell/res/values-ur-rPK/strings.xml
rename to packages/Shell/res/values-ur/strings.xml
diff --git a/packages/Shell/res/values-uz-rUZ/strings.xml b/packages/Shell/res/values-uz/strings.xml
similarity index 100%
rename from packages/Shell/res/values-uz-rUZ/strings.xml
rename to packages/Shell/res/values-uz/strings.xml
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index 5574753..ff76c56 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -221,6 +221,15 @@
</intent-filter>
</receiver>
+ <receiver android:name=".SysuiRestartReceiver"
+ android:exported="false">
+ <intent-filter>
+ <action android:name="com.android.systemui.action.RESTART" />
+
+ <data android:scheme="package" />
+ </intent-filter>
+ </receiver>
+
<service android:name=".ImageWallpaper"
android:permission="android.permission.BIND_WALLPAPER"
android:exported="true" />
@@ -483,6 +492,21 @@
android:exported="true"
android:enabled="@bool/config_enableKeyguardService" />
+ <activity android:name=".keyguard.WorkLockActivity"
+ android:label="@string/accessibility_desc_work_lock"
+ android:permission="android.permission.MANAGE_USERS"
+ android:exported="false"
+ android:launchMode="singleTop"
+ android:excludeFromRecents="true"
+ android:stateNotNeeded="true"
+ android:resumeWhilePausing="true"
+ android:theme="@android:style/Theme.Black.NoTitleBar">
+ <intent-filter>
+ <action android:name="android.app.action.CONFIRM_DEVICE_CREDENTIAL_WITH_USER" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
+
<activity android:name=".Somnambulator"
android:label="@string/start_dreams"
android:icon="@mipmap/ic_launcher_dreams"
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginInstanceManager.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginInstanceManager.java
index eab4722..7b8eae2 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginInstanceManager.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginInstanceManager.java
@@ -39,6 +39,7 @@
import android.view.LayoutInflater;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import java.util.ArrayList;
import java.util.List;
@@ -86,6 +87,21 @@
isDebuggable = debuggable;
}
+ public PluginInfo<T> getPlugin() {
+ if (Looper.myLooper() != Looper.getMainLooper()) {
+ throw new RuntimeException("Must be called from UI thread");
+ }
+ mPluginHandler.handleQueryPlugins(null /* All packages */);
+ if (mPluginHandler.mPlugins.size() > 0) {
+ mMainHandler.removeMessages(MainHandler.PLUGIN_CONNECTED);
+ PluginInfo<T> info = mPluginHandler.mPlugins.get(0);
+ PluginPrefs.setHasPlugins(mContext);
+ info.mPlugin.onCreate(mContext, info.mPluginContext);
+ return info;
+ }
+ return null;
+ }
+
public void loadAll() {
if (DEBUG) Log.d(TAG, "startListening");
mPluginHandler.sendEmptyMessage(PluginHandler.QUERY_ALL);
@@ -283,8 +299,6 @@
Class<?> pluginClass = Class.forName(cls, true, classLoader);
T plugin = (T) pluginClass.newInstance();
if (plugin.getVersion() != mVersion) {
- final int id = mContext.getResources().getIdentifier("notification_plugin",
- "id", mContext.getPackageName());
final int icon = mContext.getResources().getIdentifier("tuner", "drawable",
mContext.getPackageName());
final int color = Resources.getSystem().getIdentifier(
@@ -320,7 +334,8 @@
PendingIntent pi = PendingIntent.getBroadcast(mContext, 0, i, 0);
nb.addAction(new Action.Builder(null, "Disable plugin", pi).build());
mContext.getSystemService(NotificationManager.class)
- .notifyAsUser(cls, id, nb.build(), UserHandle.ALL);
+ .notifyAsUser(cls, SystemMessage.NOTE_PLUGIN, nb.build(),
+ UserHandle.ALL);
// TODO: Warn user.
Log.w(TAG, "Plugin has invalid interface version " + plugin.getVersion()
+ ", expected " + mVersion);
@@ -366,11 +381,11 @@
}
}
- private static class PluginInfo<T> {
+ static class PluginInfo<T> {
private final Context mPluginContext;
- private T mPlugin;
private String mClass;
- private String mPackage;
+ T mPlugin;
+ String mPackage;
public PluginInfo(String pkg, String cls, T plugin, Context pluginContext) {
mPlugin = plugin;
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginManager.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginManager.java
index c3de092..4714547 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginManager.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginManager.java
@@ -14,7 +14,10 @@
package com.android.systemui.plugins;
+import android.app.Notification;
+import android.app.Notification.Action;
import android.app.NotificationManager;
+import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -23,15 +26,20 @@
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Resources;
import android.net.Uri;
import android.os.Build;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.SystemProperties;
+import android.os.UserHandle;
import android.util.ArrayMap;
+import android.util.ArraySet;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.systemui.plugins.PluginInstanceManager.PluginContextWrapper;
+import com.android.systemui.plugins.PluginInstanceManager.PluginInfo;
import dalvik.system.PathClassLoader;
@@ -53,11 +61,14 @@
private final ArrayMap<PluginListener<?>, PluginInstanceManager> mPluginMap
= new ArrayMap<>();
private final Map<String, ClassLoader> mClassLoaders = new ArrayMap<>();
+ private final ArraySet<String> mOneShotPackages = new ArraySet<>();
private final Context mContext;
private final PluginInstanceManagerFactory mFactory;
private final boolean isDebuggable;
private final PluginPrefs mPluginPrefs;
private ClassLoaderFilter mParentClassLoader;
+ private boolean mListening;
+ private boolean mHasOneShot;
private PluginManager(Context context) {
this(context, new PluginInstanceManagerFactory(),
@@ -79,6 +90,27 @@
Thread.setDefaultUncaughtExceptionHandler(uncaughtExceptionHandler);
}
+ public <T extends Plugin> T getOneShotPlugin(String action, int version) {
+ if (!isDebuggable) {
+ // Never ever ever allow these on production builds, they are only for prototyping.
+ return null;
+ }
+ if (Looper.myLooper() != Looper.getMainLooper()) {
+ throw new RuntimeException("Must be called from UI thread");
+ }
+ PluginInstanceManager<T> p = mFactory.createPluginInstanceManager(mContext, action, null,
+ false, mBackgroundThread.getLooper(), version, this);
+ mPluginPrefs.addAction(action);
+ PluginInfo<T> info = p.getPlugin();
+ if (info != null) {
+ mOneShotPackages.add(info.mPackage);
+ mHasOneShot = true;
+ startListening();
+ return info.mPlugin;
+ }
+ return null;
+ }
+
public <T extends Plugin> void addPluginListener(String action, PluginListener<T> listener,
int version) {
addPluginListener(action, listener, version, false);
@@ -95,9 +127,7 @@
allowMultiple, mBackgroundThread.getLooper(), version, this);
p.loadAll();
mPluginMap.put(listener, p);
- if (mPluginMap.size() == 1) {
- startListening();
- }
+ startListening();
}
public void removePluginListener(PluginListener<?> listener) {
@@ -107,12 +137,12 @@
}
if (!mPluginMap.containsKey(listener)) return;
mPluginMap.remove(listener).destroy();
- if (mPluginMap.size() == 0) {
- stopListening();
- }
+ stopListening();
}
private void startListening() {
+ if (mListening) return;
+ mListening = true;
IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
@@ -125,6 +155,9 @@
}
private void stopListening() {
+ // Never stop listening if a one-shot is present.
+ if (!mListening || mHasOneShot) return;
+ mListening = false;
mContext.unregisterReceiver(this);
}
@@ -141,13 +174,39 @@
mContext.getPackageManager().setComponentEnabledSetting(component,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
- int id = mContext.getResources().getIdentifier("notification_plugin", "id",
- mContext.getPackageName());
mContext.getSystemService(NotificationManager.class).cancel(component.getClassName(),
- id);
+ SystemMessage.NOTE_PLUGIN);
} else {
Uri data = intent.getData();
String pkg = data.getEncodedSchemeSpecificPart();
+ if (mOneShotPackages.contains(pkg)) {
+ int icon = mContext.getResources().getIdentifier("tuner", "drawable",
+ mContext.getPackageName());
+ int color = Resources.getSystem().getIdentifier(
+ "system_notification_accent_color", "color", "android");
+ String label = pkg;
+ try {
+ PackageManager pm = mContext.getPackageManager();
+ label = pm.getApplicationInfo(pkg, 0).loadLabel(pm).toString();
+ } catch (NameNotFoundException e) {
+ }
+ // Localization not required as this will never ever appear in a user build.
+ final Notification.Builder nb = new Notification.Builder(mContext)
+ .setSmallIcon(icon)
+ .setWhen(0)
+ .setShowWhen(false)
+ .setPriority(Notification.PRIORITY_MAX)
+ .setVisibility(Notification.VISIBILITY_PUBLIC)
+ .setColor(mContext.getColor(color))
+ .setContentTitle("Plugin \"" + label + "\" has updated")
+ .setContentText("Restart SysUI for changes to take effect.");
+ Intent i = new Intent("com.android.systemui.action.RESTART").setData(
+ Uri.parse("package://" + pkg));
+ PendingIntent pi = PendingIntent.getBroadcast(mContext, 0, i, 0);
+ nb.addAction(new Action.Builder(null, "Restart SysUI", pi).build());
+ mContext.getSystemService(NotificationManager.class).notifyAsUser(pkg,
+ SystemMessage.NOTE_PLUGIN, nb.build(), UserHandle.ALL);
+ }
clearClassLoader(pkg);
if (!Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())) {
for (PluginInstanceManager manager : mPluginMap.values()) {
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw900dp-hdpi/ic_sysbar_back_dark.png b/packages/SystemUI/res/drawable-ldrtl-sw900dp-hdpi/ic_sysbar_back_dark.png
new file mode 100644
index 0000000..c3aea46
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw900dp-hdpi/ic_sysbar_back_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw900dp-mdpi/ic_sysbar_back_dark.png b/packages/SystemUI/res/drawable-ldrtl-sw900dp-mdpi/ic_sysbar_back_dark.png
new file mode 100644
index 0000000..470b3e2
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw900dp-mdpi/ic_sysbar_back_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw900dp-xhdpi/ic_sysbar_back.png b/packages/SystemUI/res/drawable-ldrtl-sw900dp-xhdpi/ic_sysbar_back.png
index 94cb032..965d2f5 100644
--- a/packages/SystemUI/res/drawable-ldrtl-sw900dp-xhdpi/ic_sysbar_back.png
+++ b/packages/SystemUI/res/drawable-ldrtl-sw900dp-xhdpi/ic_sysbar_back.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw900dp-xhdpi/ic_sysbar_back_dark.png b/packages/SystemUI/res/drawable-ldrtl-sw900dp-xhdpi/ic_sysbar_back_dark.png
new file mode 100644
index 0000000..e7137c6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw900dp-xhdpi/ic_sysbar_back_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw900dp-xxhdpi/ic_sysbar_back_dark.png b/packages/SystemUI/res/drawable-ldrtl-sw900dp-xxhdpi/ic_sysbar_back_dark.png
new file mode 100644
index 0000000..03dec15
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw900dp-xxhdpi/ic_sysbar_back_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw900dp-xxxhdpi/ic_sysbar_back_dark.png b/packages/SystemUI/res/drawable-ldrtl-sw900dp-xxxhdpi/ic_sysbar_back_dark.png
new file mode 100644
index 0000000..e1ca853
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw900dp-xxxhdpi/ic_sysbar_back_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-hdpi/ic_sysbar_back_dark.png b/packages/SystemUI/res/drawable-sw900dp-hdpi/ic_sysbar_back_dark.png
new file mode 100644
index 0000000..0520c49
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-hdpi/ic_sysbar_back_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-hdpi/ic_sysbar_back_ime_dark.png b/packages/SystemUI/res/drawable-sw900dp-hdpi/ic_sysbar_back_ime_dark.png
new file mode 100644
index 0000000..3dc2b88
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-hdpi/ic_sysbar_back_ime_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-hdpi/ic_sysbar_docked_dark.png b/packages/SystemUI/res/drawable-sw900dp-hdpi/ic_sysbar_docked_dark.png
new file mode 100644
index 0000000..2ba5d5b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-hdpi/ic_sysbar_docked_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-hdpi/ic_sysbar_home_dark.png b/packages/SystemUI/res/drawable-sw900dp-hdpi/ic_sysbar_home_dark.png
new file mode 100644
index 0000000..62dc2d9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-hdpi/ic_sysbar_home_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-hdpi/ic_sysbar_menu_dark.png b/packages/SystemUI/res/drawable-sw900dp-hdpi/ic_sysbar_menu_dark.png
new file mode 100644
index 0000000..e718b7a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-hdpi/ic_sysbar_menu_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-hdpi/ic_sysbar_recent_dark.png b/packages/SystemUI/res/drawable-sw900dp-hdpi/ic_sysbar_recent_dark.png
new file mode 100644
index 0000000..469800a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-hdpi/ic_sysbar_recent_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-land-hdpi/ic_sysbar_docked_dark.png b/packages/SystemUI/res/drawable-sw900dp-land-hdpi/ic_sysbar_docked_dark.png
new file mode 100644
index 0000000..42863c6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-land-hdpi/ic_sysbar_docked_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-land-mdpi/ic_sysbar_docked_dark.png b/packages/SystemUI/res/drawable-sw900dp-land-mdpi/ic_sysbar_docked_dark.png
new file mode 100644
index 0000000..d9ec9d5
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-land-mdpi/ic_sysbar_docked_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-land-xhdpi/ic_sysbar_docked.png b/packages/SystemUI/res/drawable-sw900dp-land-xhdpi/ic_sysbar_docked.png
new file mode 100644
index 0000000..ea7ac93
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-land-xhdpi/ic_sysbar_docked.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-land-xhdpi/ic_sysbar_docked_dark.png b/packages/SystemUI/res/drawable-sw900dp-land-xhdpi/ic_sysbar_docked_dark.png
new file mode 100644
index 0000000..8ee4e43
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-land-xhdpi/ic_sysbar_docked_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-land-xxhdpi/ic_sysbar_docked_dark.png b/packages/SystemUI/res/drawable-sw900dp-land-xxhdpi/ic_sysbar_docked_dark.png
new file mode 100644
index 0000000..dfa8a97
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-land-xxhdpi/ic_sysbar_docked_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-land-xxxhdpi/ic_sysbar_docked_dark.png b/packages/SystemUI/res/drawable-sw900dp-land-xxxhdpi/ic_sysbar_docked_dark.png
new file mode 100644
index 0000000..d23abc7
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-land-xxxhdpi/ic_sysbar_docked_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-mdpi/ic_sysbar_back_dark.png b/packages/SystemUI/res/drawable-sw900dp-mdpi/ic_sysbar_back_dark.png
new file mode 100644
index 0000000..8e56e9c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-mdpi/ic_sysbar_back_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-mdpi/ic_sysbar_back_ime_dark.png b/packages/SystemUI/res/drawable-sw900dp-mdpi/ic_sysbar_back_ime_dark.png
new file mode 100644
index 0000000..28a1465
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-mdpi/ic_sysbar_back_ime_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-mdpi/ic_sysbar_docked_dark.png b/packages/SystemUI/res/drawable-sw900dp-mdpi/ic_sysbar_docked_dark.png
new file mode 100644
index 0000000..0fc9677
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-mdpi/ic_sysbar_docked_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-mdpi/ic_sysbar_home_dark.png b/packages/SystemUI/res/drawable-sw900dp-mdpi/ic_sysbar_home_dark.png
new file mode 100644
index 0000000..7b81eee
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-mdpi/ic_sysbar_home_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-mdpi/ic_sysbar_menu_dark.png b/packages/SystemUI/res/drawable-sw900dp-mdpi/ic_sysbar_menu_dark.png
new file mode 100644
index 0000000..a6483452
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-mdpi/ic_sysbar_menu_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-mdpi/ic_sysbar_recent_dark.png b/packages/SystemUI/res/drawable-sw900dp-mdpi/ic_sysbar_recent_dark.png
new file mode 100644
index 0000000..7f74521
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-mdpi/ic_sysbar_recent_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_back.png b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_back.png
index fbdc93c..3b831a3 100644
--- a/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_back.png
+++ b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_back.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_back_dark.png b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_back_dark.png
new file mode 100644
index 0000000..8c99455
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_back_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_back_ime.png b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_back_ime.png
index 419518c..3c37782 100644
--- a/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_back_ime.png
+++ b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_back_ime.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_docked.png b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_docked.png
new file mode 100644
index 0000000..b2baa09
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_docked.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_docked_dark.png b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_docked_dark.png
new file mode 100644
index 0000000..b78dc9c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_docked_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_home.png b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_home.png
index a2406b1..37590a5 100644
--- a/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_home.png
+++ b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_home.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_home_dark.png b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_home_dark.png
new file mode 100644
index 0000000..3a208aa
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_home_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_menu_dark.png b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_menu_dark.png
new file mode 100644
index 0000000..625ba45
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_menu_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_recent.png b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_recent.png
index c449449..7ad2a29 100644
--- a/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_recent.png
+++ b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_recent.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_recent_dark.png b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_recent_dark.png
new file mode 100644
index 0000000..604397e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-xhdpi/ic_sysbar_recent_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xxhdpi/ic_sysbar_back_dark.png b/packages/SystemUI/res/drawable-sw900dp-xxhdpi/ic_sysbar_back_dark.png
new file mode 100644
index 0000000..274e5df
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-xxhdpi/ic_sysbar_back_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xxhdpi/ic_sysbar_docked_dark.png b/packages/SystemUI/res/drawable-sw900dp-xxhdpi/ic_sysbar_docked_dark.png
new file mode 100644
index 0000000..ac16895
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-xxhdpi/ic_sysbar_docked_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xxhdpi/ic_sysbar_home_dark.png b/packages/SystemUI/res/drawable-sw900dp-xxhdpi/ic_sysbar_home_dark.png
new file mode 100644
index 0000000..e69a037
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-xxhdpi/ic_sysbar_home_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xxhdpi/ic_sysbar_ime_dark.png b/packages/SystemUI/res/drawable-sw900dp-xxhdpi/ic_sysbar_ime_dark.png
new file mode 100644
index 0000000..65a4354
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-xxhdpi/ic_sysbar_ime_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xxhdpi/ic_sysbar_menu_dark.png b/packages/SystemUI/res/drawable-sw900dp-xxhdpi/ic_sysbar_menu_dark.png
new file mode 100644
index 0000000..8bddcd9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-xxhdpi/ic_sysbar_menu_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xxhdpi/ic_sysbar_recent_dark.png b/packages/SystemUI/res/drawable-sw900dp-xxhdpi/ic_sysbar_recent_dark.png
new file mode 100644
index 0000000..38c5959
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-xxhdpi/ic_sysbar_recent_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xxxhdpi/ic_sysbar_back_dark.png b/packages/SystemUI/res/drawable-sw900dp-xxxhdpi/ic_sysbar_back_dark.png
new file mode 100644
index 0000000..c6d7c98
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-xxxhdpi/ic_sysbar_back_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xxxhdpi/ic_sysbar_back_ime_dark.png b/packages/SystemUI/res/drawable-sw900dp-xxxhdpi/ic_sysbar_back_ime_dark.png
new file mode 100644
index 0000000..06c52aa
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-xxxhdpi/ic_sysbar_back_ime_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xxxhdpi/ic_sysbar_docked_dark.png b/packages/SystemUI/res/drawable-sw900dp-xxxhdpi/ic_sysbar_docked_dark.png
new file mode 100644
index 0000000..7660997
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-xxxhdpi/ic_sysbar_docked_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xxxhdpi/ic_sysbar_home_dark.png b/packages/SystemUI/res/drawable-sw900dp-xxxhdpi/ic_sysbar_home_dark.png
new file mode 100644
index 0000000..0d9ecc2
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-xxxhdpi/ic_sysbar_home_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xxxhdpi/ic_sysbar_menu_dark.png b/packages/SystemUI/res/drawable-sw900dp-xxxhdpi/ic_sysbar_menu_dark.png
new file mode 100644
index 0000000..d6bb8b1
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-xxxhdpi/ic_sysbar_menu_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw900dp-xxxhdpi/ic_sysbar_recent_dark.png b/packages/SystemUI/res/drawable-sw900dp-xxxhdpi/ic_sysbar_recent_dark.png
new file mode 100644
index 0000000..298ef3a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw900dp-xxxhdpi/ic_sysbar_recent_dark.png
Binary files differ
diff --git a/packages/SystemUI/res/layout/pip_menu_action.xml b/packages/SystemUI/res/layout/pip_menu_action.xml
index db6ae19..9b954f7 100644
--- a/packages/SystemUI/res/layout/pip_menu_action.xml
+++ b/packages/SystemUI/res/layout/pip_menu_action.xml
@@ -13,32 +13,9 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<FrameLayout
+<ImageView
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="0dp"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:background="?android:selectableItemBackground">
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:orientation="vertical">
- <ImageView
- android:id="@+id/icon"
- android:layout_width="@dimen/pip_menu_action_icon_size"
- android:layout_height="@dimen/pip_menu_action_icon_size"
- android:layout_gravity="center_horizontal"
- android:layout_marginBottom="4dp" />
- <TextView
- android:id="@+id/title"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:includeFontPadding="false"
- android:gravity="center"
- android:textSize="12sp"
- android:textColor="#ffffffff"
- android:textAllCaps="true"
- android:fontFamily="sans-serif" />
- </LinearLayout>
-</FrameLayout>
\ No newline at end of file
+ android:layout_width="48dp"
+ android:layout_height="48dp"
+ android:padding="10dp"
+ android:background="?android:selectableItemBackgroundBorderless" />
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/pip_menu_activity.xml b/packages/SystemUI/res/layout/pip_menu_activity.xml
index cadc09b..cf65f4a 100644
--- a/packages/SystemUI/res/layout/pip_menu_activity.xml
+++ b/packages/SystemUI/res/layout/pip_menu_activity.xml
@@ -13,47 +13,38 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menu"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="#66000000">
+ android:background="#00000000">
+ <!-- The above background is only for the dismiss button ripple to show. -->
- <LinearLayout
- android:id="@+id/actions"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginBottom="48dp">
- </LinearLayout>
+ <ImageView
+ android:id="@+id/dismiss"
+ android:layout_width="48dp"
+ android:layout_height="48dp"
+ android:layout_gravity="top|end"
+ android:padding="10dp"
+ android:contentDescription="@string/pip_phone_dismiss"
+ android:src="@drawable/ic_close_white"
+ android:background="?android:selectableItemBackgroundBorderless" />
- <LinearLayout
+ <FrameLayout
+ android:id="@+id/actions_container"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_gravity="bottom"
- android:orientation="horizontal">
- <TextView
- android:id="@+id/dismiss"
- android:layout_width="0dp"
+ android:paddingStart="24dp"
+ android:paddingEnd="24dp"
+ android:background="#66000000"
+ android:visibility="invisible">
+ <LinearLayout
+ android:id="@+id/actions"
+ android:layout_width="wrap_content"
android:layout_height="match_parent"
- android:layout_weight="1"
- android:gravity="center"
- android:textSize="12sp"
- android:textColor="#ffffffff"
- android:fontFamily="sans-serif"
- android:text="@string/pip_phone_dismiss"
- android:background="?android:selectableItemBackground" />
- <TextView
- android:id="@+id/expand"
- android:layout_width="0dp"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:gravity="center"
- android:textSize="12sp"
- android:textColor="#ffffffff"
- android:fontFamily="sans-serif"
- android:text="@string/pip_phone_expand"
- android:background="?android:selectableItemBackground" />
- </LinearLayout>
+ android:layout_gravity="center_horizontal"
+ android:orientation="horizontal" />
+ </FrameLayout>
</FrameLayout>
diff --git a/packages/SystemUI/res/layout/qs_customize_panel_content.xml b/packages/SystemUI/res/layout/qs_customize_panel_content.xml
index ca0248e..04d0e65 100644
--- a/packages/SystemUI/res/layout/qs_customize_panel_content.xml
+++ b/packages/SystemUI/res/layout/qs_customize_panel_content.xml
@@ -27,7 +27,7 @@
<android.support.v7.widget.RecyclerView
android:id="@android:id/list"
- android:layout_width="@dimen/notification_panel_width"
+ android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:scrollIndicators="top"
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index a511c58..aa6c620 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Battery laai tans, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> persent."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Stelselinstellings"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Kennisgewings"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Kennisgewingoorloophouer"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Verwyder kennisgewing"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS geaktiveer."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS soek ligging."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Sluitskerm."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Instellings"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Oorsig."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Maak toe"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi afgeskakel."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Vee alles uit"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Begin nou"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Geen kennisgewings nie"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Toestel kan gemonitor word"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profiel kan gemonitor word"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Netwerk kan dalk gemonitor word"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Netwerk kan dalk gemonitor word"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Toestelmonitering"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profielmonitering"</string>
<string name="monitoring_title" msgid="169206259253048106">"Netwerkmonitering"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Netwerkloglêers"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Deaktiveer VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Ontkoppel VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Jou toestel word bestuur deur <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJou administrateur kan instellings, korporatiewe toegang, programme, data wat met jou toestel geassosieer word, en jou toestel se ligginginligting monitor en bestuur. Kontak jou administrateur vir meer inligting."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Jou toestel word bestuur deur <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> gebruik <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> om jou toestel te bestuur."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Jou administrateur kan instellings, korporatiewe toegang, programme, data wat met jou toestel geassosieer word en jou toestel se ligginginligting monitor en bestuur."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Kom meer te wete"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Jy is gekoppel aan <xliff:g id="VPN_APP">%1$s</xliff:g>, wat jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Maak VPN-instellings oop"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Jou administrateur het netwerkloglêers aangeskakel wat verkeer op jou toestel monitor.\n\nKontak jou administrateur vir meer inligting."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Jy het \'n program toestemming gegee om \'n VPN-verbinding op te stel.\n\nHierdie program kan jou toestel- en netwerkaktiwiteit monitor, insluitend e-posse, programme en webwerwe."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Jou toestel word bestuur deur <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJou administrateur kan instellings, korporatiewe toegang, programme, data wat met jou toestel geassosieer word, en jou toestel se ligginginligting monitor en bestuur.\n\nJy is aan \'n VPN gekoppel wat jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor.\n\nKontak jou administrateur vir meer inligting."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Jou werkprofiel word deur <xliff:g id="ORGANIZATION">%1$s</xliff:g> bestuur.\n\nJou administrateur is in staat om jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, te monitor.\n\nKontak jou administrateur vir meer inligting.\n\nJy is ook aan \'n VPN gekoppel wat jou netwerkaktiwiteit kan monitor."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Jy is gekoppel aan <xliff:g id="APPLICATION">%1$s</xliff:g>, wat jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Jy is gekoppel aan <xliff:g id="APPLICATION">%1$s</xliff:g>, wat jou persoonlike netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Jou werkprofiel word deur <xliff:g id="ORGANIZATION">%1$s</xliff:g> bestuur. Dit is gekoppel aan <xliff:g id="APPLICATION">%2$s</xliff:g>, wat jou werknetwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor.\n\nKontak jou administrateur vir meer inligting."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Jou werkprofiel word deur <xliff:g id="ORGANIZATION">%1$s</xliff:g> bestuur. Dit is gekoppel aan <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, wat jou werknetwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor.\n\nJy is ook gekoppel aan <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, wat jou persoonlike netwerkaktiwiteit kan monitor."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Jou toestel word bestuur deur <xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nJou administrateur kan instelings, korporatiewe toegang, programme, data wat met jou toestel geassosieer word en jou toestel se ligginginligting monitor en bestuur.\n\nJy is gekoppel aan <xliff:g id="APPLICATION">%2$s</xliff:g>, wat jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor.\n\nVir meer inligting, kontak jou administrateur."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Toestel sal gesluit bly totdat jy dit handmatig ontsluit"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Kry kennisgewings vinniger"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Sien hulle voordat jy ontsluit"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Vou uit"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Vou in"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Skerm is vasgespeld"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Dit hou dit in sig totdat jy dit ontspeld. Raak en hou Terug om dit te ontspeld."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Het dit"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Nee, dankie"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Versteek <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Dit sal verskyn die volgende keer wanneer jy dit in instellings aanskakel."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Versteek"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> wil die volumedialoog wees."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Laat toe"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Weier"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> is die volumedialoog"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Tik om die oorspronklike terug te stel."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Jy gebruik tans jou werkprofiel"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Bel"</item>
- <item msgid="5997713001067658559">"Stelsel"</item>
- <item msgid="7858983209929864160">"Laat toestel lui"</item>
- <item msgid="1850038478268896762">"Media"</item>
- <item msgid="8265110906352372092">"Wekker"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Toeganklikheid"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Bel"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Stelsel"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Lui"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Media"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Wekker"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Kennisgewing"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Dubbele multitoonfrekwensie"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Toeganklikheid"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Tik om te ontdemp."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Tik om op vibreer te stel. Toeganklikheidsdienste kan dalk gedemp wees."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tik om te demp. Toeganklikheidsdienste kan dalk gedemp wees."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Kitsinstellings"</string>
<string name="status_bar" msgid="4877645476959324760">"Statusbalk"</string>
<string name="overview" msgid="4018602013895926956">"Oorsig"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Demonstrasiemodus"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Stelsel-UI-demonstrasiemodus"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Aktiveer demonstrasiemodus"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Wys demonstrasiemodus"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Aan"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Af"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Met kragkennisgewingkontroles kan jy \'n belangrikheidvlak van 0 tot 5 vir \'n program se kennisgewings stel. \n\n"<b>"Vlak 5"</b>" \n- Wys aan die bokant van die kennisgewinglys \n- Laat volskermonderbreking toe \n- Wys altyd opspringkennisgewings \n\n"<b>"Vlak 4"</b>" \n- Verhoed volskermonderbreking \n- Wys altyd opspringkennisgewings \n\n"<b>"Vlak 3"</b>" \n- Verhoed volskermonderbreking \n- Verhoed opspringkennisgewings \n\n"<b>"Vlak 2"</b>" \n- Verhoed volskermonderbreking \n- Verhoed opspringkennisgewings \n- Moet nooit \'n klank maak of vibreer nie \n\n"<b>"Vlak 1"</b>" \n- Verhoed volskermonderbreking \n- Verhoed opspringkennisgewings \n- Moet nooit \'n klank maak of vibreer nie \n- Versteek van sluitskerm en statusbalk \n- Wys aan die onderkant van die kennisgewinglys \n\n"<b>"Vlak 0"</b>" \n- Blokkeer alle kennisgewings van die program af"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Belangrikheid: Outomaties"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Belangrikheid: Vlak 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Belangrikheid: Vlak 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Belangrikheid: Vlak 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Belangrikheid: Vlak 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Belangrikheid: Vlak 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Belangrikheid: Vlak 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Program bepaal hoe belangrik elke kennisgewing is."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Moet nooit kennisgewings van hierdie program af wys nie."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Geen volskermonderbreking, opspringkennisgewings, klank of vibrasie nie. Versteek van sluitskerm en statusbalk."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Geen volskermonderbreking, opspringkennisgewings, klank of vibrasie nie."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Geen volskermonderbreking of opspringkennisgewings nie."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Wys altyd opspringkennisgewings. Geen volskermonderbreking nie."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Wys opspringkennisgewings altyd en laat volskermonderbreking toe."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Meer instellings"</string>
<string name="notification_done" msgid="5279426047273930175">"Klaar"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g>-kennisgewingkontroles"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Wysig volgorde van instellings."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Bladsy <xliff:g id="ID_1">%1$d</xliff:g> van <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Vou uit"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimeer"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Maak toe"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Foon raak warm"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Sommige kenmerke is beperk terwyl foon afkoel"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Jou foon sal outomaties probeer om af te koel. Jy kan steeds jou foon gebruik, maar dit sal dalk stadiger wees.\n\nJou foon sal normaalweg werk nadat dit afgekoel het."</string>
</resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index b40bd90..210647c 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"ባትሪ ኃይል በመሙላት ላይ፣ <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> በመቶ።"</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"የስርዓት ቅንብሮች"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"ማሳወቂያዎች"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"የማሳወቂያ ትርፍ ፍሰት መያዣ"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"ማሳወቂያ አጽዳ"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ነቅቷል።"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS በማግኘት ላይ።"</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ማያ ገጽ ቆልፍ።"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"ቅንብሮች"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"አጠቃላይ እይታ።"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"ዝጋ"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>።"</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi ጠፍቷል።"</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"ሁሉንም አጽዳ"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"አሁን ጀምር"</string>
<string name="empty_shade_text" msgid="708135716272867002">"ምንም ማሳወቂያ የለም"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"መሣሪያው ክትትል የሚደረግበት ሊሆን ይችላል"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"መገለጫ ክትትል ሊደረግበት ይችላል"</string>
<string name="vpn_footer" msgid="2388611096129106812">"አውታረ መረብ በክትትል እየተደረገበት ሊሆን ይችላል"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"አውታረ መረብ ክትትል የሚደረግበት ሊሆን ይችላል"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"የመሣሪያ ክትትል"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"መገለጫን መከታተል"</string>
<string name="monitoring_title" msgid="169206259253048106">"የአውታረ መረብ ክትትል"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"የአውታረ መረብ ምዝግብ ማስታወሻ መያዝ"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN አሰናክል"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"የVPN ግንኙነት አቋርጥ"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"የእርስዎ መሣሪያ የሚቀናበረው በ<xliff:g id="ORGANIZATION">%1$s</xliff:g> ነው።\n\nየእርስዎ አስተዳዳሪ ቅንብሮችን፣ የኮርፖሬት መዳረሻ፣ መተግበሪያዎችን፣ ከመሣሪያዎ ጋር የተጎዳኘ ውሂብን፣ እና የመሣሪያዎ የአካባቢ መረጃን መከታተል እና ማቀናበር ይችላሉ። ተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።"</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"የእርስዎ መሣሪያ በ<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ነው የሚቀናበረው።"</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> የእርስዎን መሣሪያ ለማቀናበር <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>ን ይጠቀማል።"</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"የእርስዎ አስተዳዳሪ ከዚህ መሣሪያ ጋር የተጎዳኙ ቅንብሮችን፣ የኮርፖሬት መዳረሻን፣ መተግበሪያዎችን፣ እና የመሣሪያዎን አካባቢ መከታተል እና ማቀናበር ይችላሉ።"</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"የበለጠ ለመረዳት"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"እርስዎ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የግል የአውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችለው <xliff:g id="VPN_APP">%1$s</xliff:g> ጋር ተገናኝተዋል።"</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"የVPN ቅንብሮችን ይክፈቱ"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"የእርስዎ አስተዳዳሪ የአውታረ መረብ ምዝግብ ማስታወሻ መያዝን አብርተዋል፣ ይህም በመሣሪያዎ ላይ ያለው ትራፊክ ይከታተላል።\n\nተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።"</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"አንድ መተግበሪያ የVPN ግንኙነት እንዲያዋቅር ፍቃድ ሰጥተውታል።\n\nይህ መተግበሪያ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የመሣሪያዎን እና የአውታረ መረብ እንቅስቃሴዎን መከታተል ይችላል።"</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"የእርስዎ መሣሪያ የሚቀናበረው በ<xliff:g id="ORGANIZATION">%1$s</xliff:g> ነው።\n\nየእርስዎ አስተዳዳሪ ቅንብሮችን፣ የኮርፖሬት መዳረሻ፣ መተግበሪያዎችን፣ ከመሣሪያዎ ጋር የተጎዳኘ ውሂብን እና የመሣሪያዎን የአካባቢ መረጃ መከታተል እና ማቀናበር ይችላል።\n\nከአንድ VPN ጋር ተገናኝተዋል፣ ይሄ ደግሞ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የአውታረ መረብዎን እንቅስቃሴ መከታተል ይችላል።\n\nተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።"</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"የስራ መገለጫዎ በ<xliff:g id="ORGANIZATION">%1$s</xliff:g> ነው የሚተዳደረው።\n\nየእርስዎ አስተዳዳሪ ቅንብሮችን፣ የኮርፖሬት መዳረሻን፣ መተግበሪያዎችን፣ ከመሣሪያዎ ጋር የተጎዳኘ ውሂብን እና የመሣሪያዎ የአካባቢ መረጃን መከታተል እና ማቀናበር ይችላል።\n\nተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።\n\nእንዲሁም የአውታረ መረብ ግንኙነትዎን መከታተል ከሚችል አንድ VPN ጋር ተገናኝተዋል።"</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"እርስዎ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የአውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችለው <xliff:g id="APPLICATION">%1$s</xliff:g> ጋር ተገናኝተዋል።"</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"እርስዎ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የግል የአውታረ መረብ እንቅስቃሴዎን ከሚከታተለው ከ<xliff:g id="APPLICATION">%1$s</xliff:g> ጋር ተገናኝተዋል።"</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"የስራ መገለጫዎ በ<xliff:g id="ORGANIZATION">%1$s</xliff:g> ነው እየተዳደረ ያለው። ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የአውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችለው <xliff:g id="APPLICATION">%2$s</xliff:g> ጋር ተገናኝተዋል።\n\nተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።"</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"የስራ መገለጫዎ በ<xliff:g id="ORGANIZATION">%1$s</xliff:g> ነው እየተዳደረ ያለው። ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የአውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችለው <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> ጋር ተገናኝተዋል።\n\nእንዲሁም የግል አውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችለው <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> ጋርም ተገናኝተዋል።"</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"የእርስዎ መሣሪያ በ<xliff:g id="ORGANIZATION">%1$s</xliff:g> ነው የሚተዳደረው።\n\nየእርስዎ አስተዳዳሪ ቅንብሮችን፣ የኮርፖሬት መዳረሻን፣ መተግበሪያዎችን፣ ከመሣሪያዎ ጋር የተጎዳኘ ውሂብን እና የመሣሪያዎ የአካባቢ መረጃን መከታተል እና ማቀናበር ይችላል።\n\nእርስዎ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችን ጨምሮ የአውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችለው <xliff:g id="APPLICATION">%2$s</xliff:g> ጋር ተገናኝተዋል።\n\nተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።"</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"እራስዎ እስኪከፍቱት ድረስ መሣሪያ እንደተቆለፈ ይቆያል"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"ማሳወቂያዎችን ፈጥነው ያግኙ"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"ከመክፈትዎ በፊት ይመልከቷቸው"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"አስፋ"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"ሰብስብ"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"ማያ ገጽ ተሰክቷል"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"ይሄ እስኪነቅሉት ድረስ በእይታ ውስጥ ያስቀምጠዋል። ለመንቀል ተጭነው ይያዙ።"</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"ገባኝ"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"አይ፣ አመሰግናለሁ"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> ይደበቅ?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"በቅንብሮች ውስጥ በሚቀጥለው ጊዜ እንዲበራ በሚያደርጉበት ጊዜ ዳግመኛ ብቅ ይላል።"</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"ደብቅ"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> የድምጽ መጠን መገናኛው መሆን ይፈልጋል።"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"ፍቀድ"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"ከልክል"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> የድምጽ መጠን መገናኛው ነው"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"የመጀመሪያውን ወደነበረበት ለመመለስ መታ ያድርጉ።"</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"የስራ መገለጫዎን እየተጠቀሙ ነው"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"ደውል"</item>
- <item msgid="5997713001067658559">"ሥርዓት"</item>
- <item msgid="7858983209929864160">"ጥሪ"</item>
- <item msgid="1850038478268896762">"ማህደረመረጃ"</item>
- <item msgid="8265110906352372092">"ማንቂያ"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"ብሉቱዝ"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"ተደራሽነት"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"ጥሪ"</string>
+ <string name="stream_system" msgid="7493299064422163147">"ሥርዓት"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"ጥሪ"</string>
+ <string name="stream_music" msgid="9086982948697544342">"ማህደረ መረጃ"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"ማንቂያ"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"ማሳወቂያ"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"ብሉቱዝ"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"ድርብ ባለ በርካታ ቅላጼ ድግምግሞሽ"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"ተደራሽነት"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s። ድምጸ-ከል ለማድረግ መታ ያድርጉ"</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s። ወደ ንዝረት ለማቀናበር መታ ያድርጉ። የተደራሽነት አገልግሎቶች ድምጸ-ከል ሊደረግባቸው ይችላል።"</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s። ድምጸ-ከል ለማድረግ መታ ያድርጉ። የተደራሽነት አገልግሎቶች ድምጸ-ከል ሊደረግባቸው ይችላል።"</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"ፈጣን ቅንብሮች"</string>
<string name="status_bar" msgid="4877645476959324760">"የሁኔታ አሞሌ"</string>
<string name="overview" msgid="4018602013895926956">"አጠቃላይ እይታ"</string>
- <string name="demo_mode" msgid="2389163018533514619">"የቅንጭብ ማሳያ ሁነታ"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"የስርዓት ተጠቃሚ በይነገጽ ማሳያ ሁነታ"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"የማሳያ ሁነታውን ያንቁ"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"ማሳያ ሁነታን አሳይ"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"ኤተርኔት"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"በርቷል"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"ጠፍቷል"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"በኃይል ማሳወቂያ መቆጣጠሪያዎች አማካኝነት የአንድ መተግበሪያ ማሳወቂያዎች የአስፈላጊነት ደረጃ ከ0 እስከ 5 ድረስ ማዘጋጀት ይችላሉ። \n\n"<b>"ደረጃ 5"</b>" \n- በማሳወቂያ ዝርዝሩ አናት ላይ አሳይ \n- የሙሉ ማያ ገጽ ማቋረጥን ፍቀድ \n- ሁልጊዜ አጮልቀው ይመልከቱ \n\n"<b>"ደረጃ 4"</b>" \n- የሙሉ ማያ ገጽ ማቋረጥን ከልክል \n- ሁልጊዜ አጮልቀው ይመልከቱ \n\n"<b>"ደረጃ 3"</b>" \n- የሙሉ ማያ ገጽ ማቋረጥን ከልክል \n- በፍጹም አጮልቀው አይምልከቱ \n\n"<b>"ደረጃ 2"</b>" \n- የሙሉ ማያ ገጽ ማቋረጥን ይከልክሉ \n- በፍጹም አጮልቀው አይመልከቱ \n- ድምፅ እና ንዝረትን በፍጹም አይኑር \n\n"<b>"ደረጃ 1"</b>" \n- የሙሉ ማያ ገጽ ማቋረጥን ይከልክሉ \n- በፍጹም አጮልቀው አይመልከቱ \n- ድምፅ ወይም ንዝረትን በፍጹም አያደርጉ \n- ከመቆለፊያ ገጽ እና የሁኔታ አሞሌ ይደብቁ \n- በማሳወቂያ ዝርዝር ግርጌ ላይ አሳይ \n\n"<b>"ደረጃ 0"</b>" \n- ሁሉንም የመተግበሪያው ማሳወቂያዎች ያግዱ"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"አስፈላጊነት፦ ራስ-ሰር"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"አስፈላጊነት፦ ደረጃ 0"</string>
- <string name="min_importance" msgid="560779348928574878">"አስፈላጊነት፦ ደረጃ 1"</string>
- <string name="low_importance" msgid="7571498511534140">"አስፈላጊነት፦ ደረጃ 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"አስፈላጊነት፦ ደረጃ 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"አስፈላጊነት፦ ደረጃ 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"አስፈላጊነት፦ ደረጃ 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"መተግበሪያው የእያንዳንዱ ማሳወቂያ አስፈላጊነት ይወስናል።"</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"የዚህ መተግበሪያ ማሳወቂያዎችን በፍጹም አታሳይ።"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"ምንም የሙሉ ማያ ማቋረጥ፣ አጮልቆ ማየት፣ ድምፅ ወይም ንዝረት የለም። ከመቆለፍያ ገጽ እና የሁኔታ አሞሌ ይደብቁ።"</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"ምንም የሙሉ ማያ ማቋረጥ፣ አጮልቆ ማየት፣ ድምፅ ወይም ንዝረት የለም።"</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"ምንም የሙሉ ማያ ማቋረጥ ወይም አጮልቆ ማየት የለም።"</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"ሁልጊዜ አጮልቀው ይመልከቱ። ምንም የሙሉ ማያ ማቋረጥ የለም።"</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"ሁልጊዜ አጮልቀው ይመልከቱ፣ እና የሙሉ ማያ ገጽ ማቋረጥ ይፍቀዱ።"</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"ተጨማሪ ቅንብሮች"</string>
<string name="notification_done" msgid="5279426047273930175">"ተከናውኗል"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> ማሳወቂያ ቁጥጥሮች"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"የቅንብሮድ ቅደም-ተከተል አርትዕ።"</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"ገጽ <xliff:g id="ID_1">%1$d</xliff:g> ከ <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"ዘርጋ"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"አሳንስ"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"አሰናብት"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"ስልኩ እየሞቀ ነው"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"ስልኩ እየቀዘቀዘ ሳለ አንዳንድ ባህሪዎች ይገደባሉ"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"የእርስዎ ስልክ በራስ-ሰር ለመቀዝቀዝ ይሞክራል። አሁንም ስልክዎን መጠቀም ይችላሉ፣ ነገር ግን ሊንቀራፈፍ ይችላል።\n\nአንዴ ስልክዎ ከቀዘቀዘ በኋላ በመደበኝነት ያሄዳል።"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 9ec84f9..ed64c41 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -167,6 +167,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"جارٍ شحن البطارية، <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> بالمائة."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"إعدادات النظام."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"الإشعارات."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"حاوية التدفق الزائد للإشعارات"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"محو الإشعار."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"تم تمكين GPS."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"الحصول على GPS."</string>
@@ -188,6 +189,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"شاشة التأمين."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"الإعدادات"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"النظرة عامة."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"إغلاق"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"تم إيقاف Wifi."</string>
@@ -408,18 +411,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"محو الكل"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"البدء الآن"</string>
<string name="empty_shade_text" msgid="708135716272867002">"ليس هناك أي اشعارات"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"ربما تتم مراقبة الجهاز"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"ربما تتم مراقبة الملف الشخصي"</string>
<string name="vpn_footer" msgid="2388611096129106812">"قد تكون الشبكة خاضعة للمراقبة"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"قد تكون الشبكة خاضعة للمراقبة"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"مراقبة الأجهزة"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"مراقبة الملف الشخصي"</string>
<string name="monitoring_title" msgid="169206259253048106">"مراقبة الشبكات"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"شبكة ظاهرية خاصة (VPN)"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"تسجيل بيانات الشبكة"</string>
<string name="disable_vpn" msgid="4435534311510272506">"تعطيل الشبكة الظاهرية الخاصة"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"قطع الاتصال بشبكة VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"تتم إدارة جهازك عن طريق <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nيمكن للمشرف مراقبة وإدارة كل من الإعدادات والدخول إلى الشركة والتطبيقات والبيانات المرتبطة بجهازك ومعلومات الموقع لجهازك. للمزيد من المعلومات، اتصل بالمشرف."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"تتم إدارة جهازك بواسطة <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"تستخدم <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> تطبيق <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> لإدارة جهازك."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"يمكن للمشرف مراقبة الإعدادات وإدارتها والدخول إلى المؤسسة والتطبيقات والبيانات المقترنة بجهازك ومعلومات موقع الجهاز."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"مزيد من المعلومات"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"لقد اتصلت بتطبيق <xliff:g id="VPN_APP">%1$s</xliff:g>، الذي يمكن أن يراقب نشاط الشبكة، بما في ذلك رسائل البريد الإلكتروني والتطبيقات والمواقع الإلكترونية."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"فتح إعدادات الشبكة الظاهرية الخاصة (VPN)"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"شغَّل المشرف ميزة تسجيل بيانات الشبكة، والتي يتم من خلالها مراقبة حركة البيانات على جهازك.\n\nللحصول على المزيد من المعلومات، اتصل بالمشرف."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"لقد منحت تطبيقًا الإذن لإعداد اتصال شبكة ظاهرية خاصة (VPN).\n\nيمكن لهذا التطبيق مراقبة أنشطتك على الجهاز والشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"تتم إدارة جهازك عن طريق <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nيمكن للمشرف مراقبة وإدارة كل من الإعدادات والدخول إلى الشركة والتطبيقات والبيانات المرتبطة بجهازك ومعلومات الموقع لجهازك.\n\nأنت متصل بشبكة ظاهرية خاصة (VPN)، يمكنها مراقبة أنشطة الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب.\n\nللمزيد من المعلومات، اتصل بالمشرف."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"تتم إدارة ملفك الشخصي للعمل عن طريق <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nبإمكان المشرف مراقبة أنشطتك على الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب.\n\nللمزيد من المعلومات، اتصل بالمشرف.\n\nأنت متصل أيضًا بشبكة ظاهرية خاصة (VPN)، يمكنها مراقبة أنشطتك على الشبكة."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"شبكة ظاهرية خاصة"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"أنت متصل بـ <xliff:g id="APPLICATION">%1$s</xliff:g>، الذي يمكنه مراقبة أنشطتك على الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب."</string>
@@ -427,7 +438,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"أنت متصل بـ <xliff:g id="APPLICATION">%1$s</xliff:g>، الذي يمكنه مراقبة أنشطتك الشخصية على الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"تتم إدارة ملفك الشخصي للعمل عن طريق <xliff:g id="ORGANIZATION">%1$s</xliff:g>. وهذا الملف الشخصي للعمل متصل بـ <xliff:g id="APPLICATION">%2$s</xliff:g>، الذي يمكنه مراقبة أنشطتك على شبكة العمل، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب.\n\nللمزيد من المعلومات، اتصل بالمشرف."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"تتم إدارة ملفك الشخصي للعمل عن طريق <xliff:g id="ORGANIZATION">%1$s</xliff:g>. وهذا الملف الشخصي للعمل متصل بـ <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>، الذي يمكنه مراقبة أنشطتك على شبكة العمل، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب.\n\nأنت متصل أيضًا بـ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>، الذي يمكنه مراقبة أنشطتك الشخصية على الشبكة."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"تتم إدارة جهازك عن طريق <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nيمكن للمشرف مراقبة وإدارة كل من الإعدادات والوصول إلى الشركة والتطبيقات والبيانات المرتبطة بجهازك ومعلومات الموقع لجهازك.\n\nأنت متصل بـ <xliff:g id="APPLICATION">%2$s</xliff:g>، الذي يمكنه مراقبة أنشطتك على الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب.\n\nللمزيد من المعلومات، اتصل بالمشرف."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"سيظل الجهاز مقفلاً إلى أن يتم إلغاء قفله يدويًا"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"الحصول على الإشعارات بشكل أسرع"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"الاطلاع عليها قبل إلغاء القفل"</string>
@@ -438,31 +448,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"توسيع"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"تصغير"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"تم تثبيت الشاشة"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"يؤدي هذا إلى استمرار العرض إلى أن يتم إزالة التثبيت. ويمكنك لمس \"رجوع\" مع الاستمرار لإزالة التثبيت."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"حسنًا"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"لا، شكرًا"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"هل تريد إخفاء <xliff:g id="TILE_LABEL">%1$s</xliff:g>؟"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"سيظهر مرة أخرى عند تمكينه في الإعدادات المرة التالية."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"إخفاء"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"يريد <xliff:g id="APP_NAME">%1$s</xliff:g> أن يكون مربع حوار مستوى الصوت."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"سماح"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"رفض"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> هو مربع حوار مستوى الصوت"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"انقر لاستعادة النسخة الأصلية."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"أنت تستخدم ملفك الشخصي للعمل"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"الاتصال"</item>
- <item msgid="5997713001067658559">"النظام"</item>
- <item msgid="7858983209929864160">"الرنين"</item>
- <item msgid="1850038478268896762">"الوسائط"</item>
- <item msgid="8265110906352372092">"المنبه"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"البلوتوث"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"إمكانية الوصول"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"الاتصال"</string>
+ <string name="stream_system" msgid="7493299064422163147">"النظام"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"الرنين"</string>
+ <string name="stream_music" msgid="9086982948697544342">"الوسائط"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"المنبه"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"الإشعار"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"بلوتوث"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"تردد ثنائي متعدد النغمات"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"إمكانية الوصول"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. انقر لإلغاء التجاهل."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. انقر للتعيين على الاهتزاز. قد يتم تجاهل خدمات إمكانية الوصول."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. انقر للتجاهل. قد يتم تجاهل خدمات إمكانية الوصول."</string>
@@ -474,7 +478,7 @@
<string name="quick_settings" msgid="10042998191725428">"الإعدادات السريعة"</string>
<string name="status_bar" msgid="4877645476959324760">"شريط الحالة"</string>
<string name="overview" msgid="4018602013895926956">"نظرة عامة"</string>
- <string name="demo_mode" msgid="2389163018533514619">"الوضع التجريبي"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"وضع تجريبي لواجهة مستخدم النظام"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"تمكين الوضع التجريبي"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"عرض الوضع التجريبي"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"إيثرنت"</string>
@@ -514,20 +518,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"تشغيل"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"إيقاف"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"باستخدام عناصر التحكم في إشعار التشغيل، يمكنك تعيين مستوى الأهمية من 0 إلى 5 لإشعارات التطبيق. \n\n"<b>"المستوى 5"</b>" \n- العرض أعلى قائمة الإشعارات \n- يسمح بمقاطعة ملء الشاشة \n- الظهور الخاطف دائمًا \n\n"<b>"المستوى 4"</b>" \n- منع مقاطعة ملء الشاشة \n- الظهور الخاطف دائمًا \n\n"<b>"المستوى 3"</b>" \n- منع مقاطعة ملء الشاشة \n- عدم الظهور الخاطف أبدًا \n\n"<b>"المستوى 2"</b>" \n- منع مقاطعة ملء الشاشة \n- عدم الظهور الخاطف أبدًا \n- عدم إصدار أصوات واهتزاز \n\n"<b>"المستوى 1"</b>" \n- منع مقاطعة ملء الشاشة \n- عدم الظهور الخاطف أبدًا \n- عدم إصدار أصوات أو اهتزاز أبدًا \n- الإخفاء من شاشة التأمين وشريط الحالة \n- العرض أسفل قائمة الإشعارات \n\n"<b>"المستوى 0"</b>" \n- حظر جميع الإشعارات من التطبيق"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"الأهمية: تلقائي"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"الأهمية: المستوى 0"</string>
- <string name="min_importance" msgid="560779348928574878">"الأهمية: المستوى 1"</string>
- <string name="low_importance" msgid="7571498511534140">"الأهمية: المستوى 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"الأهمية: المستوى 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"الأهمية: المستوى 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"الأهمية: المستوى 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"يحدد التطبيق مدى أهمية كل إشعار."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"عدم عرض إشعارات من هذا التطبيق أبدًا."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"عدم المقاطعة بظهور خاطف أو بملء الشاشة أو بصوت أو اهتزاز. الإخفاء من شاشة التأمين وشريط الحالة."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"عدم المقاطعة بظهور خاطف أو بملء الشاشة أو بصوت أو اهتزاز."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"عدم المقاطعة بظهور خاطف أو بملء الشاشة."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"الظهور الخاطف دائمًا. عدم المقاطعة بملء الشاشة."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"الظهور الخاطف دائمًا، والسماح بمقاطعة ملء الشاشة."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"المزيد من الإعدادات"</string>
<string name="notification_done" msgid="5279426047273930175">"تم"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"عناصر التحكم في إشعارات <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -660,4 +672,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"تعديل ترتيب الإعدادات."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"الصفحة <xliff:g id="ID_1">%1$d</xliff:g> من <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"توسيع"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"تصغير"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"تجاهل"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"تزداد درجة حرارة الهاتف"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"يتم تقييد عمل بعض الميزات إلى أن تنخفض درجة حرارة الهاتف"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"سيحاول الهاتف تخفيض درجة حرارته تلقائيًا. سيظل بإمكانك استخدام هاتفك، ولكن قد يعمل بشكل أبطأ.\n\nبعد أن تنخفض درجة حرارة الهاتف، سيستعيد سرعته المعتادة."</string>
</resources>
diff --git a/packages/SystemUI/res/values-az-rAZ-land/strings.xml b/packages/SystemUI/res/values-az-rAZ-land/strings.xml
deleted file mode 100644
index 8eb6978..0000000
--- a/packages/SystemUI/res/values-az-rAZ-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"Hazırda ekran landşaft orientasiyasında kilidlənib."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-az-rAZ/config.xml b/packages/SystemUI/res/values-az/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-az-rAZ/config.xml
rename to packages/SystemUI/res/values-az/config.xml
diff --git a/packages/SystemUI/res/values-az-rAZ/strings.xml b/packages/SystemUI/res/values-az/strings.xml
similarity index 93%
rename from packages/SystemUI/res/values-az-rAZ/strings.xml
rename to packages/SystemUI/res/values-az/strings.xml
index 14537a1..70e768c 100644
--- a/packages/SystemUI/res/values-az-rAZ/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Batareya doldurulur, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> faiz."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Sistem parametrləri"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Bildirişlər."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Bildiriş daşması konteyneri"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Bildirişi təmizlə."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS aktivdir."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS əldə edilir."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Ekranı kilidləyin."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Ayarlar"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"İcmal"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Qapadın"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi deaktivdir."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Hamısını silin"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"İndi başlayın"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Heç bir bildiriş yoxdur"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Cihaz nəzarət altında ola bilər"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil izlənə bilər"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Şəbəkə nəzərdən keçirilə bilər"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Şəbəkə nəzərdən keçirilə bilər"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Cihaza nəzarət"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profil izlənməsi"</string>
<string name="monitoring_title" msgid="169206259253048106">"Şəbəkə monitorinqi"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN (Virtual Şəxsi Şəbəkələr)"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Şəbəkə Girişi"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN-i deaktiv edin"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN-i bağlantıdan ayırın"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Cihazınız <xliff:g id="ORGANIZATION">%1$s</xliff:g> tərəfindən idarə olunur.\n\nAdministratorunuz cihazınız ilə əlaqədar ayarlar, korporativ giriş, tətbiqlər, data və cihaz yeri məlumatına nəzarət və idarə edə bilər. Ətraflı məlumat üçün, administratorunuz ilə əlaqə saxlayın."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Cihaz <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> tərəfindən idarə olunur."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> cihazınızı idarə etmək üçün <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> istifadə edir."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administratorunuz ayarlara, korporativ girişə, tətbiqlərə, cihaz ilə əlaqədar dataya və cihazın məkan məlumatına nəzarət və idarə edə bilər."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" ("</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Ətraflı məlumat"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"<xliff:g id="VPN_APP">%1$s</xliff:g> tətbiqinə qoşulmusunuz və o, e-məktublar, tətbiq və veb saytlar daxil olmaqla şəbəkə fəaliyyətinizə nəzarət edə bilər."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" ("</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN Ayarlarını açın"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Admin, cihazdakı trafikə nəzarət edən şəbəkə loqlarını aktiv etdi.\n\nƏtraflı məlumat üçün admin ilə əlaqə saxlayın."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"VPN bağlantısı quraşdırmağa icazə vermisiniz.\n\nBu tətbiq cihazınızı və şəbəkə fəaliyyətinizi, həmçinin, e-məktubları, tətbiq və veb saytları izləyə bilər."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Cihazınız <xliff:g id="ORGANIZATION">%1$s</xliff:g> tərəfindən idarə olunur.\n\nAdministratorunuz cihazınız ilə əlaqədar ayarlar, korporativ giriş, tətbiqlər, data və cihaz yeri məlumatına nəzarət və idarə edə bilər.\n\nSiz, həmçinin, e-poçt, tətbiq və veb saytlar daxil olmaqla şəbəkə fəaliyyətinizi yoxlaya bilən VPN şəbəkəsinə qoşulmusunuz..\n\nƏtraflı məlumat üçün, administratorunuz ilə əlaqə saxlayın."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Sizin iş profile tərəfindən idarə olunur <xliff:g id="ORGANIZATION">%1$s</xliff:g> . \n\n Sizin administrator e-poçt, apps, və web o cümlədən şəbəkə fəaliyyəti monitorinq qadirdir. \n\n Daha ətraflı məlumat üçün, administratora müraciət. \n\n Siz həmçinin şəbəkə fəaliyyətinə nəzarət edə bilərsiniz bir VPN, bağlı olduğunuz."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN (Virtual Şəxsi Şəbəkələr)"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"<xliff:g id="APPLICATION">%1$s</xliff:g> tətbiqinə qoşulmusunuz və o, e-məktublar, tətbiq və veb saytlar daxil olmaqla şəbəkə fəaliyyətinizə nəzarət edə bilər."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"<xliff:g id="APPLICATION">%1$s</xliff:g> tətbiqinə qoşulmusunuz və o, e-məktublar, tətbiq və veb saytlar daxil olmaqla şəxsi şəbəkə fəaliyyətinizə nəzarət edə bilər."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"İş profiliniz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tərəfindən idarə olunur. <xliff:g id="APPLICATION">%2$s</xliff:g> tətbiqinə qoşuludur və iş şəbəkə fəaliyyətinizə nəzarət edə bilər, bura e-məktubıar, tətbiq və veb saytlar daxildir.\n\nƏtraflı məlumat üçün administratorunuz ilə əlaqə saxlayın."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"İş profiliniz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tərəfindən idarə olunur. <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> tətbiqinə qoşuludur və iş şəbəkə fəaliyyətinizi idarə edə bilər, bura e-məktubıar, tətbiq və veb saytlar daxildir\n\nSiz, həmçinin, <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> tətbiqinə də qoşulsunuz və o, şəxsi şəbəkə fəaliyyətinizə nəzarət edə bilər."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Sizin cihaz tərəfindən idarə olunur <xliff:g id="ORGANIZATION">%1$s</xliff:g> . \n\n Sizin administrator nəzarət və parametrləri, korporativ giriş, apps, sizin cihaz ilə bağlı məlumat və cihaz yer məlumat idarə edə bilərsiniz. \n\n Siz bağlı olduğunuz <xliff:g id="APPLICATION">%2$s</xliff:g> , E-poçt, apps, və web o cümlədən, şəbəkə fəaliyyətinə nəzarət edə bilər. \n\n Daha ətraflı məlumat üçün, administratora müraciət."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Device will stay locked until you manually unlock"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Bildirişləri daha sürətlə əldə edin"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Kiliddən çıxarmadan öncə onları görün"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Genişləndirin"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Yığcamlaşdırın"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Ekrana sancaq taxıldı"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Sancaq götürülənə qədər bu görünəcək. Sancağı götürmək üçün Geri düyməsinə toxunun və saxlayın."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Anladım!"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Yox, çox sağ olun"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> gizlədilsin?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ayarlarda onu aktivləşdirəcəyiniz vaxta qədər o, yenidən görünəcək."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Gizlədin"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> proqramı səs səviyyəsi dialoqu olmaq istəyir."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"İcazə ver"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Rədd et"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> proqramı səs səviyyəsi dialoqudur"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Orijinalı bərpa etmək üçün tıklayın."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"İş profilinizi istifadə edirsiniz"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Çağrı"</item>
- <item msgid="5997713001067658559">"Sistem"</item>
- <item msgid="7858983209929864160">"Zəng"</item>
- <item msgid="1850038478268896762">"Media"</item>
- <item msgid="8265110906352372092">"Siqnal"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Münasiblik"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Zəng"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistem"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Zəng Edin"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Media"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Zəng"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Bildiriş"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Çoxsaylı ton olan ikili tezlik"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Münasiblik"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Səsli etmək üçün tıklayın."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Vibrasiyanı ayarlamaq üçün tıklayın. Əlçatımlılıq xidmətləri səssiz edilmiş ola bilər."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Səssiz etmək üçün tıklayın. Əlçatımlılıq xidmətləri səssiz edilmiş ola bilər."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Sürətli Ayarlar"</string>
<string name="status_bar" msgid="4877645476959324760">"Status paneli"</string>
<string name="overview" msgid="4018602013895926956">"İcmal"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Demo rejimi"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Sistem İİ demo rejimi"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Demo rejimini aktiv edin"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Demo rejimini göstərin"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Aktiv"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Deaktiv"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Enerji bildiriş nəzarəti ilə, tətbiq bildirişləri üçün əhəmiyyət səviyyəsini 0-dan 5-ə kimi ayarlaya bilərsiniz. \n\n"<b>"Səviyyə 5"</b>" \n- Bildiriş siyahısının yuxarı hissəsində göstərin \n- Tam ekran kəsintisinə icazə verin \n- Hər zaman izləyin \n\n"<b>"Səviyyə 4"</b>" \n- Tam ekran kəsintisinin qarşısını alın \n- Hər zaman izləyin \n\n"<b>"Level 3"</b>" \n- Tam ekran kəsintisinin qarşısını alın \n- Heç vaxt izləməyin \n\n"<b>"Level 2"</b>" \n- Tam ekran kəsintisinin qarşısını alın \n- Heç vaxt izləməyin \n- Heç vaxt səsliyə və ya vibrasiyaya qoymayın \n\n"<b>"Səviyyə 1"</b>" \n- Prevent full screen interruption \n- Heç vaxt izləməyin \n- Heç vaxt səsliyə və ya vibrasiyaya qoymayın \n- Ekran kilidi və ya status panelindən gizlədin \n- Bildiriş siyahısının yuxarı hissəsində göstərin \n\n"<b>"Səviyyə 0"</b>" \n- Bütün bildirişləri tətbiqdən blok edin"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Əhəmiyyət: Avtomatik"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Əhəmiyyət: Səviyyə 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Əhəmiyyət: Səviyyə 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Əhəmiyyət: Səviyyə 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Əhəmiyyət: Səviyyə 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Əhəmiyyət: Səviyyə 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Əhəmiyyət: Səviyyə 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Hər bir bildirişin əhəmiyyətinə tətbiq özü qərar verir."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Bu tətbiqdən olan bildirişləri heç vaxt göstərməyin."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Tam ekran kəsintisi, baxışı, səsi və ya vibrasiyası yoxdur. Ekran kilidi və status panelindən gizlədin."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Tam ekran kəsintisi, baxışı, səsi və ya vibrasiyası yoxdur."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Tam ekran kəsintisi və ya baxışı yoxdur."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Hər zaman baxın. Tam ekran kəsintisi yoxdur."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Hər zaman baxın və tam ekran kəsintisinə icazə verin."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Daha çox ayar"</string>
<string name="notification_done" msgid="5279426047273930175">"Hazırdır"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> bildiriş nəzarəti"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Ayarların sıralanmasını redaktə edin."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_2">%2$d</xliff:g> səhifədən <xliff:g id="ID_1">%1$d</xliff:g> səhifə"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Genişləndirin"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Kiçildin"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Yığışdırın"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Telefon qızmağa başlayır"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Telefon soyuyana kimi bəzi funksiyalar məhdudlaşdırılır"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Telefonunuz avtomatik olaraq soyumağa başlayacaq. Telefon istifadəsinə davam edə bilərsiniz, lakin sürəti yavaşlaya bilər.\n\nTelefonunuz soyuduqdan sonra normal işləyəcək."</string>
</resources>
diff --git a/packages/SystemUI/res/values-az-rAZ/strings_car.xml b/packages/SystemUI/res/values-az/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-az-rAZ/strings_car.xml
rename to packages/SystemUI/res/values-az/strings_car.xml
diff --git a/packages/SystemUI/res/values-az-rAZ/strings_tv.xml b/packages/SystemUI/res/values-az/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-az-rAZ/strings_tv.xml
rename to packages/SystemUI/res/values-az/strings_tv.xml
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index c92490f..924ec8a 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -164,6 +164,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Baterija se puni, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> procenata."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Sistemska podešavanja."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Obaveštenja."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Kontejner preklopnog menija za obaveštenja"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Obriši obaveštenje."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS je omogućen."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Učitavanje GPS-a."</string>
@@ -185,6 +186,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Zaključani ekran."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Podešavanja"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Pregled."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Zatvori"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi je isključen."</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Obriši sve"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Započni odmah"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Nema obaveštenja"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Uređaj se možda nadgleda"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil se možda nadgleda"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Mreža se možda nadgleda"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Mreža se možda nadgleda"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Nadgledanje uređaja"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Nadgledanje profila"</string>
<string name="monitoring_title" msgid="169206259253048106">"Nadgledanje mreže"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Evidentiranje mreže"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Onemogući VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Prekini vezu sa VPN-om"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Uređajem upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator može da nadgleda podešavanja, korporativni pristup, aplikacije, podatke povezane sa uređajem i informacije o lokaciji uređaja, kao i da upravlja njima. Više informacija potražite od administratora."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Uređajem upravlja <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> koristi <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> za upravljanje uređajem."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administrator može da nadgleda podešavanja, korporativni pristup, aplikacije, podatke povezane sa uređajem i informacije o lokaciji uređaja, kao i da upravlja njima."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saznajte više"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Povezani ste sa aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>, koja može da nadgleda aktivnosti na mreži, uključujući imejlove, aplikacije i veb-sajtove."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Otvorite podešavanja VPN-a"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administrator je uključio evidentiranje mreže, koje prati saobraćaj na uređaju.\n\nKontaktirajte administratora za više informacija."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Dali ste dozvolu aplikaciji da podešava VPN vezu.\n\nTa aplikacija može da nadgleda aktivnosti na uređaju i mreži, uključujući imejlove, aplikacije i veb-sajtove."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Uređajem upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator može da nadgleda podešavanja, korporativni pristup, aplikacije, podatke povezane sa uređajem i informacije o lokaciji uređaja, kao i da upravlja njima.\n\nPovezani ste na VPN, koji može da nadgleda aktivnosti na mreži, uključujući imejlove, aplikacije i bezbedne veb-sajtove.\n\nViše informacija potražite od administratora."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Profilom za Work upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator može da nadgleda aktivnosti na mreži, uključujući imejlove, aplikacije i veb-sajtove.\n\nViše informacija potražite od administratora.\n\nPovezani ste i na VPN, koji može da nadgleda aktivnosti na ličnoj mreži."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Povezani ste sa aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može da nadgleda aktivnosti na mreži, uključujući imejlove, aplikacije i veb-sajtove."</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Povezani ste sa aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može da nadgleda aktivnosti na ličnoj mreži, uključujući imejlove, aplikacije i veb-sajtove."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Profilom za Work upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je sa aplikacijom <xliff:g id="APPLICATION">%2$s</xliff:g>, koja može da nadgleda aktivnosti na poslovnoj mreži, uključujući imejlove, aplikacije i veb-sajtove.\n\nViše informacija potražite od administratora."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Profilom za Work upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je sa aplikacijom <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, koja može da nadgleda aktivnosti na poslovnoj mreži, uključujući imejlove, aplikacije i veb-sajtove.\n\nPovezani ste i sa aplikacijom <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, koja može da nadgleda aktivnosti na ličnoj mreži."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Uređajem upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator može da nadgleda podešavanja, korporativni pristup, aplikacije, podatke povezane sa uređajem i informacije o lokaciji uređaja, kao i da upravlja njima.\n\nPovezani ste sa aplikacijom <xliff:g id="APPLICATION">%2$s</xliff:g>, koja može da nadgleda aktivnosti na mreži, uključujući imejlove, aplikacije i veb-sajtove.\n\nViše informacija potražite od administratora."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Uređaj će ostati zaključan dok ga ne otključate ručno"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Brže dobijajte obaveštenja"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Pregledajte ih pre otključavanja"</string>
@@ -432,31 +442,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Proširi"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Skupi"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Ekran je zakačen"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Na ovaj način se ovo stalno prikazuje dok ga ne otkačite. Dodirnite i zadržite Nazad da biste ga otkačili."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Važi"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Ne, hvala"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Želite li da sakrijete <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ovo će se ponovo pojaviti kada ga sledeći put budete uključili u podešavanjima."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Sakrij"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> želi da bude dijalog za jačinu zvuka."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Dozvoli"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Odbij"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> je dijalog za jačinu zvuka"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Dodirnite da biste vratili original."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Koristite profil za Work"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Pozovi"</item>
- <item msgid="5997713001067658559">"Sistem"</item>
- <item msgid="7858983209929864160">"Prsten"</item>
- <item msgid="1850038478268896762">"Medijumi"</item>
- <item msgid="8265110906352372092">"Alarm"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Pristupačnost"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Poziv"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistem"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Zvono"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Mediji"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarm"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Obaveštenje"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Višestruka frekvencija dualnog tona"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Pristupačnost"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Dodirnite da biste uključili zvuk."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Dodirnite da biste podesili na vibraciju. Zvuk usluga pristupačnosti će možda biti isključen."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Dodirnite da biste isključili zvuk. Zvuk usluga pristupačnosti će možda biti isključen."</string>
@@ -468,7 +472,7 @@
<string name="quick_settings" msgid="10042998191725428">"Brza podešavanja"</string>
<string name="status_bar" msgid="4877645476959324760">"Statusna traka"</string>
<string name="overview" msgid="4018602013895926956">"Pregled"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Režim demonstracije"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Režim demonstracije za korisnički interfejs sistema"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Omogući režim demonstracije"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Prikaži režim demonstracije"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Eternet"</string>
@@ -508,20 +512,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Uključeno"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Isključeno"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Pomoću naprednih kontrola za obaveštenja možete da podesite nivo važnosti od 0. do 5. za obaveštenja aplikacije. \n\n"<b>"5. nivo"</b>" \n– Prikazuju se u vrhu liste obaveštenja \n- Dozvoli prekid režima celog ekrana \n– Uvek zaviruj \n\n"<b>"4. nivo"</b>" \n– Spreči prekid režima celog ekrana \n– Uvek zaviruj \n\n"<b>"3. nivo"</b>" \n– Spreči prekid režima celog ekrana \n– Nikada ne zaviruj \n\n"<b>"2. nivo"</b>" \n– Spreči prekid režima celog ekrana \n– Nikada ne zaviruj \n– Nikada ne proizvodi zvuk ili vibraciju \n\n"<b>"1. nivo"</b>" \n– Spreči prekid režima celog ekrana \n– Nikada ne zaviruj \n– Nikada ne proizvodi zvuk ili vibraciju \n– Sakrij na zaključanom ekranu i statusnoj traci \n– Prikazuju se u dnu liste obaveštenja \n\n"<b>"0. nivo"</b>" \n– Blokiraj sva obaveštenja iz aplikacije"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Važnost: Automatski"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Važnost: 0. nivo"</string>
- <string name="min_importance" msgid="560779348928574878">"Važnost: 1. nivo"</string>
- <string name="low_importance" msgid="7571498511534140">"Važnost: 2. nivo"</string>
- <string name="default_importance" msgid="7609889614553354702">"Važnost: 3. nivo"</string>
- <string name="high_importance" msgid="3441537905162782568">"Važnost: 4. nivo"</string>
- <string name="max_importance" msgid="4880179829869865275">"Važnost: 5. nivo"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Aplikacija određuje važnost svakog obaveštenja."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Nikada ne prikazuj obaveštenja iz ove aplikacije"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Bez prekida režima celog ekrana, zavirivanja, zvuka ili vibracije. Sakrij na zaključanom ekranu i statusnoj traci."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Bez prekida režima celog ekrana, zavirivanja, zvuka ili vibracije."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Bez prekida režima celog ekrana ili zavirivanja."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Uvek zaviruj. Bez prekida režima celog ekrana."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Uvek zaviruj i dozvoli prekid režima celog ekrana."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Još podešavanja"</string>
<string name="notification_done" msgid="5279426047273930175">"Gotovo"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Kontrole obaveštenja za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -654,4 +666,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Izmeni redosled podešavanja."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_1">%1$d</xliff:g>. strana od <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Proširi"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Umanji"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Odbaci"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Telefon se zagrejao"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Neke funkcije su ograničene dok se telefon ne ohladi"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Telefon će automatski pokušati da se ohladi. I dalje ćete moći da koristite telefon, ali će sporije reagovati.\n\nKada se telefon ohladi, normalno će raditi."</string>
</resources>
diff --git a/packages/SystemUI/res/values-be-rBY-land/strings.xml b/packages/SystemUI/res/values-be-rBY-land/strings.xml
deleted file mode 100644
index 9b0cf06..0000000
--- a/packages/SystemUI/res/values-be-rBY-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"Цяпер экран заблакаваны ў альбомнай арыентацыі."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-be-rBY/config.xml b/packages/SystemUI/res/values-be/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-be-rBY/config.xml
rename to packages/SystemUI/res/values-be/config.xml
diff --git a/packages/SystemUI/res/values-be-rBY/strings.xml b/packages/SystemUI/res/values-be/strings.xml
similarity index 92%
rename from packages/SystemUI/res/values-be-rBY/strings.xml
rename to packages/SystemUI/res/values-be/strings.xml
index 6ae9db5..4b9cc5a 100644
--- a/packages/SystemUI/res/values-be-rBY/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -167,6 +167,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Зарадка акумулятара, працэнтаў: <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g>."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Сістэмныя налады."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Апавяшчэнні."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Кантэйнер для апавяшчэнняў пры перапаўненні"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Выдаліць апавяшчэнне."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS уключаны."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Атрыманне GPS."</string>
@@ -188,6 +189,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Экран блакіроўкі."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Налады"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Агляд."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Закрыць"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi выключаны."</string>
@@ -406,18 +409,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Ачысціць усё"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Пачаць зараз"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Апавяшчэнняў няма"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"За прыладай могуць назіраць"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"За профілем могуць назіраць"</string>
<string name="vpn_footer" msgid="2388611096129106812">"За сеткай могуць назіраць"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"За сеткай могуць назіраць"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Маніторынг прылад"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Маніторынг профіляў"</string>
<string name="monitoring_title" msgid="169206259253048106">"Маніторынг сеткі"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Журнал сеткі"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Адключыць VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Адлучыць VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Ваша прылада знаходзіцца пад кіраваннем <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nВаш адміністратар можа сачыць і кіраваць наладамі, карпаратыўным доступам, праграмамі, данымі, звязанымі з вашай прыладай, і звесткамі пра месцазнаходжанне вашай прылады. Для атрымання дадатковай інфармацыі звярніцеся да адміністратара."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Ваша прылада знаходзіцца пад кіраваннем <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> выкарыстоўвае <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> для кіравання вашай прыладай."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Адміністратар можа маніторыць налады, карп. доступ, прагр., даныя, звяз. з прыл., і звесткі пра месцазн. прылады і кіраваць гэтым."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Даведацца больш"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Вы падключаны да праграмы <xliff:g id="VPN_APP">%1$s</xliff:g>, якая можа сачыць за вашай сеткавай дзейнасцю, уключаючы электронную пошту, праграмы і вэб-сайты."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" ,"</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Адкрыйце налады VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Ваш адміністратар уключыў вядзенне журнала сеткі, з дапамогай якога адсочваецца трафік на вашай прыладзе.\n\nДля атрымання дадатковай інфармацыі звярніцеся да адміністратара."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Вы далі праграме дазвол на наладжванне злучэння VPN.\n\nГэта праграма можа сачыць за актыўнасцю вашай прылады і вашай сеткавай актыўнасцю, уключаючы электронную пошту, праграмы і вэб-сайты."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Ваша прылада знаходзіцца пад кіраваннем <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nВаш адміністратар можа сачыць і кіраваць наладамі, доступам да карпаратыўных рэсурсаў, праграмамі, данымі, звязанымі з вашай прыладай, і звесткамі пра месцазнаходжанне прылады.\n\nВы падлучаны да VPN, які можа сачыць за вашай сеткавай актыўнасцю, уключаючы электронную пошту, праграмы і вэб-сайты.\n\nДля атрымання дадатковай інфармацыі звярніцеся да адміністратара."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Ваш працоўны профіль знаходзіцца пад кіраваннем <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nВаш адміністратар можа сачыць і кіраваць наладамі, доступам да карпаратыўных рэсурсаў, праграмамі, данымі, звязанымі з вашай прыладай, і звесткамі пра месцазнаходжанне прылады.\n\nДля атрымання дадатковай інфармацыі звярніцеся да адміністратара.\n\nВы таксама падключаны да VPN, які можа сачыць за вашай сеткавай актыўнасцю."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Вы падлучаны да праграмы <xliff:g id="APPLICATION">%1$s</xliff:g>, якая можа сачыць за вашай сеткавай актыўнасцю, уключаючы электронную пошту, праграмы і вэб-сайты."</string>
@@ -425,7 +436,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Вы падключаны да праграмы <xliff:g id="APPLICATION">%1$s</xliff:g>, якая можа сачыць за вашай асабістай сеткавай дзейнасцю, уключаючы электронную пошту, праграмы і вэб-сайты."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Ваш працоўны профіль знаходзіцца пад кіраваннем <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ён падлучаны да праграмы <xliff:g id="APPLICATION">%2$s</xliff:g>, якая можа сачыць за вашай сеткавай актыўнасцю, уключаючы электронную пошту, праграмы і вэб-сайты.\n\nДля атрымання дадатковай інфармацыі звярніцеся да адміністратара."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Ваш працоўны профіль знаходзіцца пад кіраваннем <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ён падлучаны да праграмы <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, якая можа сачыць за вашай сеткавай актыўнасцю, уключаючы электронную пошту, праграмы і вэб-сайты.\n\nВы таксама падлучаны да праграмы <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, якая можа сачыць за вашай асабістай сеткавай актыўнасцю."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Ваша прылада знаходзіцца пад кіраваннем <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nВаш адміністратар можа сачыць і кіраваць наладамі, доступам да карпаратыўных рэсурсаў, праграмамі, данымі, звязанымі з вашай прыладай, і звесткамі пра месцазнаходжанне прылады.\n\nВы падлучаны да праграмы <xliff:g id="APPLICATION">%2$s</xliff:g>, якая можа сачыць за вашай сеткавай актыўнасцю, уключаючы электронную пошту, праграмы і вэб-сайты.\n\nДля атрымання дадатковай інфармацыі звярніцеся да адміністратара."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Прылада будзе заставацца заблакіраванай, пакуль вы не разблакіруеце яе ўручную"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Атрымлівайце апавяшчэнні хутчэй"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Праглядайце іх перад разблакіроўкай"</string>
@@ -436,31 +446,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Разгарнуць"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Згарнуць"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Экран замацаваны"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Будзе паказвацца, пакуль не адмацуеце. Дакраніцеся і ўтрымлівайце кнопку \"Назад\", каб адмацаваць."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Зразумела"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Не, дзякуй"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Схаваць <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Гэта паведамленне з\'явіцца зноў у наступны раз, калі вы ўключыце яго ў наладах."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Схаваць"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> хоча быць дыялогам гучнасці."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Дазволіць"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Адмовіць"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> з\'яўляецца дыялогам гучнасці"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Дакраніцеся, каб аднавіць арыгінал."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Вы выкарыстоўваеце свой працоўны профіль"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Выклік"</item>
- <item msgid="5997713001067658559">"Сістэма"</item>
- <item msgid="7858983209929864160">"Званок"</item>
- <item msgid="1850038478268896762">"Медыя"</item>
- <item msgid="8265110906352372092">"Будзільнік"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Спецыяльныя магчымасці"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Выклік"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Сістэма"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Званок"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Мультымедыя"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Будзільнік"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Апавяшчэнне"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Двухтанальны шматчастотны"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Спецыяльныя магчымасці"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Дакраніцеся, каб уключыць гук."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Дакраніцеся, каб уключыць вібрацыю. Можа быць адключаны гук службаў спецыяльных магчымасцей."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Дакраніцеся, каб адключыць гук. Можа быць адключаны гук службаў спецыяльных магчымасцей."</string>
@@ -472,7 +476,7 @@
<string name="quick_settings" msgid="10042998191725428">"Хуткія налады"</string>
<string name="status_bar" msgid="4877645476959324760">"Панэль стану"</string>
<string name="overview" msgid="4018602013895926956">"Агляд"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Дэманстрацыйны рэжым"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Рэжым дэманстрацыі сістэмнага інтэрфейсу карыстальніка"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Уключыць дэманстрацыйны рэжым"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Паказваць дэманстрацыйны рэжым"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -512,20 +516,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Уключана"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Выключана"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"З дапамогай пашыранага кіравання апавяшчэннямі вы можаце задаваць узровень важнасці апавяшчэнняў праграмы ад 0 да 5. \n\n"<b>"Узровень 5"</b>" \n- Паказваць уверсе спіса апавяшчэнняў \n- Дазваляць перапыняць рэжым поўнага экрана \n- Заўсёды дазваляць кароткі паказ \n\n"<b>"Узровень 4"</b>" \n- Забараняць перапыняць рэжым поўнага экрана \n- Заўсёды дазваляць кароткі паказ \n\n"<b>"Узровень 3"</b>" \n- Забараняць перапыняць рэжым поўнага экрана \n- Ніколі не дазваляць кароткі паказ \n\n"<b>"Узровень 2"</b>" \n- Забараняць перапыняць рэжым поўнага экрана \n- Ніколі не дазваляць кароткі паказ \n- Ніколі не прайграваць гук і не вібрыраваць \n\n"<b>"Узровень 1"</b>" \n- Забараняць перапыняць рэжым поўнага экрана \n- Ніколі не дазваляць кароткі паказ \n- Ніколі не прайграваць гук і не вібрыраваць \n- Хаваць з экрана блакіроўкі і панэлі стану \n- Паказваць унізе спіса апавяшчэнняў \n\n"<b>"Узровень 0"</b>" \n- Блакіраваць усе апавяшчэнні ад праграмы"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Важнасць: аўтаматычна"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Важнасць: узровень 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Важнасць: узровень 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Важнасць: узровень 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Важнасць: узровень 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Важнасць: узровень 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Важнасць: узровень 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Праграма вызначае важнасць кожнага апавяшчэння."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Ніколі не паказваць апавяшчэнні ад гэтай праграмы."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Не перап. рэжым поўн. экр., не дазв. карот. паказ, гук або вібр. Хаваць з экр. блак. і панэлі стану."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Не перапыняць рэжым поўнага экрана, не дазваляць кароткі паказ, прайгранне гуку або вібрацыю."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Не перапыняць рэжым поўнага экрана і не дазваляць кароткі паказ."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Заўсёды дазваляць кароткі паказ. Не перапыняць рэжым поўнага экрана."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Заўсёды дазваляць кароткі паказ, дазваляць перапыняць рэжым поўнага экрана."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Дадатковыя налады"</string>
<string name="notification_done" msgid="5279426047273930175">"Гатова"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Элементы кантролю апавяшчэнняў <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -658,4 +670,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Змяніць парадак налад."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Старонка <xliff:g id="ID_1">%1$d</xliff:g> з <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Разгарнуць"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Згарнуць"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Адхіліць"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Тэлефон награваецца"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Некаторыя функцыі абмежаваны, пакуль тэлефон астывае"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Ваш тэлефон аўтаматычна паспрабуе астыць. Вы можаце па-ранейшаму карыстацца сваім тэлефонам, але ён можа працаваць больш павольна.\n\nПасля таго як ваш тэлефон астыне, ён будзе працаваць у звычайным рэжыме."</string>
</resources>
diff --git a/packages/SystemUI/res/values-be-rBY/strings_car.xml b/packages/SystemUI/res/values-be/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-be-rBY/strings_car.xml
rename to packages/SystemUI/res/values-be/strings_car.xml
diff --git a/packages/SystemUI/res/values-be-rBY/strings_tv.xml b/packages/SystemUI/res/values-be/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-be-rBY/strings_tv.xml
rename to packages/SystemUI/res/values-be/strings_tv.xml
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 6079354..e8b4c16 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Батерията се зарежда – <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> процента."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Системни настройки."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Известия."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Контейнер за препълване за известията"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Изчистване на известието."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS е активиран."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS се придобива."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Заключване на екрана."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Настройки"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Общ преглед."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Затваряне"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Функцията за Wi-Fi се изключи."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Изчистване на всички"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Стартиране сега"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Няма известия"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Устройството може да се наблюдава"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Възможно е потребителският профил да се наблюдава"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Мрежата може да се наблюдава"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Мрежата може да се наблюдава"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Наблюдение на устройството"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Наблюдаване на потр. профил"</string>
<string name="monitoring_title" msgid="169206259253048106">"Наблюдение на мрежата"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Регистриране на мрежовата активност"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Деактивиране на VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Прекратяване на връзката с VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Устройството ви се управлява от <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистраторът ви може да наблюдава и управлява настройките, корпоративния достъп, приложенията и данните, свързани с устройството ви, включително информацията за местоположението му. За още подробности се свържете с администратора си."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Устройството ви се управлява от <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> използва <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>, за да управлява устройството ви."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Администраторът ви може да набл. и управл. настройките, корпор. достъп, прилож., данните, свързани с у-вото, както и информ. за местоп. на у-вото ви."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Научете повече"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Установена е връзка с приложението <xliff:g id="VPN_APP">%1$s</xliff:g>, което може да наблюдава активността ви в мрежата, вкл. имейли, приложения и уебсайтове."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Отваряне на настройките за VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Администраторът ви е включил функцията за регистриране на мрежовата активност, която следи трафика на устройството ви.\n\nЗа повече информация се свържете с администратора си."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Разрешихте на приложение да настрои връзка с виртуална частна мрежа (VPN).\n\nТова приложение може да наблюдава активността ви на устройството и в мрежата, включително имейли, приложения и уебсайтове."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Устройството ви се управлява от <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистраторът ви може да наблюдава и управлява настройките, корпоративния достъп, приложенията и данните, свързани с устройството ви, включително информацията за местоположението му.\n\nСвързани сте с виртуална частна мрежа (VPN) и активността ви в нея може да се наблюдава, включително имейли, приложения и уебсайтове.\n\nЗа още информация се свържете с администратора си."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Служебният ви потребителски профил се управлява от <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистраторът ви може да наблюдава активността ви в мрежата, включително имейли, приложения и уебсайтове.\n\nЗа още информация се свържете с администратора си.\n\nСъщо така е установена връзка с виртуална частна мрежа (VPN) и активността ви в нея може да се наблюдава."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Установена е връзка с приложението <xliff:g id="APPLICATION">%1$s</xliff:g>, което може да наблюдава активността ви в мрежата, включително имейли, приложения и уебсайтове."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Установена е връзка с приложението <xliff:g id="APPLICATION">%1$s</xliff:g>, което може да наблюдава личната ви активност в мрежата, включително имейли, приложения и уебсайтове."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Служебният ви потребителски профил се управлява от <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Той е свързан с приложението <xliff:g id="APPLICATION">%2$s</xliff:g>, което може да наблюдава служебната ви активност в мрежата, включително имейли, приложения и уебсайтове.\n\nЗа още информация се свържете с администратора си."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Служебният ви потребителски профил се управлява от <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Той е свързан с приложението <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, което може да наблюдава служебната ви активност в мрежата, включително имейли, приложения и уебсайтове.\n\nУстановена е връзка и с приложението <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, което може да наблюдава личната ви активност в мрежата."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Устройството ви се управлява от <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистраторът ви може да наблюдава и управлява настройките, корпоративния достъп, приложенията и данните, свързани с устройството ви, включително информацията за местоположението му.\n\nУстановена е връзка с приложението <xliff:g id="APPLICATION">%2$s</xliff:g>, което може да наблюдава активността ви в мрежата, включително имейли, приложения и уебсайтове.\n\nЗа още информация се свържете с администратора си."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Устройството ще остане заключено, докато не го отключите ръчно"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Получавайте известия по-бързо"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Вижте известията, преди да отключите"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Разгъване"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Свиване"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Екранът е фиксиран"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Екранът ще се показва, докато не го освободите с докосване и задържане на бутона за връщане назад."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Разбрах"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Не, благодаря"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Да се скрие ли „<xliff:g id="TILE_LABEL">%1$s</xliff:g>“?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Бързите настройки ще се покажат отново следващия път, когато ги включите от „Настройки“."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Скриване"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> иска да изпълнява ролята на диалоговия прозорец за силата на звука."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Разрешаване"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Отказване"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> изпълнява ролята на диалоговия прозорец за силата на звука"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Докоснете, за да се възстанови първоначалната стойност."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Използвате служебния си потребителски профил"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Обаждане"</item>
- <item msgid="5997713001067658559">"Система"</item>
- <item msgid="7858983209929864160">"Позвъняване"</item>
- <item msgid="1850038478268896762">"Мултимедия"</item>
- <item msgid="8265110906352372092">"Будилник"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Достъпност"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Обаждане"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Система"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Позвъняване"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Мултимедия"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Будилник"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Известие"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Тонално набиране"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Достъпност"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Докоснете, за да включите отново звука."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Докоснете, за да зададете вибриране. Възможно е звукът на услугите за достъпност да бъде заглушен."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Докоснете, за да заглушите звука. Възможно е звукът на услугите за достъпност да бъде заглушен."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Бързи настройки"</string>
<string name="status_bar" msgid="4877645476959324760">"Лента на състоянието"</string>
<string name="overview" msgid="4018602013895926956">"Общ преглед"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Демонстрационен режим"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Демонстрационен режим на системния ПИ"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Активиране на демонстрационния режим"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Показване на демонстрационния режим"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Вкл."</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Изкл."</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"С помощта на контролите за известията можете да зададете ниво на важност от 0 до 5 за известията от дадено приложение. \n\n"<b>"Ниво 5"</b>" \n– Показване най-горе в списъка с известия. \n– Разрешаване на прекъсването на цял екран. \n– Известията винаги се показват мимолетно. \n\n"<b>"Ниво 4"</b>" \n– Предотвратяване на прекъсването на цял екран. \n– Известията винаги се показват мимолетно. \n\n"<b>"Ниво 3"</b>" \n– Предотвратяване на прекъсването на цял екран. \n– Известията никога не се показват мимолетно. \n\n"<b>"Ниво 2"</b>" \n– Предотвратяване на прекъсването на цял екран. \n– Известията никога не се показват мимолетно. \n– Без издаване на звуков сигнал и вибриране. \n\n"<b>"Ниво 1"</b>" \n– Предотвратяване на прекъсването на цял екран. \n– Известията никога не се показват мимолетно. \n– Без издаване на звуков сигнал и вибриране. \n– Скриване от заключения екран и лентата на състоянието. \n– Показване най-долу в списъка с известия. \n\n"<b>"Ниво 0"</b>" \n– Блокиране на всички известия от приложението."</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Важност: Автоматично"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Важност: Ниво 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Важност: Ниво 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Важност: Ниво 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Важност: Ниво 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Важност: Ниво 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Важност: Ниво 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Приложението определя важността на всяко известие."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Известията от това приложение никога не се показват."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Без прекъсв. на цял екран, мимол. показв., звук или вибр. Скриване от закл. екран и лентата на съст."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Без прекъсване на цял екран, мимолетно показване, звук или вибриране."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Без прекъсване на цял екран или мимолетно показване."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Приложенията винаги се показват мимолетно. Без прекъсване на цял екран."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Приложенията винаги се показват мимолетно и е разрешено прекъсването на цял екран."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Още настройки"</string>
<string name="notification_done" msgid="5279426047273930175">"Готово"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Контроли за известията от <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Редактиране на подредбата на настройките."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Страница <xliff:g id="ID_1">%1$d</xliff:g> от <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Разгъване"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Намаляване"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Отхвърляне"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Телефонът загрява"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Някои функции са ограничени, докато телефонът се охлажда"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Телефонът ви автоматично ще направи опит за охлаждане. Пак можете да го използвате, но той може да работи по-бавно.\n\nСлед като се охлади, ще работи нормално."</string>
</resources>
diff --git a/packages/SystemUI/res/values-bn-rBD-land/strings.xml b/packages/SystemUI/res/values-bn-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-bn-rBD-land/strings.xml
rename to packages/SystemUI/res/values-bn-land/strings.xml
diff --git a/packages/SystemUI/res/values-bn-rWB-land/strings.xml b/packages/SystemUI/res/values-bn-rWB-land/strings.xml
deleted file mode 100644
index ac873fa..0000000
--- a/packages/SystemUI/res/values-bn-rWB-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"এখন ভূদৃশ্য সজ্জাতে স্ক্রীণ লক করা হয়েছে৷"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-bn-rBD/config.xml b/packages/SystemUI/res/values-bn/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-bn-rBD/config.xml
rename to packages/SystemUI/res/values-bn/config.xml
diff --git a/packages/SystemUI/res/values-bn-rBD/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
similarity index 92%
rename from packages/SystemUI/res/values-bn-rBD/strings.xml
rename to packages/SystemUI/res/values-bn/strings.xml
index 32d00f6..2e543b1 100644
--- a/packages/SystemUI/res/values-bn-rBD/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"ব্যাটারি চার্জ হচ্ছে, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> শতাংশ৷"</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"সিস্টেম সেটিংস৷"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"বিজ্ঞপ্তিগুলি৷"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"বিজ্ঞপ্তি ওভারফ্লো কন্টেনার"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"বিজ্ঞপ্তি সাফ করুন৷"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS সক্ষম করা হয়েছে৷"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS অর্জন করা হচ্ছে৷"</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"লক স্ক্রীন।"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"সেটিংস"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"এক নজরে৷"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"বন্ধ করুন"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>।"</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"WiFi বন্ধ হয়েছে।"</string>
@@ -341,7 +344,7 @@
<string name="ssl_ca_cert_warning" msgid="9005954106902053641">"নেটওয়ার্ক নিরীক্ষণ\nকরা হতে পারে"</string>
<string name="description_target_search" msgid="3091587249776033139">"অনুসন্ধান করুন"</string>
<string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> এর জন্য উপরের দিকে স্লাইড করুন৷"</string>
- <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> এর জন্য বাম দিকে স্লাইড করুন৷"</string>
+ <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> এর জন্য বাঁ দিকে স্লাইড করুন৷"</string>
<string name="zen_priority_introduction" msgid="3070506961866919502">"আপনার নির্দিষ্ট অ্যালার্ম, অনুস্মারক, ইভেন্ট, এবং কলারগুলি ব্যতীত আপনাকে শব্দ এবং কম্পনগুলির দ্বারা বিরক্ত করা হবে না৷"</string>
<string name="zen_priority_customize_button" msgid="7948043278226955063">"কাস্টমাইজ করুন"</string>
<string name="zen_silence_introduction_voice" msgid="2284540992298200729">"এটি অ্যালার্ম, সংগীত, ভিডিও এবং গেমগুলি থেকে আসা সমস্ত রকমের ধ্বনি এবং কম্পনগুলিকে বন্ধ করে৷ আপনি এখনও ফোন কলগুলি করতে পারবেন৷"</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"সবকিছু সাফ করুন"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"এখন শুরু করুন"</string>
<string name="empty_shade_text" msgid="708135716272867002">"কোনো বিজ্ঞপ্তি নেই"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"ডিভাইসটি নিরীক্ষণ করা হতে পারে"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"প্রোফাইল পর্যবেক্ষণ করা হতে পারে"</string>
<string name="vpn_footer" msgid="2388611096129106812">"নেটওয়ার্ক নিরীক্ষণ করা হতে পারে"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"নেটওয়ার্ক নিরীক্ষণ করা হতে পারে"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"ডিভাইস নিরীক্ষণ"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"প্রোফাইল দেখরেখ করা"</string>
<string name="monitoring_title" msgid="169206259253048106">"নেটওয়ার্ক নিরীক্ষণ"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"নেটওয়ার্ক লগিং"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN অক্ষম করুন"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN এর সংযোগ বিচ্ছিন্ন করুন"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার ডিভাইস পরিচালনা করে৷\n\nআপনার প্রশাসক আপনার ডিভাইসের সাথে সম্পর্কিত সেটিংস, কর্পোরেট অ্যাক্সেস, অ্যাপ্লিকেশানগুলি, ডেটা এবং ডিভাইসের অবস্থান সম্পর্কিত তথ্য নিরীক্ষণ ও পরিচালনা করতে পারেন৷ আরো তথ্যের জন্য, আপনার প্রশাসকের সাথে যোগাযোগ করুন৷"</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"আপনার ডিভাইসটি <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> এর দ্বারা পরিচালিত৷"</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> আপনার ডিভাইস পরিচালনা করার জন্য <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ব্যবহার করে৷"</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"আপনার প্রশাসক আপনার ডিভাইসের অবস্থান তথ্য সহ এই ডিভাইসের সেটিংস, কর্পোরেট অ্যাক্সেস, অ্যাপ্স, ডেটা নিরীক্ষণ ও পরিচালনা করতে পারেন৷"</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"আরো জানুন"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"আপনি <xliff:g id="VPN_APP">%1$s</xliff:g> এ সংযুক্ত হয়েছেন, যা ইমেল, অ্যাপ এবং ওয়েবসাইটগুলি সহ আপনার নেটওয়ার্ক কার্যকলাপ নিরীক্ষণ করবে৷"</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN সেটিংস খুলুন"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"আপনার প্রশাসক \'নেটওয়ার্ক লগিং\' চালু করেছেন, যা আপনার ডিভাইসের ট্রাফিক মনিটর করে৷\n\nআরো তথ্যের জন্য আপনার প্রশাসকের সাথে যোগাযোগ করুন৷"</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"আপনি VPN সংযোগ সেট আপ করার জন্য একটি অ্যাপ্লিকেশানকে অনুমতি দিন৷\n\nএই অ্যাপ্লিকেশানটি ইমেল, অ্যাপ্লিকেশান ও ওয়েবসাইটগুলি সহ আপনার ডিভাইস এবং নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে।"</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার ডিভাইস পরিচালনা করে৷\n\nআপনার প্রশাসক আপনার ডিভাইসের সাথে সম্পর্কিত সেটিংস, কর্পোরেট অ্যাক্সেস, অ্যাপ্লিকেশান ডেটা এবং ডিভাইসের অবস্থান সম্পর্কিত তথ্য নিরীক্ষণ ও পরিচালনা করতে পারেন৷\n\nআপনি একটি VPN এর সাথে সংযুক্ত রয়েছেন যা ইমেল, অ্যাপ্লিকেশান ও নিরাপদ ওয়েবসাইটগুলি সহ আপনার নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে৷\n\nআরো তথ্যের জন্য, আপনার প্রশাসকের সাথে যোগাযোগ করুন৷"</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার কাজের প্রোফাইল পরিচালনা করে৷\n\nআপনার প্রশাসক ইমেল, অ্যাপ্লিকেশান ও ওয়েবসাইটগুলি সহ আপনার নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে সক্ষম৷\n\nআরো তথ্যের জন্য, আপনার প্রশাসকের সাথে যোগাযোগ করুন৷\n\nএছাড়াও আপনি একটি VPN, এর সাথে সংযুক্ত রয়েছেন যা আপনার নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে৷"</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"আপনি <xliff:g id="APPLICATION">%1$s</xliff:g> -এ সংযুক্ত হয়েছেন, যা ইমেল, অ্যাপ্লিকেশান এবং ওয়েবসাইটগুলি সমেত আপনার নেটওয়ার্ক কার্যকলাপ নিরীক্ষণ করতে পারে৷"</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"আপনি <xliff:g id="APPLICATION">%1$s</xliff:g> এর সাথে সংযুক্ত হয়েছেন, যা ইমেল, অ্যাপ এবং ওয়েবসাইটগুলি সহ আপনার ব্যক্তিগত নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করবে৷"</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার কাজের প্রোফাইল পরিচালনা করে৷ এটি <xliff:g id="APPLICATION">%2$s</xliff:g> -এ সংযুক্ত রয়েছে যা আপনার ইমেল, অ্যাপ্লিকেশান ও ওয়েবসাইটগুলি সহ আপনার কাজের নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে৷\n\nআরো তথ্যের জন্য, আপনার প্রশাসকের সাথে যোগাযোগ করুন৷"</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার কাজের প্রোফাইল পরিচালনা করে৷ এটি <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> -এ সংযুক্ত রয়েছে যা আপনার ইমেল, অ্যাপ্লিকেশান ও ওয়েবসাইটগুলি সহ আপনার কাজের নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে৷\n\nএছাড়াও আপনি <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> এর সাথে সংযুক্ত রয়েছেন যা আপনার ব্যক্তিগত নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে৷"</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার ডিভাইস পরিচালনা করে৷\n\nআপনার প্রশাসক আপনার ডিভাইসের সাথে সম্পর্কিত সেটিংস, কর্পোরেট অ্যাক্সেস, অ্যাপ্লিকেশান ডেটা এবং ডিভাইসের অবস্থান সম্পর্কিত তথ্য নিরীক্ষণ ও পরিচালনা করতে পারেন৷\n\nআপনি <xliff:g id="APPLICATION">%2$s</xliff:g> এর সাথে সংযুক্ত রয়েছেন যা ইমেল, অ্যাপ্লিকেশান ও ওয়েবসাইটগুলি সহ আপনার নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে৷\n\nআরো তথ্যের জন্য, আপনার প্রশাসকের সাথে যোগাযোগ করুন৷"</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"আপনি নিজে আনলক না করা পর্যন্ত ডিভাইসটি লক হয়ে থাকবে"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"বিজ্ঞপ্তিগুলি আরো দ্রুত পান"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"আপনি আনলক করার আগে ওগুলো দেখুন"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"প্রসারিত করুন"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"সঙ্কুচিত করুন"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"স্ক্রীন পিন করা হয়েছে"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"এটি আপনি আনপিন না করা পর্যন্ত এটিকে প্রদর্শিত করবে৷ আনপিন করতে \'ফিরুন\' এ স্পর্শ করে ধরে রাখুন৷"</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"বুঝেছি"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"না থাক"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> লুকাবেন?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"আপনি পরের বার সেটিংস-এ এটি চালু করলে এটি উপস্থিত হবে"</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"লুকান"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ভলিউম ডায়লগ হতে চায়৷"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"অনুমতি দিন"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"প্রত্যাখ্যান করুন"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> হল ভলিউম ডায়লগ"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"আসলটি পুনঃস্থাপন করতে আলতো চাপ দিন৷"</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"আপনি আপনার কাজের প্রোফাইল ব্যবহার করছেন"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"কল করুন"</item>
- <item msgid="5997713001067658559">"সিস্টেম"</item>
- <item msgid="7858983209929864160">"রিং"</item>
- <item msgid="1850038478268896762">"মিডিয়া"</item>
- <item msgid="8265110906352372092">"অ্যালার্ম"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"ব্লুটুথ"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"অ্যাক্সেসযোগ্যতা"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"কল"</string>
+ <string name="stream_system" msgid="7493299064422163147">"সিস্টেম"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"রিং"</string>
+ <string name="stream_music" msgid="9086982948697544342">"মিডিয়া"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"অ্যালার্ম"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"বিজ্ঞপ্তি"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"ব্লুটুথ"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"ডুয়েল মাল্টি টোন ফ্রিকোয়েন্সি"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"অ্যাক্সেসযোগ্যতা"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s। সশব্দ করতে আলতো চাপুন।"</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s। কম্পন এ সেট করতে আলতো চাপুন। অ্যাক্সেসযোগ্যতার পরিষেবাগুলিকে নিঃশব্দ করা হতে পারে।"</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s। নিঃশব্দ করতে আলতো চাপুন। অ্যাক্সেসযোগ্যতার পরিষেবাগুলিকে নিঃশব্দ করা হতে পারে।"</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"দ্রুত সেটিংস"</string>
<string name="status_bar" msgid="4877645476959324760">"স্থিতি দন্ড"</string>
<string name="overview" msgid="4018602013895926956">"এক নজরে"</string>
- <string name="demo_mode" msgid="2389163018533514619">"ডেমো মোড"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"সিস্টেম UI ডেমো মোড"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"ডেমো মোড সক্ষম করুন"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"ডেমো মোড দেখান"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"ইথারনেট"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"চালু আছে"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"বন্ধ আছে"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"পাওয়ার বিজ্ঞপ্তির নিয়ন্ত্রণগুলি ব্যহবার করে, আপনি কোনো অ্যাপ্লিকেশানের বিজ্ঞপ্তির জন্য ০ থেকে ৫ পর্যন্ত একটি গুরুত্বের লেভেলকে সেট করতে পারবেন৷ \n\n"<b>"লেভেল ৫"</b>" \n- বিজ্ঞপ্তি তালিকার শীর্ষে দেখায় \n- পূর্ণ স্ক্রীনের বাধাকে অনুমতি দেয় \n- সর্বদা স্ক্রীনে উপস্থিত হয় \n\n"<b>"লেভেল ৪"</b>" \n- পূর্ণ স্ক্রীনের বাধাকে আটকায় \n- সর্বদা স্ক্রীনে উপস্থিত হয় \n\n"<b>"লেভেল ৩"</b>" \n- পূর্ণ স্ক্রীনের বাধাকে আটকায় \n- কখনই স্ক্রীনে উপস্থিত হয় না \n\n"<b>"লেভেল ২"</b>" \n- পূর্ণ স্ক্রীনের বাধাকে আটকায় \n- কখনই স্ক্রীনে উপস্থিত হয় না \n- কখনই শব্দ এবং কম্পন করে না \n\n"<b>"লেভেল ১"</b>" \n- পূর্ণ স্ক্রীনের বাধাকে আটকায় \n- কখনই স্ক্রীনে উপস্থিত হয় না \n- কখনই শব্দ এবং কম্পন করে না \n- লক স্ক্রীন এবং স্থিতি দন্ড থেকে লুকায় \n- বিজ্ঞপ্তি তালিকার নীচের দিকে দেখায় \n\n"<b>"লেভেল ০"</b>" \n- অ্যাপ্লিকেশান থেকে সমস্ত বিজ্ঞপ্তিকে অবরূদ্ধ করে"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"গুরুত্ব: স্বয়ংক্রিয়"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"গুরুত্ব: লেভেল ০"</string>
- <string name="min_importance" msgid="560779348928574878">"গুরুত্ব: লেভেল ১"</string>
- <string name="low_importance" msgid="7571498511534140">"গুরুত্ব: লেভেল ২"</string>
- <string name="default_importance" msgid="7609889614553354702">"গুরুত্ব: লেভেল ৩"</string>
- <string name="high_importance" msgid="3441537905162782568">"গুরুত্ব: লেভেল ৪"</string>
- <string name="max_importance" msgid="4880179829869865275">"গুরুত্ব: লেভেল ৫"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"অ্যাপ্লিকেশান প্রতিটি বিজ্ঞপ্তির গুরুত্ব নির্ধারণ করে৷"</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"এই অ্যাপ্লিকেশান থেকে কখনোই বিজ্ঞপ্তিগুলিকে দেখাবে না।"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"পূর্ণ স্ক্রীনের কোনো বাধা নেই, স্ক্রীনে উপস্থিত হয় না, শব্দ বা কম্পন করে না৷ লক স্ক্রীন এবং স্থিতি দন্ড থেকে লুকায়৷"</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"পূর্ণ স্ক্রীনের কোনো বাধা নেই, স্ক্রীনে উপস্থিত হয় না, শব্দ বা কম্পন করে না৷"</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"পূর্ণ স্ক্রীনের কোনো বাধা নেই বা স্ক্রীনে উপস্থিত হবে না৷"</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"সর্বদা স্ক্রীনে উপস্থিত হয়৷ পূর্ণ স্ক্রীনের কোনো বাধা নেই৷"</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"সর্বদা স্ক্রীনে উপস্থিত হয়, এবং পূর্ণ স্ক্রীনের বাধাকে অনুমতি দেয়৷"</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"আরো সেটিংস"</string>
<string name="notification_done" msgid="5279426047273930175">"সম্পন্ন"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> বিজ্ঞপ্তির নিয়ন্ত্রণগুলি"</string>
@@ -532,7 +544,7 @@
<string name="keyboard_key_back" msgid="2337450286042721351">"ফিরুন"</string>
<string name="keyboard_key_dpad_up" msgid="5584144111755734686">"উপরে"</string>
<string name="keyboard_key_dpad_down" msgid="7331518671788337815">"নিচে"</string>
- <string name="keyboard_key_dpad_left" msgid="1346446024676962251">"বাম"</string>
+ <string name="keyboard_key_dpad_left" msgid="1346446024676962251">"বাঁ"</string>
<string name="keyboard_key_dpad_right" msgid="3317323247127515341">"ডান"</string>
<string name="keyboard_key_dpad_center" msgid="2566737770049304658">"কেন্দ্র"</string>
<string name="keyboard_key_tab" msgid="3871485650463164476">"ট্যাব"</string>
@@ -619,7 +631,7 @@
</string-array>
<string name="other" msgid="4060683095962566764">"অন্যান্য"</string>
<string name="accessibility_divider" msgid="5903423481953635044">"বিভক্ত-স্ক্রীন বিভাজক"</string>
- <string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"বাম দিকের অংশ নিয়ে পূর্ণ স্ক্রীন"</string>
+ <string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"বাঁ দিকের অংশ নিয়ে পূর্ণ স্ক্রীন"</string>
<string name="accessibility_action_divider_left_70" msgid="3612060638991687254">"৭০% বাকি আছে"</string>
<string name="accessibility_action_divider_left_50" msgid="1248083470322193075">"৫০% বাকি আছে"</string>
<string name="accessibility_action_divider_left_30" msgid="543324403127069386">"৩০% বাকি আছে"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"ক্রম বা সেটিংস সম্পাদনা করুন৷"</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_2">%2$d</xliff:g>টির মধ্যে <xliff:g id="ID_1">%1$d</xliff:g> নং পৃষ্ঠা"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"প্রসারিত করুন"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"ছোটো করুন"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"খারিজ করুন"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"ফোনটি গরম হচ্ছে"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"ফোনটি ঠান্ডা হওয়ার সময় কিছু বৈশিষ্ট্য সীমিত হতে পারে"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"আপনার ফোনটি নিজে থেকেই ঠান্ডা হওয়ার চেষ্টা করবে৷ আপনি তবুও আপনার ফোন ব্যবহার করতে পারেন, কিন্তু এটি একটু ধীরে চলতে পারে৷\n\nআপনার ফোনটি পুরোপুরি ঠান্ডা হয়ে গেলে এটি স্বাভাবিকভাবে চলবে৷"</string>
</resources>
diff --git a/packages/SystemUI/res/values-bn-rBD/strings_car.xml b/packages/SystemUI/res/values-bn/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-bn-rBD/strings_car.xml
rename to packages/SystemUI/res/values-bn/strings_car.xml
diff --git a/packages/SystemUI/res/values-bn-rBD/strings_tv.xml b/packages/SystemUI/res/values-bn/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-bn-rBD/strings_tv.xml
rename to packages/SystemUI/res/values-bn/strings_tv.xml
diff --git a/packages/SystemUI/res/values-bs-rBA-land/strings.xml b/packages/SystemUI/res/values-bs-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-bs-rBA-land/strings.xml
rename to packages/SystemUI/res/values-bs-land/strings.xml
diff --git a/packages/SystemUI/res/values-bs-rBA/config.xml b/packages/SystemUI/res/values-bs/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-bs-rBA/config.xml
rename to packages/SystemUI/res/values-bs/config.xml
diff --git a/packages/SystemUI/res/values-bs-rBA/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
similarity index 93%
rename from packages/SystemUI/res/values-bs-rBA/strings.xml
rename to packages/SystemUI/res/values-bs/strings.xml
index 0c35e18..f6dcf68 100644
--- a/packages/SystemUI/res/values-bs-rBA/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -164,6 +164,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Punjenje baterije, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> procenata."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Postavke sistema."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Obavještenja."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Spremnik za prelijevanje obavještenja"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Ukloniti obavještenje."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS omogućen."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Uspostavljanje GPS veze."</string>
@@ -185,6 +186,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Zaključan ekran."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Postavke"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Pregled."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Zatvori"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi je isključen."</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Očisti sve"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Pokreni odmah"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Nema obavještenja"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Uređaj može biti nadziran"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil može biti nadziran"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Mreža može biti nadzirana"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Mreža može biti nadzirana"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Praćenje uređaja"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Praćenje profila"</string>
<string name="monitoring_title" msgid="169206259253048106">"Praćenje mreže"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN mreža"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Zapisivanje na mreži"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Isključi VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Prekini VPN vezu"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Vašim uređajem upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVaš administrator može pratiti postavke, korporativni pristup, aplikacije, podatke povezane sa vašim uređajem i informacije o lokaciji uređaja, kao i upravljati njima. Za više informacija kontaktirajte svog administratora."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Vašim uređajem upravlja aplikacija <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> koristi aplikaciju <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> za upravljanje vašim uređajem."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Vaš administrator može pratiti postavke, korporativni pristup, aplikacije, podatke povezane s vašim uređajem i informacije o lokaciji vašeg uređaja."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saznajte više"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Povezani ste s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>, koja može pratiti vašu aktivnost na mreži, uključujući e-poruke i web lokacije."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Postavke otvorene VPN mreže"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Vaš administrator je uključio zapisivanje na mreži, čime se prati saobraćaj na vašem uređaju.\n\nZa više informacija obratite se administratoru."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Jednoj aplikaciji ste dali odobrenje da uspostavi VPN vezu.\n\nTa aplikacija može pratiti vašu aktivnost na uređaju i mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Vašim uređajem upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVaš administrator može pratiti postavke, korporativni pristup, aplikacije, podatke povezane sa vašim uređajem i informacije o lokaciji uređaja, kao i upravljati njima.\n\nPovezani ste na VPN, koji može pratiti vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nZa više informacija kontaktirajte svog administratora."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Vašim profilom za posao upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVaš administrator može pratiti vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nZa više informacija kontaktirajte svog administratora.\n\nPovezani ste i na VPN, koji može pratiti vašu aktivnost na mreži."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Povezani ste sa aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može pratiti vašu aktivnost na mreži, uključujući e-mailove, aplikacije i web-lokacije."</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Povezani ste na aplikaciju <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može pratiti vaše privatne aktivnosti na mreži, uključujući e-poštu, aplikacije i web stranice."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Profilom za posao upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je sa aplikacijom <xliff:g id="APPLICATION">%2$s</xliff:g>, koja može pratiti vašu aktivnost na radnoj mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nZa više informacija kontaktirajte svog administratora."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Profilom za posao upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je sa aplikacijom <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, koja može pratiti vašu aktivnost na radnoj mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nPovezani ste i sa aplikacijom <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, koja može pratiti vašu aktivnost na privatnoj mreži."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Vašim uređajem upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVaš administrator može pratiti postavke, korporativni pristup, aplikacije, podatke povezane sa vašim uređajem i informacije o lokaciji uređaja, kao i upravljati njima.\n\nPovezani ste sa aplikacijom <xliff:g id="APPLICATION">%2$s</xliff:g>, koja može pratiti vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nZa više informacija kontaktirajte svog administratora."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Uređaj će ostati zaključan dok ga ručno ne otključate"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Brže primaj obavještenja"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Vidi ih prije otključavanja"</string>
@@ -432,31 +442,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Proširi"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Skupi"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Ekran je prikačen"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Ovim ekran ostaje prikazan dok ga ne otkačite. Da biste ga otkačili dodirnite i držite Nazad."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Jasno mi je"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Ne, hvala"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Želite li sakriti <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Pojavit će se sljedeći put kada opciju uključite u postavkama."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Sakrij"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> želi funkcionirati kao dijaloški okvir za jačinu zvuka."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Dozvoli"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Odbij"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> je dijaloški okvir za jačinu zvuka"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Dodirnite za povrat originala."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Koristite svoj profil za posao"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Pozovi"</item>
- <item msgid="5997713001067658559">"Sistem"</item>
- <item msgid="7858983209929864160">"Zazvoni"</item>
- <item msgid="1850038478268896762">"Mediji"</item>
- <item msgid="8265110906352372092">"Alarm"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Pristupačnost"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Poziv"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistem"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Zvono"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Mediji"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarm"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Obavještenje"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Dvostruka višemelodijska frekvencija"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Pristupačnost"</string>
<!-- String.format failed for translation -->
<!-- no translation found for volume_stream_content_description_unmute (4436631538779230857) -->
<skip />
@@ -470,7 +474,7 @@
<string name="quick_settings" msgid="10042998191725428">"Brze postavke"</string>
<string name="status_bar" msgid="4877645476959324760">"Statusna traka"</string>
<string name="overview" msgid="4018602013895926956">"Pregled"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Način demonstracije"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Način demonstracije Sistemskog UI-a"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Omogući način demonstracije"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Prikaži način demonstracije"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -510,20 +514,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Uključeno"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Isključeno"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Uz kontrolu obavještenja o napajanju, možete postaviti nivo značaja obavještenja iz aplikacije, i to od nivoa 0 do 5. \n\n"<b>"Nivo 5"</b>" \n- Prikaži na vrhu liste obavještenja \n- Dopusti prekid prikaza cijelog ekrana \n- Uvijek izviruj \n\n"<b>"Nvio 4"</b>" \n- Spriječi prekid prikaza cijelog ekrana \n- Uvijek izviruj \n\n"<b>"Nivo 3"</b>" \n- Spriječi prekid prikaza cijelog ekrana \n- Nikad ne izviruj \n\n"<b>"Nivo 2"</b>" \n- Spriječi prekid prikaza cijelog ekrana \n- Nikad ne izviruj \n- Nikada ne puštaj zvuk ili vibraciju \n\n"<b>"Nivo 1"</b>" \n- Spriječi prekid prikaza cijelog ekrana \n- Nikada ne izviruj \n- Nikada ne puštaj zvuk ili vibraciju \n- Sakrij sa ekrana za zaključavanje i statusne trake \n- Prikaži na dnu liste obavještenja \n\n"<b>"Nivo 0"</b>" \n- Blokiraj sva obavještenja iz aplikacije"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Značaj: Automatski"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Značaj: Nivo 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Značaj: Nivo 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Značaj: Nivo 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Značaj: Nivo 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Značaj: Nivo 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Značaj: Nivo 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Aplikacija određuje važnost svakog obavještenja."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Nikad ne prikazuj obavještenja iz ove aplikacije"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Bez prekidanja prikaza cijelog ekrana, izvirivanja, zvuka ili vibracije. Sakriti sa ekrana za zaključavanje i statusne trake."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Bez prekidanja prikaza cijelog ekrana, izvirivanja, zvuka ili vibracije."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Bez izvirivanja ili prekidanja prikaza cijelog ekrana."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Uvijek izviruj. Bez prekidanja prikaza cijelog ekrana."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Uvijek izviruj i dopusti prekid prikaza cijelog ekrana."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Više postavki"</string>
<string name="notification_done" msgid="5279426047273930175">"Gotovo"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Kontrole <xliff:g id="APP_NAME">%1$s</xliff:g> obavještenja"</string>
@@ -656,4 +668,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Urediti raspored postavki."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Stranica <xliff:g id="ID_1">%1$d</xliff:g> od <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Proširi"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Umanji"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Odbaci"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Telefon se pregrijava"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Neke funkcije su ograničene dok se telefon hladi"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Vaš telefon će se automatski pokušati ohladiti. I dalje možete koristi telefon, ali će možda raditi sporije.\n\nNakon što se ohladi, telefon će normalno raditi."</string>
</resources>
diff --git a/packages/SystemUI/res/values-bs-rBA/strings_car.xml b/packages/SystemUI/res/values-bs/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-bs-rBA/strings_car.xml
rename to packages/SystemUI/res/values-bs/strings_car.xml
diff --git a/packages/SystemUI/res/values-bs-rBA/strings_tv.xml b/packages/SystemUI/res/values-bs/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-bs-rBA/strings_tv.xml
rename to packages/SystemUI/res/values-bs/strings_tv.xml
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index fd660ac..93e9142 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"La bateria s\'està carregant, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g>%%."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Configuració del sistema."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Notificacions."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Contenidor de notificacions addicional"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Esborra la notificació."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS activat."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"S\'està adquirint el GPS."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Pantalla de bloqueig"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Configuració"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Visió general"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Tanca"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"La xarxa Wi-Fi està desactivada."</string>
@@ -366,7 +369,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Càrrega ràpida (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> per completar-se)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Càrrega lenta (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> per completar-se)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Canvia d\'usuari"</string>
- <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Canvia l\'usuari. Usuari actual: <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
+ <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Canvia d\'usuari. Usuari actual: <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Usuari actual: <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_quick_contact" msgid="3020367729287990475">"Mostra el perfil"</string>
<string name="user_add_user" msgid="5110251524486079492">"Afegeix un usuari"</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Esborra-ho tot"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Comença ara"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Cap notificació"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"És possible que el dispositiu estigui supervisat."</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"El perfil es pot supervisar"</string>
<string name="vpn_footer" msgid="2388611096129106812">"És possible que la xarxa estigui supervisada."</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"És possible que la xarxa estigui supervisada"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Supervisió del dispositiu"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Supervisió del perfil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Supervisió de la xarxa"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Registre de xarxa"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Desactiva la VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Desconnecta la VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Administrador del dispositiu: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nL\'administrador pot supervisar i gestionar la configuració, l\'accés corporatiu, les aplicacions i les dades associades amb aquest dispositiu, inclosa la informació d\'ubicació. Per obtenir més informació, contacta amb l\'administrador."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> gestiona el teu dispositiu."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> utilitza <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> per gestionar el teu dispositiu."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"L\'administrador pot supervisar i gestionar la configuració, l\'accés corporatiu, les aplicacions, la informació d\'ubicació del dispositiu i les dades associades."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Més informació"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Estàs connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pot supervisar la teva activitat a la xarxa, com els correus electrònics, les aplicacions i els llocs web."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Obre la configuració de la VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"L\'administrador ha activat el registre de xarxa, que supervisa el trànsit del teu dispositiu.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Has donat permís a una aplicació per configurar una connexió VPN.\n\nAquesta aplicació pot supervisar el dispositiu i l\'activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Administrador del dispositiu: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nL\'administrador pot supervisar i gestionar el següent: configuració, accés corporatiu, aplicacions i dades associades amb aquest dispositiu, inclosa la seva informació d\'ubicació.\n\nEstàs connectat a una VPN, que pot supervisar l\'activitat de la xarxa, com ara els correus, les aplicacions i els llocs web.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el perfil de Work.\n\nL\'administrador pot supervisar l\'activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web.\n\nPer obtenir més informació, contacta amb l\'administrador.\n\nA més, estàs connectat a una VPN, que pot supervisar l\'activitat a la xarxa."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Estàs connectat a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pot supervisar la teva activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Estàs connectat a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pot supervisar la teva activitat personal a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el teu perfil professional. Aquest perfil està connectat a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pot supervisar la teva activitat professional a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el teu perfil professional. Aquest perfil està connectat a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pot supervisar la teva activitat professional a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web.\n\nA més, estàs connectat a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que també pot supervisar la teva activitat personal a la xarxa."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el dispositiu.\n\nL\'administrador pot supervisar i gestionar el següent: configuració, accés corporatiu, aplicacions i dades associades amb el dispositiu, inclosa la informació d\'ubicació.\n\nEstàs connectat a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pot supervisar l\'activitat a la xarxa, com ara els correus, les aplicacions i els llocs web.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"El dispositiu continuarà bloquejat fins que no el desbloquegis manualment."</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Obtén notificacions més ràpidament"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Mostra-les abans de desbloquejar"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Amplia"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Replega"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"La pantalla està fixada"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Aquest element es continuarà mostrant fins que deixis de fixar-lo. Per fer-ho, toca i mantén premut el botó Enrere."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"D\'acord"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"No, gràcies"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Vols amagar <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Tornarà a mostrar-se la propera vegada que l\'activis a la configuració."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Amaga"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> vol passar a ser el diàleg del volum."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Permet"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Denega"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> és el diàleg de volum"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Toca la notificació per restaurar el valor original."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Estàs utilitzant el perfil professional"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Truca"</item>
- <item msgid="5997713001067658559">"Sistema"</item>
- <item msgid="7858983209929864160">"Fes sonar"</item>
- <item msgid="1850038478268896762">"Multimèdia"</item>
- <item msgid="8265110906352372092">"Alarma"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Accessibilitat"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Trucada"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistema"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"To de trucada"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Multimèdia"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarma"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Notificació"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Marcatge per tons"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Accessibilitat"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Toca per activar el so."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Toca per activar la vibració. Pot ser que els serveis d\'accessibilitat se silenciïn."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Toca per silenciar el so. Pot ser que els serveis d\'accessibilitat se silenciïn."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Configuració ràpida"</string>
<string name="status_bar" msgid="4877645476959324760">"Barra d\'estat"</string>
<string name="overview" msgid="4018602013895926956">"Visió general"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Mode de demostració"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Mode de demostració de la IU del sistema"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Activa el mode de demostració"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Mostra el mode de demostració"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Activat"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Desactivat"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Amb els controls de notificació millorats, pots establir un nivell d\'importància d\'entre 0 i 5 per a les notificacions d\'una aplicació. \n\n"<b>"Nivell 5"</b>" \n- Mostra les notificacions a la part superior de la llista \n- Permet la interrupció de la pantalla completa \n- Permet sempre la previsualització \n\n"<b>"Nivell 4"</b>" \n- No permet la interrupció de la pantalla completa \n- Permet sempre la previsualització \n\n"<b>"Nivell 3"</b>" \n- No permet la interrupció de la pantalla completa \n- No permet mai la previsualització \n\n"<b>"Nivell 2"</b>" \n- No permet la interrupció de la pantalla completa \n- No permet mai la previsualització \n- Les notificacions no poden emetre sons ni vibracions \n\n"<b>"Nivell 1"</b>" \n- No permet la interrupció de la pantalla completa \n- No permet mai la previsualització \n- No activa mai el so ni la vibració \n- Amaga les notificacions de la pantalla de bloqueig i de la barra d\'estat \n- Mostra les notificacions a la part inferior de la llista \n\n"<b>"Nivell 0"</b>" \n- Bloqueja totes les notificacions de l\'aplicació"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Importància: automàtica"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Importància: nivell 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Importància: nivell 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Importància: nivell 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Importància: nivell 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Importància: nivell 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Importància: nivell 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"L\'aplicació determina la importància de cada notificació."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"No es mostra mai les notificacions d\'aquesta aplicació."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Sense interr. pant. completa, previsual., so ni vibr. No les mostra a pantalla bloq. ni barra d\'estat."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Sense interrupció de la pantalla completa, previsualització, so ni vibració."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Sense interrupció de la pantalla completa ni previsualització."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Permet sempre la previsualització. Sense interrupció de la pantalla completa."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Permet sempre la previsualització i la interrupció de la pantalla completa."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Més opcions"</string>
<string name="notification_done" msgid="5279426047273930175">"Fet"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Controls de notificació de l\'aplicació <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Edita l\'ordre de la configuració."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Pàgina <xliff:g id="ID_1">%1$d</xliff:g> (<xliff:g id="ID_2">%2$d</xliff:g> en total)"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Desplega"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimitza"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Ignora"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"El telèfon s\'està escalfant"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Algunes funcions estaran limitades mentre el telèfon es refreda"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"El telèfon provarà de refredar-se automàticament. Podràs continuar utilitzant-lo, però és possible que funcioni més lentament.\n\nUn cop s\'hagi refredat, funcionarà amb normalitat."</string>
</resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index a045ecd..350db19 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -167,6 +167,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Systémová nastavení."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Oznámení."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Kontejner pro ikonu přetečení s oznámením"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Vymazat oznámení."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS je povoleno."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Zaměřování GPS."</string>
@@ -188,6 +189,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Obrazovka uzamčení"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Nastavení"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Přehled"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Zavřít"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>"</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Připojení Wi-Fi je vypnuto."</string>
@@ -406,18 +409,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Smazat vše"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Spustit"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Žádná oznámení"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Zařízení může být sledováno"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil může být monitorován"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Síť může být sledována"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Síť může být monitorována"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Sledování zařízení"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitoring profilu"</string>
<string name="monitoring_title" msgid="169206259253048106">"Sledování sítě"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Protokolování sítě"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Deaktivovat VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Odpojit VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Toto zařízení spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrátor může sledovat a spravovat nastavení, firemní přístup, aplikace, data přidružená k tomuto zařízení a jeho polohu. O další informace požádejte svého administrátora."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Vaše zařízení je spravováno aplikací <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"Organizace <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> používá ke správě tohoto zařízení aplikaci <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administrátor může sledovat a spravovat nastavení, firemní přístup, aplikace, data přidružená k tomuto zařízení a jeho polohu."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Další informace"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Jste připojeni k aplikaci <xliff:g id="VPN_APP">%1$s</xliff:g>, která může sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Otevřít nastavení VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administrátor zapnul protokolování sítě, které monitoruje síťový provoz v zařízení.\n\nDalší informace vám poskytne administrátor."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Udělili jste aplikaci oprávnění k nastavení připojení VPN.\n\nTato aplikace může sledovat vaši aktivitu v zařízení a v síti, včetně e-mailů, aplikací a webů."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Toto zařízení spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrátor může sledovat a spravovat nastavení, firemní přístup, aplikace, data přidružená k tomuto zařízení a jeho polohu.\n\nJste připojeni k síti VPN, která může sledovat vaši osobní aktivitu v síti, včetně e-mailů, aplikací a webů.\n\nO další informace požádejte svého administrátora."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Váš pracovní profil spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrátor může monitorovat vaši síťovou aktivitu, včetně e-mailů, aplikací a webů.\n\nO další informace požádejte svého administrátora.\n\nJste také připojeni k síti VPN, která může sledovat vaši aktivitu v síti."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Jste připojeni k aplikaci <xliff:g id="APPLICATION">%1$s</xliff:g>, která může sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů."</string>
@@ -425,7 +436,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Jste připojeni k aplikaci <xliff:g id="APPLICATION">%1$s</xliff:g>, která může sledovat vaši osobní aktivitu v síti, včetně e-mailů, aplikací a webů."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Váš pracovní profil spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Je připojen k aplikaci <xliff:g id="APPLICATION">%2$s</xliff:g>, která může sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů.\n\nO další informace požádejte svého administrátora."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Váš pracovní profil spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Je připojen k aplikaci <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, která může sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů.\n\nTaké jste připojeni k aplikaci <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, která může sledovat vaši osobní aktivitu v síti."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Toto zařízení spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrátor může sledovat a spravovat nastavení, firemní přístup, aplikace, data přidružená k tomuto zařízení a informace o jeho poloze.\n\nJste připojeni k aplikaci <xliff:g id="APPLICATION">%2$s</xliff:g>, která může sledovat vaši osobní aktivitu v síti, včetně e-mailů, aplikací a webů.\n\nO další informace požádejte svého administrátora."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Zařízení zůstane uzamčeno, dokud je ručně neodemknete"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Čtěte si oznámení rychleji"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Můžete si je přečíst před odemčením obrazovky."</string>
@@ -436,31 +446,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Rozbalit"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Sbalit"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Obrazovka je připnuta"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Obsah bude připnut v zobrazení, dokud jej neuvolníte. Uvolníte jej stisknutím a podržením tlačítka Zpět."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Rozumím"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Ne, děkuji"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Skrýt <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Tato položka se znovu zobrazí, až ji v nastavení znovu zapnete."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Skrýt"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> chce být dialogem hlasitosti."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Povolit"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Odmítnout"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> je dialog hlasitosti"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Klepnutím obnovíte původní nastavení."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Používáte pracovní profil"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Hovor"</item>
- <item msgid="5997713001067658559">"Systém"</item>
- <item msgid="7858983209929864160">"Prozvonit"</item>
- <item msgid="1850038478268896762">"Média"</item>
- <item msgid="8265110906352372092">"Budík"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Přístupnost"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Hovor"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Systém"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Vyzvánění"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Média"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Budík"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Oznámení"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Tónová volba"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Přístupnost"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Klepnutím zapnete zvuk."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Klepnutím aktivujete režim vibrací. Služby přístupnosti mohou být ztlumeny."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Klepnutím vypnete zvuk. Služby přístupnosti mohou být ztlumeny."</string>
@@ -472,7 +476,7 @@
<string name="quick_settings" msgid="10042998191725428">"Rychlé nastavení"</string>
<string name="status_bar" msgid="4877645476959324760">"Stavový řádek"</string>
<string name="overview" msgid="4018602013895926956">"Přehled"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Ukázkový režim"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Ukázkový režim uživatelského rozhraní systému"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Zapnout ukázkový režim"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Zobrazit ukázkový režim"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -512,20 +516,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Zapnuto"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Vypnuto"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Rozšířené ovládací prvky oznámení umožňují nastavit úroveň důležitosti oznámení aplikace od 0 do 5. \n\n"<b>"Úroveň 5"</b>" \n– Zobrazit na začátku seznamu oznámení \n– Povolit vyrušení na celou obrazovku \n– Vždy zobrazit náhled \n\n"<b>"Úroveň 4"</b>" \n– Zabránit vyrušení na celou obrazovku \n– Vždy zobrazit náhled \n\n"<b>"Úroveň 3"</b>" \n– Zabránit vyrušení na celou obrazovku \n– Nikdy nezobrazovat náhled \n\n"<b>"Úroveň 2"</b>" \n– Zabránit vyrušení na celou obrazovku \n– Nikdy nezobrazovat náhled \n– Nikdy nevydávat žádný zvukový signál ani nevibrovat \n\n"<b>"Úroveň 1"</b>" \n– Zabránit vyrušení na celou obrazovku \n– Nikdy nezobrazovat náhled \n– Nikdy nevydávat zvukový signál ani nevibrovat \n– Skrýt z obrazovky uzamčení a stavového řádku \n– Zobrazovat na konci seznamu oznámení \n\n"<b>";Úroveň 0"</b>" \n– Blokovat všechna oznámení z aplikace"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Důležitost: automatická"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Důležitost: úroveň 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Důležitost: úroveň 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Důležitost: úroveň 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Důležitost: úroveň 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Důležitost: úroveň 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Důležitost: úroveň 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Důležitost každého oznámení určuje aplikace."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Oznámení této aplikace nikdy nezobrazovat."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Žádné vyrušení na celou obrazovku, náhled, zvuk ani vibrace. Skrýt na obrazovce uzamčení a stavovém řádku."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Žádné vyrušení na celou obrazovku, náhled, zvuk ani vibrace."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Žádné vyrušení na celou obrazovku ani náhled."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Vždy zobrazit náhled. Žádné vyrušení na celou obrazovku."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Vždy zobrazit náhled a umožnit vyrušení na celou obrazovku."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Další nastavení"</string>
<string name="notification_done" msgid="5279426047273930175">"Hotovo"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Nastavení oznámení aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -658,4 +670,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Upravit pořadí nastavení."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Stránka <xliff:g id="ID_1">%1$d</xliff:g> z <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Rozbalit"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimalizovat"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Zrušit"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Telefon se zahřívá"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Některé funkce jsou při chladnutí omezeny"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Telefon se automaticky pokusí vychladnout. Lze jej nadále používat, ale může být pomalejší.\n\nAž telefon vychladne, bude fungovat normálně."</string>
</resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 3eeabaa..76841dd 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -67,15 +67,15 @@
<string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Den bruger, der i øjeblikket er logget ind på denne enhed, kan ikke aktivere USB-fejlretning. Skift til en administratorbruger for at bruge denne funktion."</string>
<string name="compat_mode_on" msgid="6623839244840638213">"Zoom til fuld skærm"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Stræk til fuld skærm"</string>
- <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Gemmer skærmbillede..."</string>
- <string name="screenshot_saving_title" msgid="8242282144535555697">"Gemmer skærmbillede..."</string>
- <string name="screenshot_saving_text" msgid="2419718443411738818">"Skærmbilledet gemmes."</string>
- <string name="screenshot_saved_title" msgid="6461865960961414961">"Skærmbilledet er gemt."</string>
- <string name="screenshot_saved_text" msgid="2685605830386712477">"Tryk for at se dit skærmbillede."</string>
- <string name="screenshot_failed_title" msgid="705781116746922771">"Skærmbilledet kunne ikke tages."</string>
- <string name="screenshot_failed_to_save_unknown_text" msgid="7887826345701753830">"Der opstod et problem ved lagringen af skærmbilledet."</string>
- <string name="screenshot_failed_to_save_text" msgid="2592658083866306296">"Skærmbilledet kan ikke gemmes pga. begrænset lagerplads."</string>
- <string name="screenshot_failed_to_capture_text" msgid="7602391003979898374">"Appen eller din organisation tillader ikke, at du tager skærmbilleder."</string>
+ <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Gemmer screenshot..."</string>
+ <string name="screenshot_saving_title" msgid="8242282144535555697">"Gemmer screenshot..."</string>
+ <string name="screenshot_saving_text" msgid="2419718443411738818">"Screenshottet gemmes."</string>
+ <string name="screenshot_saved_title" msgid="6461865960961414961">"Screenshottet er gemt."</string>
+ <string name="screenshot_saved_text" msgid="2685605830386712477">"Tryk for at se dit screenshot."</string>
+ <string name="screenshot_failed_title" msgid="705781116746922771">"Screenshottet kunne ikke tages."</string>
+ <string name="screenshot_failed_to_save_unknown_text" msgid="7887826345701753830">"Der opstod et problem ved lagringen af screenshottet."</string>
+ <string name="screenshot_failed_to_save_text" msgid="2592658083866306296">"Screenshottet kan ikke gemmes pga. begrænset lagerplads."</string>
+ <string name="screenshot_failed_to_capture_text" msgid="7602391003979898374">"Appen eller din organisation tillader ikke, at du tager screenshots."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Muligheder for USB-filoverførsel"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Isæt som en medieafspiller (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Isæt som et kamera (PTP)"</string>
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Batteriet oplades. <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> procent."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Systemindstillinger."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Underretninger."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Overløbsbeholder for underretninger"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Ryd underretning."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS aktiveret."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS samler data."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Låseskærm."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Indstillinger"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Oversigt."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Luk"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi er slået fra."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Ryd alt"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Start nu"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Ingen underretninger"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Enheden kan være overvåget"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profilen kan overvåges"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Netværket kan være overvåget"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Netværket kan være overvåget"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Overvågning af enhed"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilovervågning"</string>
<string name="monitoring_title" msgid="169206259253048106">"Overvågning af netværk"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Netværksregistrering"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Deaktiver VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Afbryd VPN-forbindelse"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Din enhed administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nDin administrator kan overvåge og administrere indstillinger, virksomhedsadgang, apps, data, der er knyttet til din enhed, og din enheds stedoplysninger. Kontakt din administrator, hvis du vil have flere oplysninger."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Din enhed administreres af <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> bruger <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> til at administrere din enhed."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Din administrator kan overvåge og administrere indstillinger, virksomhedsadgang, apps og data, der er knyttet til denne enhed, samt enhedens placeringsoplysninger."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Få flere oplysninger"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Du har forbindelse til <xliff:g id="VPN_APP">%1$s</xliff:g>, som kan overvåge din netværksaktivitet, bl.a. e-mails, apps og websites."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Åbn VPN-indstillinger"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Din administrator har aktiveret netværksregistrering, som overvåger trafik på din enhed.\n\nKontakt din administrator for at få flere oplysninger."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Du gav en app tilladelse til at konfigurere en VPN-forbindelse.\n\nDenne app kan overvåge din enhed og netværksaktivitet, bl.a. e-mails, apps og websites."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Din enhed administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nDin administrator kan overvåge og administrere indstillinger, virksomhedsadgang, apps, data, der er knyttet til din enhed, og din enheds stedoplysninger.\n\nDu har forbindelse til et VPN, som kan overvåge din netværksaktivitet, herunder e-mails, apps og websites.\n\nKontakt din administrator, hvis du vil have flere oplysninger."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Din arbejdsprofil administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nDin administrator kan overvåge din netværksaktivitet, bl.a. e-mails, apps og websites.\n\nKontakt din administrator for at få flere oplysninger.\n\nDu er også forbundet til en VPN-forbindelse, som kan overvåge din netværksaktivitet."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Du har forbindelse til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåge din netværksaktivitet, bl.a. e-mails, apps og websites."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Du har forbindelse til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåge din private netværksaktivitet, bl.a. e-mails, apps og websites."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Din arbejdsprofil administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den er forbundet til <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan overvåge din arbejdsrelaterede netværksaktivitet, bl.a. e-mails, apps og websites.\n\nKontakt din administrator for at få flere oplysninger."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Din arbejdsprofil administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den er forbundet til <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, som kan overvåge din arbejdsrelaterede netværksaktivitet, bl.a. e-mails, apps og websites.\n\nDu er også forbundet til <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, som kan overvåge din private netværksaktivitet."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Din enhed administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nDin administrator kan overvåge og administrere indstillinger, virksomhedens adgang, data tilknyttet din enhed og enhedens stedoplysninger.\n\nDu er forbundet til <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan overvåge din netværksaktivitet, bl.a. e-mails, apps og websites.\n\nKontakt din administrator for at få flere oplysninger."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Enheden vil forblive låst, indtil du manuelt låser den op"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Modtag underretninger hurtigere"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Se dem, før du låser op"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Udvid"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Skjul"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Skærmen er fastgjort"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Dette fastholder skærmen i visningen, indtil du frigør den. Tryk på Tilbage, og hold fingeren nede for at frigøre skærmen."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"OK, det er forstået"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Nej tak"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Vil du skjule <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Den vises igen, næste gang du aktiverer den i indstillingerne."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Skjul"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ønsker at være dialogboksen for lydstyrke."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Tillad"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Afvis"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> er dialogboksen for lydstyrke"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Tryk for at gendanne det oprindelige."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Du bruger din arbejdsprofil"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Opkald"</item>
- <item msgid="5997713001067658559">"System"</item>
- <item msgid="7858983209929864160">"Ring"</item>
- <item msgid="1850038478268896762">"Medier"</item>
- <item msgid="8265110906352372092">"Alarm"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Hjælpefunktioner"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Ring op"</string>
+ <string name="stream_system" msgid="7493299064422163147">"System"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Ring"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Medie"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarm"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Underretning"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Tonesignalfrekvens (DTMF)"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Hjælpefunktioner"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Tryk for at slå lyden til."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Tryk for at konfigurere til at vibrere. Tilgængelighedstjenester kan blive deaktiveret."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tryk for at slå lyden fra. Lyden i tilgængelighedstjenester kan blive slået fra."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Hurtige indstillinger"</string>
<string name="status_bar" msgid="4877645476959324760">"Statusbjælke"</string>
<string name="overview" msgid="4018602013895926956">"Oversigt"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Demotilstand"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Demotilstand for systemets brugerflade"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Aktivér Demotilstand"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Vis Demotilstand"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Til"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Fra"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Med kontrolelementer til underretninger om strøm kan du konfigurere et vigtighedsniveau fra 0 til 5 for en apps underretninger. \n\n"<b>"Niveau 5"</b>\n"- Vis øverst på listen over underretninger \n- Tillad afbrydelse af fuld skærm \n- Se altid smugkig \n\n"<b>"Niveau 4"</b>\n"- Ingen afbrydelse af fuld skærm \n- Se altid smugkig \n\n"<b>"Niveau 3"</b>\n"- Ingen afbrydelse af fuld skærm \n- Se aldrig smugkig \n\n"<b>"Niveau 2"</b>\n"- Ingen afbrydelse af fuld skærm \n Se aldrig smugkig \n- Ingen lyd og vibration \n\n"<b>"Niveau 1"</b>\n"- Ingen afbrydelse af fuld skærm \n- Se aldrig smugkig \n- Ingen lyd eller vibration \n- Skjul fra låseskærm og statusbjælke \n- Vis nederst på listen over underretninger \n\n"<b>"Niveau 0"</b>\n"- Bloker alle underretninger fra appen."</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Vigtighed: Automatisk"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Vigtighed: Niveau 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Vigtighed: Niveau 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Vigtighed: Niveau 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Vigtighed: Niveau 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Vigtighed: Niveau 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Vigtighed: Niveau 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"App bestemmer vigtigheden af hver underretning."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Vis aldrig underretninger fra denne app"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Ingen smugkig, lyd, vibration eller afbrydelse af fuld skærm. Skjul fra låseskærm og statusbjælke."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Ingen smugkig, lyd, vibration eller afbrydelse af fuld skærm."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Ingen smugkig eller afbrydelse af fuld skærm."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Se altid smugkig. Ingen afbrydelse af fuld skærm."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Se altid smugkig, og tillad afbrydelse af fuld skærm."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Flere indstillinger"</string>
<string name="notification_done" msgid="5279426047273930175">"Udfør"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Kontrolelementer til underretninger for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Rediger rækkefølgen af indstillinger."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Side <xliff:g id="ID_1">%1$d</xliff:g> af <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Udvid"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimer"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Afvis"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Telefonen er ved at blive varm"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Nogle funktioner er begrænsede, mens telefonen køler ned"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Din telefon forsøger automatisk at køle ned. Du kan stadig bruge telefonen, men den kører muligvis langsommere.\n\nNår din telefon er kølet ned, fungerer den normalt igen."</string>
</resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 603be91..23f0bd0 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -165,6 +165,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Systemeinstellungen"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Benachrichtigungen"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Überlaufcontainer für Benachrichtigungen"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Benachrichtigung löschen"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS aktiviert"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS-Signal abrufen"</string>
@@ -186,6 +187,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Sperrbildschirm"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Einstellungen"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Übersicht"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Schließen"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>"</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"WLAN ist deaktiviert."</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Alle löschen"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Jetzt starten"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Keine Benachrichtigungen"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Aktivität auf dem Gerät kann vom Eigentümer protokolliert werden"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil wird möglicherweise überwacht."</string>
<string name="vpn_footer" msgid="2388611096129106812">"Das Netzwerk wird möglicherweise überwacht."</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Das Netzwerk wird möglicherweise überwacht"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Geräteüberwachung"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilüberwachung"</string>
<string name="monitoring_title" msgid="169206259253048106">"Netzwerküberwachung"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Netzwerkprotokollierung"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN deaktivieren"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN-Verbindung trennen"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Dein Gerät wird verwaltet von <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nDein Administrator kann die zu deinem Gerät gehörigen Einstellungen, Unternehmenszugriffsrechte, Apps und Daten überwachen und verwalten, einschließlich der Standortinformationen deines Geräts. Weitere Informationen erhältst du bei deinem Administrator."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Dein Gerät wird von <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> verwaltet."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> verwaltet dein Gerät mit <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Dein Administrator kann Einstellungen, Zugriffsrechte, Apps und Daten deines Geräts und dessen Standortinformationen überwachen."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Weitere Informationen"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Du bist mit <xliff:g id="VPN_APP">%1$s</xliff:g> verbunden. Die VPN-App kann deine Netzwerkaktivitäten (E-Mails, Apps und Websites) erfassen."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN-Einstellungen öffnen"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Dein Administrator hat die Netzwerkprotokollierung aktiviert. Damit wird der Verkehr auf deinem Gerät erfasst.\n\nWeitere Informationen erhältst du von deinem Administrator."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Du hast einer App gestattet, eine VPN-Verbindung einzurichten.\n\nDiese App kann dein Gerät und deine Netzwerkaktivitäten überwachen, einschließlich E-Mails, Apps und Websites."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Dein Gerät wird von <xliff:g id="ORGANIZATION">%1$s</xliff:g> verwaltet.\n\nDein Administrator kann die zu deinem Gerät gehörigen Einstellungen, Unternehmenszugriffsrechte, Apps und Daten überwachen und verwalten, einschließlich der Standortinformationen deines Geräts.\n\nDu bist außerdem mit einem VPN verbunden, das deine persönliche Netzwerkaktivität überwachen kann, einschließlich E-Mails, Apps und Websites.\n\nWeitere Informationen erhältst du bei deinem Administrator."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Dein Arbeitsprofil wird von <xliff:g id="ORGANIZATION">%1$s</xliff:g> verwaltet.\n\nDein Administrator kann deine Netzwerkaktivität überwachen, einschließlich E-Mails, Apps und Websites.\n\nWeitere Informationen erhältst du bei deinem Administrator.\n\nDu bist außerdem mit einem VPN verbunden, das deine persönliche Netzwerkaktivität überwachen kann."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Du bist mit der App <xliff:g id="APPLICATION">%1$s</xliff:g> verbunden, die deine Netzwerkaktivität überwachen kann, einschließlich E-Mails, Apps und Websites."</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Du bist mit der App \"<xliff:g id="APPLICATION">%1$s</xliff:g>\" verbunden. Diese kann deine persönlichen Netzwerkaktivitäten erfassen, einschließlich E-Mails, Apps und Websites."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Dein Arbeitsprofil wird von <xliff:g id="ORGANIZATION">%1$s</xliff:g> verwaltet. Das Profil ist mit der App <xliff:g id="APPLICATION">%2$s</xliff:g> verbunden, die deine geschäftlichen Netzwerkaktivitäten überwachen kann, einschließlich E-Mails, Apps und Websites.\n\nWeitere Informationen erhältst du von deinem Administrator."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Dein Arbeitsprofil wird von <xliff:g id="ORGANIZATION">%1$s</xliff:g> verwaltet. Das Profil ist mit der App <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> verbunden, die deine geschäftliche Netzwerkaktivität überwachen kann, einschließlich E-Mails, Apps und Websites.\n\nDu bist außerdem mit der App <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> verbunden, die deine persönliche Netzwerkaktivität überwachen kann."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Dein Gerät wird von <xliff:g id="ORGANIZATION">%1$s</xliff:g> verwaltet.\n\nDein Administrator kann die zu deinem Gerät gehörigen Einstellungen, Unternehmenszugriffsrechte, Apps und Daten überwachen und verwalten, einschließlich der Standortinformationen deines Geräts.\n\nDu bist außerdem mit der App <xliff:g id="APPLICATION">%2$s</xliff:g> verbunden, die deine persönliche Netzwerkaktivität überwachen kann, einschließlich E-Mails, Apps und Websites.\n\nWeitere Informationen erhältst du bei deinem Administrator."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Das Gerät bleibt gesperrt, bis du es manuell entsperrst."</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Benachrichtigungen schneller erhalten"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Vor dem Entsperren anzeigen"</string>
@@ -432,31 +442,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Maximieren"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Minimieren"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Bildschirm ist fixiert"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Der Bildschirm wird so lange angezeigt, bis du die Fixierung aufhebst. Berühre & halte \"Zurück\", um die Fixierung aufzuheben."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"OK"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Nein danke"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> ausblenden?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Sie wird wieder eingeblendet, wenn du sie in den Einstellungen erneut aktivierst."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ausblenden"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> will die Lautstärke regeln."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Zulassen"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Ablehnen"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> regelt die Lautstärke."</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Tippe, um das Original wiederherzustellen."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Du verwendest dein Arbeitsprofil."</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Anruf"</item>
- <item msgid="5997713001067658559">"System"</item>
- <item msgid="7858983209929864160">"Klingeln lassen"</item>
- <item msgid="1850038478268896762">"Medien"</item>
- <item msgid="8265110906352372092">"Wecker"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Bedienungshilfen"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Anruf"</string>
+ <string name="stream_system" msgid="7493299064422163147">"System"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Klingeln lassen"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Medien"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Wecker"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Benachrichtigung"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Doppelton-Mehrfrequenz"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Bedienungshilfen"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Zum Aufheben der Stummschaltung tippen."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Tippen, um Vibrieren festzulegen. Bedienungshilfen werden unter Umständen stummgeschaltet."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Zum Stummschalten tippen. Bedienungshilfen werden unter Umständen stummgeschaltet."</string>
@@ -468,7 +472,7 @@
<string name="quick_settings" msgid="10042998191725428">"Schnelleinstellungen"</string>
<string name="status_bar" msgid="4877645476959324760">"Statusleiste"</string>
<string name="overview" msgid="4018602013895926956">"Übersicht"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Demomodus"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Demomodus der System-UI"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Demomodus aktivieren"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Demomodus anzeigen"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -508,20 +512,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"An"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Aus"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Mit den erweiterten Benachrichtigungseinstellungen kannst du für App-Benachrichtigungen eine Wichtigkeitsstufe von 0 bis 5 festlegen. \n\n"<b>"Stufe 5"</b>" \n- Auf der Benachrichtigungsleiste ganz oben anzeigen \n- Vollbildunterbrechung zulassen \n- Immer kurz einblenden \n\n"<b>"Stufe 4"</b>" \n- Keine Vollbildunterbrechung \n- Immer kurz einblenden \n\n"<b>"Stufe 3"</b>" \n- Keine Vollbildunterbrechung \n- Nie kurz einblenden \n\n"<b>"Stufe 2"</b>" \n- Keine Vollbildunterbrechung \n- Nie kurz einblenden \n- Weder Ton noch Vibration \n\n"<b>"Stufe 1"</b>" \n- Keine Vollbildunterbrechung \n- Nie kurz einblenden \n- Weder Ton noch Vibration \n- Auf Sperrbildschirm und Statusleiste verbergen \n- Auf der Benachrichtigungsleiste ganz unten anzeigen \n\n"<b>"Stufe 0"</b>" \n- Alle Benachrichtigungen der App sperren"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Wichtigkeit: automatisch"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Wichtigkeit: Stufe 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Wichtigkeit: Stufe 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Wichtigkeit: Stufe 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Wichtigkeit: Stufe 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Wichtigkeit: Stufe 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Wichtigkeit: Stufe 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Die Wichtigkeit jeder Benachrichtigung wird durch die App bestimmt."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Nie Benachrichtigungen von dieser App zeigen."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Weder Vollbildunterbrechung noch kurzes Einblenden, Ton oder Vibration. Nicht auf Sperrbildschirm oder Statusleiste anzeigen."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Weder Vollbildunterbrechung noch kurzes Einblenden, Ton oder Vibration."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Weder Vollbildunterbrechung noch kurzes Einblenden."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Immer kurzes Einblenden. Keine Vollbildunterbrechung."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Immer kurzes Einblenden, Vollbildunterbrechung erlauben."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Weitere Einstellungen"</string>
<string name="notification_done" msgid="5279426047273930175">"Fertig"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g>-Benachrichtigungseinstellungen"</string>
@@ -654,4 +666,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Reihenfolge der Einstellungen bearbeiten."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Seite <xliff:g id="ID_1">%1$d</xliff:g> von <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Maximieren"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimieren"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Schließen"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Smartphone wird warm"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Einige Funktionen sind während der Abkühlphase des Smartphones eingeschränkt"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Dein Smartphone kühlt sich automatisch ab. Du kannst dein Smartphone weiterhin nutzen, aber es reagiert möglicherweise langsamer.\n\nSobald dein Smartphone abgekühlt ist, funktioniert es wieder normal."</string>
</resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 2b160c7..a11ee0d 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Φόρτιση μπαταρίας, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> τοις εκατό."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Ρυθμίσεις συστήματος."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Ειδοποιήσεις."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Κοντέινερ υπερχείλισης ειδοποίησης"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Διαγραφή ειδοποίησης."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"Το GPS ενεργοποιήθηκε."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Προσδιορισμός GPS."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Κλείδωμα οθόνης."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Ρυθμίσεις"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Επισκόπηση."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Κλείσιμο"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Το Wi-fi απενεργοποιήθηκε."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Διαγραφή όλων"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Έναρξη τώρα"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Δεν υπάρχουν ειδοποιήσεις"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Η συσκευή μπορεί να παρακολουθείται"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Το προφίλ ενδέχεται να παρακολουθείται"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Το δίκτυο ενδέχεται να παρακολουθείται"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Το δίκτυο ενδέχεται να παρακολουθείται"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Παρακολούθηση συσκευής"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Παρακολούθηση προφίλ"</string>
<string name="monitoring_title" msgid="169206259253048106">"Παρακολούθηση δικτύου"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Καταγραφή δικτύου"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Απενεργοποίηση VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Αποσύνδεση VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Η διαχείριση αυτής της συσκευής γίνεται από <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nΟ διαχειριστής σας έχει τη δυνατότητα να παρακολουθεί και να διαχειρίζεται τις ρυθμίσεις, την εταιρική πρόσβαση, τις εφαρμογές και τα δεδομένα που σχετίζονται με αυτήν τη συσκευή, συμπεριλαμβανομένων των πληροφοριών τοποθεσίας της συσκευής σας. Για περισσότερες πληροφορίες, επικοινωνήστε με το διαχειριστή σας."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Η διαχείριση της συσκευής σας γίνεται από <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> χρησιμοποιεί <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> για τη διαχείριση της συσκευής σας."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Ο διαχειριστής σας μπορεί να παρακολουθεί και να διαχειρίζεται τις ρυθμίσεις, την εταιρική πρόσβαση, τις εφαρμογές και τα δεδομένα που σχετίζονται με τη συσκευή σας, καθώς και τις πληροφορίες τοποθεσίας της συσκευής σας."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Μάθετε περισσότερα"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Έχετε συνδεθεί στην εφαρμογή <xliff:g id="VPN_APP">%1$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστοτόπων."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Άνοιγμα Ρυθμίσεων VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Ο διαχειριστής σας έχει ενεργοποιήσει την καταγραφή δικτύου, η οποία παρακολουθεί την επισκεψιμότητα στη συσκευή σας.\n\nΓια περισσότερες πληροφορίες, επικοινωνήστε με τον διαχειριστή σας."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Παραχωρήσατε σε μια εφαρμογή άδεια για τη ρύθμιση σύνδεσης VPN.\n\nΑυτή η εφαρμογή μπορεί να παρακολουθεί τη δραστηριότητα της συσκευής και του δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστότοπων."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Η διαχείριση αυτής της συσκευής γίνεται από <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nΟ διαχειριστής σας έχει τη δυνατότητα να παρακολουθεί και να διαχειρίζεται τις ρυθμίσεις, την εταιρική πρόσβαση, τις εφαρμογές και τα δεδομένα που σχετίζονται με αυτήν τη συσκευή, συμπεριλαμβανομένων των πληροφοριών τοποθεσίας της συσκευής σας.\n\nΕίστε επίσης συνδεδεμένοι σε ένα VPN, το οποίο μπορεί να παρακολουθεί τη δραστηριότητα δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστότοπων.\n\nΓια περισσότερες πληροφορίες, επικοινωνήστε με το διαχειριστή σας."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Η διαχείριση του προφίλ εργασίας γίνεται από τον οργανισμό <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nΟ διαχειριστής έχει τη δυνατότητα παρακολούθησης της δραστηριότητας του δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστότοπων.\n\nΓια περισσότερες πληροφορίες, επικοινωνήστε με το διαχειριστή.\n\nΕπίσης, είστε συνδεδεμένοι σε VPN, το οποίο μπορεί να παρακολουθεί τη δραστηριότητα του δικτύου σας."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Έχετε συνδεθεί στην εφαρμογή <xliff:g id="APPLICATION">%1$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα του δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστότοπων."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Έχετε συνδεθεί στην εφαρμογή <xliff:g id="APPLICATION">%1$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα του προσωπικού σας δικτύου, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστοτόπων."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Η διαχείριση του προφίλ εργασίας γίνεται από τον οργανισμό <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Είναι συνδεδεμένο στην εφαρμογή <xliff:g id="APPLICATION">%2$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα του δικτύου εργασίας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστότοπων.\n\nΓια περισσότερες πληροφορίες, επικοινωνήστε με το διαχειριστή."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Η διαχείριση του προφίλ εργασίας γίνεται από τον οργανισμό <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Είναι συνδεδεμένο στην εφαρμογή <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα του δικτύου εργασίας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστότοπων.\n\nΕπίσης, είστε συνδεδεμένοι στην εφαρμογή <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα του προσωπικού σας δικτύου."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Η διαχείριση της συσκευής γίνεται από <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nΟ διαχειριστής μπορεί να παρακολουθεί και να διαχειρίζεται ρυθμίσεις, εταιρική πρόσβαση, εφαρμογές, δεδομένα σχετικά με τη συσκευή και πληρ. τοποθεσίας της συσκευής.\n\nΕίστε συνδεδ. σε <xliff:g id="APPLICATION">%2$s</xliff:g> που μπορεί να παρακολουθεί τη δραστηρ. του δικτύου εργασίας, όπως μηνύματα ηλεκτρ. ταχυδρομείου, εφαρμογές και ιστότοπους.\n\nΓια περισ. πληροφορίες, επικοινωνήστε με το διαχειριστή."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Η συσκευή θα παραμείνει κλειδωμένη έως ότου την ξεκλειδώσετε μη αυτόματα"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Λάβετε ειδοποιήσεις γρηγορότερα"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Εμφάνιση πριν το ξεκλείδωμα"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Ανάπτυξη"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Σύμπτυξη"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Η οθόνη καρφιτσώθηκε"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Με αυτόν τον τρόπο παραμένει σε προβολή έως ότου την ξεκαρφιτσώσετε. Αγγίξτε παρατεταμένα το στοιχείο επιστροφής για να την ξεκαρφιτσώσετε."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Το κατάλαβα"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Όχι"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Απόκρυψη <xliff:g id="TILE_LABEL">%1$s</xliff:g>;"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Θα εμφανιστεί ξανά την επόμενη φορά που θα το ενεργοποιήσετε στις ρυθμίσεις."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Απόκρυψη"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> θέλει να γίνει το παράθυρο διαλόγου ελέγχου έντασης"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Να επιτρέπεται"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Απόρριψη"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> αποτελεί το παράθυρο διαλόγου ελέγχου έντασης"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Πατήστε για να επαναφέρετε την αρχική μορφή της εικόνας."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Χρησιμοποιείτε το προφίλ εργασίας σας"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Κλήση"</item>
- <item msgid="5997713001067658559">"Σύστημα"</item>
- <item msgid="7858983209929864160">"Ήχος κλήσης"</item>
- <item msgid="1850038478268896762">"Μέσα"</item>
- <item msgid="8265110906352372092">"Ξυπνητήρι"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Προσβασιμότητα"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Κλήση"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Σύστημα"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Κλήση"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Μέσα"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Ξυπνητήρι"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Ειδοποίηση"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Πολυσυχνότητα διπλού τόνου"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Προσβασιμότητα"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Πατήστε για κατάργηση σίγασης."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Πατήστε για ενεργοποιήσετε τη δόνηση. Οι υπηρεσίες προσβασιμότητας ενδέχεται να τεθούν σε σίγαση."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Πατήστε για σίγαση. Οι υπηρεσίες προσβασιμότητας ενδέχεται να τεθούν σε σίγαση."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Γρήγορες ρυθμίσεις"</string>
<string name="status_bar" msgid="4877645476959324760">"Γραμμή κατάστασης"</string>
<string name="overview" msgid="4018602013895926956">"Επισκόπηση"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Λειτουργία επίδειξης"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Λειτουργία επίδειξης διεπαφής χρήστη συστήματος"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Ενεργοποίηση λειτουργίας επίδειξης"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Εμφάνιση λειτουργίας επίδειξης"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Ενεργή"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Ανενεργή"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Με τα στοιχεία ελέγχου ειδοποίησης ισχύος, μπορείτε να ορίσετε ένα επίπεδο βαρύτητας από 0 έως 5 για τις ειδοποιήσεις μιας εφαρμογής. \n\n"<b>"Επίπεδο 5"</b>" \n- Εμφάνιση στην κορυφή της λίστας ειδοποιήσεων \n- Να επιτρέπεται η διακοπή πλήρους οθόνης \n- Να γίνεται πάντα σύντομη προβολή \n\n"<b>"Επίπεδο 4"</b>" \n- Αποτροπή διακοπής πλήρους οθόνης \n- Να γίνεται πάντα σύντομη προβολή \n\n"<b>"Επίπεδο 3"</b>" \n- Αποτροπή διακοπής πλήρους οθόνης \n- Να μην γίνεται ποτέ σύντομη προβολή \n\n"<b>"Επίπεδο 2"</b>" \n- Αποτροπή διακοπής πλήρους οθόνης \n- Να μην γίνεται ποτέ σύντομη προβολή \n- Να μην χρησιμοποιείται ποτέ ήχος και δόνηση \n\n"<b>"Επίπεδο 1"</b>" \n- Αποτροπή διακοπής πλήρους οθόνης \n- Να μην γίνεται ποτέ σύντομη προβολή \n- Να μην χρησιμοποιείται ποτέ ήχος και δόνηση \n- Απόκρυψη από την οθόνη κλειδώματος και τη γραμμή κατάστασης \n- Εμφάνιση στο κάτω μέρος της λίστας ειδοποιήσεων \n\n"<b>"Επίπεδο 0"</b>" \n- Αποκλεισμός όλων των ειδοποιήσεων από την εφαρμογή"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Βαρύτητα: Αυτόματη"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Βαρύτητα: Επίπεδο 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Βαρύτητα: Επίπεδο 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Βαρύτητα: Επίπεδο 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Βαρύτητα: Επίπεδο 30"</string>
- <string name="high_importance" msgid="3441537905162782568">"Βαρύτητα: Επίπεδο 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Βαρύτητα: Επίπεδο 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Η εφαρμογή αποφασίζει για τη βαρύτητα κάθε ειδοποίησης."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Να μην εμφανίζονται ποτέ ειδοποιήσεις από αυτήν την εφαρμογή."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Χωρίς λειτ. διακοπ., σύντ. προβ., ήχου ή δόν. σε πλ. οθόνη. Απόκρ. από οθ. κλειδ. και γραμμή κατάστ."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Να μην είναι διαθέσιμες οι λειτουργίες διακοπής, σύντομης προβολής, ήχου ή δόνησης σε πλήρη οθόνη."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Να μην γίνεται διακοπή ή σύντομη προβολή σε πλήρη οθόνη."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Να γίνεται πάντα σύντομη προβολή. Να μην γίνεται διακοπή σε πλήρη οθόνη."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Να γίνεται πάντα σύντομη προβολή και να επιτρέπεται η διακοπή σε πλήρη οθόνη."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Περισσότερες ρυθμίσεις"</string>
<string name="notification_done" msgid="5279426047273930175">"Τέλος"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Στοιχεία ελέγχου κοινοποίησης <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Επεξεργασία σειράς ρυθμίσεων."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Σελίδα <xliff:g id="ID_1">%1$d</xliff:g> από <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Ανάπτυξη"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Ελαχιστοποίηση"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Παράβλεψη"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Αύξηση θερμοκρασίας τηλεφώνου"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Ορισμένες λειτουργίες περιορίζονται κατά τη μείωση της θερμοκρασίας"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Το τηλέφωνό σας θα προσπαθήσει να μειώσει αυτόματα τη θερμοκρασία. Μπορείτε να εξακολουθήσετε να το χρησιμοποιείτε, αλλά είναι πιθανό να λειτουργεί πιο αργά.\n\nΜόλις μειωθεί η θερμοκρασία του τηλεφώνου σας, θα λειτουργεί ξανά κανονικά."</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index d73e130..883c812 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Battery charging, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> percent."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"System settings"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Notifications."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Notification overflow container"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Clear notification."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS enabled."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS acquiring."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Lock screen."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Settings"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Overview."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Close"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi turned off."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Clear all"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Start now"</string>
<string name="empty_shade_text" msgid="708135716272867002">"No notifications"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Device may be monitored"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profile may be monitored"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Network may be monitored"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Network may be monitored"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Device monitoring"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profile monitoring"</string>
<string name="monitoring_title" msgid="169206259253048106">"Network monitoring"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Network Logging"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Disable VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Disconnect VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information. For more information, contact your administrator."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Your device is managed by <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> uses <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> to manage your device."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Your administrator can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Find out more"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"You\'re connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Open VPN Settings"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Your admin has turned on network logging, which monitors traffic on your device.\n\nFor more information contact your admin."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"You gave an app permission to set up a VPN connection.\n\nThis app can monitor your device and network activity, including emails, apps and websites."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nYou\'re connected to a VPN, which can monitor your network activity, including emails, apps and websites.\n\nFor more information, contact your administrator."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps, and websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your network activity."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your network activity including emails, apps and websites."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nFor more information, contact your administrator."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nYou\'re also connected to <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, which can monitor your personal network activity."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nYou\'re connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your network activity, including emails, apps, and websites.\n\nFor more information, contact your administrator."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Device will stay locked until you manually unlock"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Get notifications faster"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"See them before you unlock"</string>
@@ -430,31 +440,23 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Expand"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Collapse"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Screen is pinned"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"This keeps it in view until you unpin. Touch & hold Back to unpin."</string>
+ <string name="screen_pinning_description" msgid="8909878447196419623">"This keeps it in view until you unpin. Touch & hold Back and Overview to unpin."</string>
+ <string name="screen_pinning_description_accessible" msgid="426190689254018656">"This keeps it in view until you unpin. Touch & hold Overview to unpin."</string>
<string name="screen_pinning_positive" msgid="3783985798366751226">"Got it"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"No, thanks"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Hide <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"It will reappear the next time you turn it on in settings."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Hide"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> wants to be the volume dialogue."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Allow"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Deny"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> is the volume dialogue"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Tap to restore the original."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"You\'re using your work profile"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Call"</item>
- <item msgid="5997713001067658559">"System"</item>
- <item msgid="7858983209929864160">"Ring"</item>
- <item msgid="1850038478268896762">"Media"</item>
- <item msgid="8265110906352372092">"Alarm"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Accessibility"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Call"</string>
+ <string name="stream_system" msgid="7493299064422163147">"System"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Ring"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Media"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarm"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Notification"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Dual multi-tone frequency"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Accessibility"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Tap to unmute."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Tap to set to vibrate. Accessibility services may be muted."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tap to mute. Accessibility services may be muted."</string>
@@ -466,7 +468,7 @@
<string name="quick_settings" msgid="10042998191725428">"Quick Settings"</string>
<string name="status_bar" msgid="4877645476959324760">"Status bar"</string>
<string name="overview" msgid="4018602013895926956">"Overview"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Demo mode"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"System UI demo mode"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Enable demo mode"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Show demo mode"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +508,17 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"On"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Off"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"With power notification controls, you can set an importance level from 0 to 5 for an app\'s notifications. \n\n"<b>"Level 5"</b>" \n- Show at the top of the notification list \n- Allow full screen interruption \n- Always peek \n\n"<b>"Level 4"</b>" \n- Prevent full screen interruption \n- Always peek \n\n"<b>"Level 3"</b>" \n- Prevent full screen interruption \n- Never peek \n\n"<b>"Level 2"</b>" \n- Prevent full screen interruption \n- Never peek \n- Never make sound and vibration \n\n"<b>"Level 1"</b>" \n- Prevent full screen interruption \n- Never peek \n- Never make sound or vibrate \n- Hide from lock screen and status bar \n- Show at the bottom of the notification list \n\n"<b>"Level 0"</b>" \n- Block all notifications from the app"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Importance: Automatic"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Importance: Level 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Importance: Level 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Importance: Level 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Importance: Level 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Importance: Level 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Importance: Level 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"App determines importance for each notification."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Never show notifications from this app."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"No full screen interruption, peeking, sound or vibration. Hide from lock screen and status bar."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"No full screen interruption, peeking, sound or vibration."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"No full screen interruption or peeking."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Always peek. No full screen interruption."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Always peek, and allow full screen interruption."</string>
+ <string name="notification_header_default_channel" msgid="7506845022070889909">"Notifications"</string>
+ <string name="notification_channel_disabled" msgid="5805874247999578073">"You won\'t get these notifications anymore."</string>
+ <string name="notification_importance_header_app" msgid="3572576545406258751">"<xliff:g id="APP">%s</xliff:g> notifications for"</string>
+ <string name="min_importance" msgid="7559703098688382595">"Low"</string>
+ <string name="low_importance" msgid="6891335321576225228">"Medium"</string>
+ <string name="default_importance" msgid="6400766013567512061">"High"</string>
+ <string name="high_importance" msgid="730741630855788381">"Urgent"</string>
+ <string name="notification_importance_min" msgid="3237794091374404537">"No sound or visual interruption"</string>
+ <string name="notification_importance_low" msgid="8929105501798019743">"Show silently"</string>
+ <string name="notification_importance_default" msgid="9025125660733917469">"Make sound"</string>
+ <string name="notification_importance_high" msgid="3316555356062640222">"Make sound and pop on screen"</string>
<string name="notification_more_settings" msgid="816306283396553571">"More settings"</string>
<string name="notification_done" msgid="5279426047273930175">"Done"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> notification controls"</string>
@@ -652,4 +651,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Edit order of settings."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Page <xliff:g id="ID_1">%1$d</xliff:g> of <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Expand"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimise"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Dismiss"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Phone is getting warm"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Some features limited while phone cools down"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Your phone will automatically try to cool down. You can still use your phone, but it may run more slowly.\n\nOnce your phone has cooled down, it will run normally."</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index d73e130..883c812 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Battery charging, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> percent."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"System settings"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Notifications."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Notification overflow container"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Clear notification."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS enabled."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS acquiring."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Lock screen."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Settings"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Overview."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Close"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi turned off."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Clear all"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Start now"</string>
<string name="empty_shade_text" msgid="708135716272867002">"No notifications"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Device may be monitored"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profile may be monitored"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Network may be monitored"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Network may be monitored"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Device monitoring"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profile monitoring"</string>
<string name="monitoring_title" msgid="169206259253048106">"Network monitoring"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Network Logging"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Disable VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Disconnect VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information. For more information, contact your administrator."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Your device is managed by <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> uses <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> to manage your device."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Your administrator can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Find out more"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"You\'re connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Open VPN Settings"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Your admin has turned on network logging, which monitors traffic on your device.\n\nFor more information contact your admin."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"You gave an app permission to set up a VPN connection.\n\nThis app can monitor your device and network activity, including emails, apps and websites."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nYou\'re connected to a VPN, which can monitor your network activity, including emails, apps and websites.\n\nFor more information, contact your administrator."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps, and websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your network activity."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your network activity including emails, apps and websites."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nFor more information, contact your administrator."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nYou\'re also connected to <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, which can monitor your personal network activity."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nYou\'re connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your network activity, including emails, apps, and websites.\n\nFor more information, contact your administrator."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Device will stay locked until you manually unlock"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Get notifications faster"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"See them before you unlock"</string>
@@ -430,31 +440,23 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Expand"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Collapse"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Screen is pinned"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"This keeps it in view until you unpin. Touch & hold Back to unpin."</string>
+ <string name="screen_pinning_description" msgid="8909878447196419623">"This keeps it in view until you unpin. Touch & hold Back and Overview to unpin."</string>
+ <string name="screen_pinning_description_accessible" msgid="426190689254018656">"This keeps it in view until you unpin. Touch & hold Overview to unpin."</string>
<string name="screen_pinning_positive" msgid="3783985798366751226">"Got it"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"No, thanks"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Hide <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"It will reappear the next time you turn it on in settings."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Hide"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> wants to be the volume dialogue."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Allow"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Deny"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> is the volume dialogue"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Tap to restore the original."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"You\'re using your work profile"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Call"</item>
- <item msgid="5997713001067658559">"System"</item>
- <item msgid="7858983209929864160">"Ring"</item>
- <item msgid="1850038478268896762">"Media"</item>
- <item msgid="8265110906352372092">"Alarm"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Accessibility"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Call"</string>
+ <string name="stream_system" msgid="7493299064422163147">"System"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Ring"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Media"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarm"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Notification"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Dual multi-tone frequency"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Accessibility"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Tap to unmute."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Tap to set to vibrate. Accessibility services may be muted."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tap to mute. Accessibility services may be muted."</string>
@@ -466,7 +468,7 @@
<string name="quick_settings" msgid="10042998191725428">"Quick Settings"</string>
<string name="status_bar" msgid="4877645476959324760">"Status bar"</string>
<string name="overview" msgid="4018602013895926956">"Overview"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Demo mode"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"System UI demo mode"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Enable demo mode"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Show demo mode"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +508,17 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"On"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Off"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"With power notification controls, you can set an importance level from 0 to 5 for an app\'s notifications. \n\n"<b>"Level 5"</b>" \n- Show at the top of the notification list \n- Allow full screen interruption \n- Always peek \n\n"<b>"Level 4"</b>" \n- Prevent full screen interruption \n- Always peek \n\n"<b>"Level 3"</b>" \n- Prevent full screen interruption \n- Never peek \n\n"<b>"Level 2"</b>" \n- Prevent full screen interruption \n- Never peek \n- Never make sound and vibration \n\n"<b>"Level 1"</b>" \n- Prevent full screen interruption \n- Never peek \n- Never make sound or vibrate \n- Hide from lock screen and status bar \n- Show at the bottom of the notification list \n\n"<b>"Level 0"</b>" \n- Block all notifications from the app"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Importance: Automatic"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Importance: Level 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Importance: Level 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Importance: Level 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Importance: Level 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Importance: Level 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Importance: Level 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"App determines importance for each notification."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Never show notifications from this app."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"No full screen interruption, peeking, sound or vibration. Hide from lock screen and status bar."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"No full screen interruption, peeking, sound or vibration."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"No full screen interruption or peeking."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Always peek. No full screen interruption."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Always peek, and allow full screen interruption."</string>
+ <string name="notification_header_default_channel" msgid="7506845022070889909">"Notifications"</string>
+ <string name="notification_channel_disabled" msgid="5805874247999578073">"You won\'t get these notifications anymore."</string>
+ <string name="notification_importance_header_app" msgid="3572576545406258751">"<xliff:g id="APP">%s</xliff:g> notifications for"</string>
+ <string name="min_importance" msgid="7559703098688382595">"Low"</string>
+ <string name="low_importance" msgid="6891335321576225228">"Medium"</string>
+ <string name="default_importance" msgid="6400766013567512061">"High"</string>
+ <string name="high_importance" msgid="730741630855788381">"Urgent"</string>
+ <string name="notification_importance_min" msgid="3237794091374404537">"No sound or visual interruption"</string>
+ <string name="notification_importance_low" msgid="8929105501798019743">"Show silently"</string>
+ <string name="notification_importance_default" msgid="9025125660733917469">"Make sound"</string>
+ <string name="notification_importance_high" msgid="3316555356062640222">"Make sound and pop on screen"</string>
<string name="notification_more_settings" msgid="816306283396553571">"More settings"</string>
<string name="notification_done" msgid="5279426047273930175">"Done"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> notification controls"</string>
@@ -652,4 +651,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Edit order of settings."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Page <xliff:g id="ID_1">%1$d</xliff:g> of <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Expand"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimise"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Dismiss"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Phone is getting warm"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Some features limited while phone cools down"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Your phone will automatically try to cool down. You can still use your phone, but it may run more slowly.\n\nOnce your phone has cooled down, it will run normally."</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index d73e130..883c812 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Battery charging, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> percent."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"System settings"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Notifications."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Notification overflow container"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Clear notification."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS enabled."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS acquiring."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Lock screen."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Settings"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Overview."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Close"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi turned off."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Clear all"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Start now"</string>
<string name="empty_shade_text" msgid="708135716272867002">"No notifications"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Device may be monitored"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profile may be monitored"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Network may be monitored"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Network may be monitored"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Device monitoring"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profile monitoring"</string>
<string name="monitoring_title" msgid="169206259253048106">"Network monitoring"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Network Logging"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Disable VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Disconnect VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information. For more information, contact your administrator."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Your device is managed by <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> uses <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> to manage your device."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Your administrator can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Find out more"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"You\'re connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Open VPN Settings"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Your admin has turned on network logging, which monitors traffic on your device.\n\nFor more information contact your admin."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"You gave an app permission to set up a VPN connection.\n\nThis app can monitor your device and network activity, including emails, apps and websites."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nYou\'re connected to a VPN, which can monitor your network activity, including emails, apps and websites.\n\nFor more information, contact your administrator."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps, and websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your network activity."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your network activity including emails, apps and websites."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nFor more information, contact your administrator."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nYou\'re also connected to <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, which can monitor your personal network activity."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nYou\'re connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your network activity, including emails, apps, and websites.\n\nFor more information, contact your administrator."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Device will stay locked until you manually unlock"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Get notifications faster"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"See them before you unlock"</string>
@@ -430,31 +440,23 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Expand"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Collapse"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Screen is pinned"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"This keeps it in view until you unpin. Touch & hold Back to unpin."</string>
+ <string name="screen_pinning_description" msgid="8909878447196419623">"This keeps it in view until you unpin. Touch & hold Back and Overview to unpin."</string>
+ <string name="screen_pinning_description_accessible" msgid="426190689254018656">"This keeps it in view until you unpin. Touch & hold Overview to unpin."</string>
<string name="screen_pinning_positive" msgid="3783985798366751226">"Got it"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"No, thanks"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Hide <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"It will reappear the next time you turn it on in settings."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Hide"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> wants to be the volume dialogue."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Allow"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Deny"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> is the volume dialogue"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Tap to restore the original."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"You\'re using your work profile"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Call"</item>
- <item msgid="5997713001067658559">"System"</item>
- <item msgid="7858983209929864160">"Ring"</item>
- <item msgid="1850038478268896762">"Media"</item>
- <item msgid="8265110906352372092">"Alarm"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Accessibility"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Call"</string>
+ <string name="stream_system" msgid="7493299064422163147">"System"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Ring"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Media"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarm"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Notification"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Dual multi-tone frequency"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Accessibility"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Tap to unmute."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Tap to set to vibrate. Accessibility services may be muted."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tap to mute. Accessibility services may be muted."</string>
@@ -466,7 +468,7 @@
<string name="quick_settings" msgid="10042998191725428">"Quick Settings"</string>
<string name="status_bar" msgid="4877645476959324760">"Status bar"</string>
<string name="overview" msgid="4018602013895926956">"Overview"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Demo mode"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"System UI demo mode"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Enable demo mode"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Show demo mode"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +508,17 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"On"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Off"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"With power notification controls, you can set an importance level from 0 to 5 for an app\'s notifications. \n\n"<b>"Level 5"</b>" \n- Show at the top of the notification list \n- Allow full screen interruption \n- Always peek \n\n"<b>"Level 4"</b>" \n- Prevent full screen interruption \n- Always peek \n\n"<b>"Level 3"</b>" \n- Prevent full screen interruption \n- Never peek \n\n"<b>"Level 2"</b>" \n- Prevent full screen interruption \n- Never peek \n- Never make sound and vibration \n\n"<b>"Level 1"</b>" \n- Prevent full screen interruption \n- Never peek \n- Never make sound or vibrate \n- Hide from lock screen and status bar \n- Show at the bottom of the notification list \n\n"<b>"Level 0"</b>" \n- Block all notifications from the app"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Importance: Automatic"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Importance: Level 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Importance: Level 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Importance: Level 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Importance: Level 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Importance: Level 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Importance: Level 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"App determines importance for each notification."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Never show notifications from this app."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"No full screen interruption, peeking, sound or vibration. Hide from lock screen and status bar."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"No full screen interruption, peeking, sound or vibration."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"No full screen interruption or peeking."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Always peek. No full screen interruption."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Always peek, and allow full screen interruption."</string>
+ <string name="notification_header_default_channel" msgid="7506845022070889909">"Notifications"</string>
+ <string name="notification_channel_disabled" msgid="5805874247999578073">"You won\'t get these notifications anymore."</string>
+ <string name="notification_importance_header_app" msgid="3572576545406258751">"<xliff:g id="APP">%s</xliff:g> notifications for"</string>
+ <string name="min_importance" msgid="7559703098688382595">"Low"</string>
+ <string name="low_importance" msgid="6891335321576225228">"Medium"</string>
+ <string name="default_importance" msgid="6400766013567512061">"High"</string>
+ <string name="high_importance" msgid="730741630855788381">"Urgent"</string>
+ <string name="notification_importance_min" msgid="3237794091374404537">"No sound or visual interruption"</string>
+ <string name="notification_importance_low" msgid="8929105501798019743">"Show silently"</string>
+ <string name="notification_importance_default" msgid="9025125660733917469">"Make sound"</string>
+ <string name="notification_importance_high" msgid="3316555356062640222">"Make sound and pop on screen"</string>
<string name="notification_more_settings" msgid="816306283396553571">"More settings"</string>
<string name="notification_done" msgid="5279426047273930175">"Done"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> notification controls"</string>
@@ -652,4 +651,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Edit order of settings."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Page <xliff:g id="ID_1">%1$d</xliff:g> of <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Expand"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimise"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Dismiss"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Phone is getting warm"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Some features limited while phone cools down"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Your phone will automatically try to cool down. You can still use your phone, but it may run more slowly.\n\nOnce your phone has cooled down, it will run normally."</string>
</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 6f2c7d5..e20b1cae 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -165,6 +165,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Configuración del sistema"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Notificaciones"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Contenedor del flujo de notificaciones"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Eliminar notificación"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS habilitado"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Adquisición de GPS"</string>
@@ -186,6 +187,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Pantalla bloqueada"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Configuración"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Recientes"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Cerrar"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>"</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi desactivado"</string>
@@ -352,7 +355,7 @@
<string name="speed_bump_explanation" msgid="1288875699658819755">"Notificaciones menos urgentes abajo"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Presionar de nuevo para abrir"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Desliza el dedo hacia arriba para desbloquear el teléfono"</string>
- <string name="do_disclosure_generic" msgid="8498005633306135779">"Este dispositivo está administrado"</string>
+ <string name="do_disclosure_generic" msgid="8498005633306135779">"Este dispositivo es administrado"</string>
<string name="do_disclosure_with_name" msgid="5640615509915445501">"<xliff:g id="ORGANIZATION_NAME">%s</xliff:g> administra este dispositivo"</string>
<string name="phone_hint" msgid="4872890986869209950">"Desliza el dedo para desbloquear el teléfono."</string>
<string name="voice_hint" msgid="8939888732119726665">"Desliza el dedo desde el ícono para abrir asistente de voz."</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Borrar todo"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Comenzar ahora"</string>
<string name="empty_shade_text" msgid="708135716272867002">"No hay notificaciones"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Es posible que el dispositivo esté supervisado."</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Es posible que se supervise el perfil."</string>
<string name="vpn_footer" msgid="2388611096129106812">"Es posible que la red esté supervisada."</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Es posible que la red esté supervisada"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Supervisión del dispositivo"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Supervisión del perfil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Supervisión de red"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Registro de red"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Inhabilitar VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu dispositivo.\n\nEl administrador puede supervisar y administrar la configuración, el acceso corporativo, las aplicaciones, los datos asociados a este dispositivo y la información de ubicación del dispositivo. Para obtener más información, comunícate con el administrador."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> administra tu dispositivo."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> usa <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> para administrar tu dispositivo."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Tu administrador puede controlar la configuración, el acceso corporativo, las apps, los datos asociados y la información de ubicación de tu dispositivo."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Más información"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Estás conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que puede controlar la actividad de tu red, incluidos los correos electrónicos, las apps y los sitios web."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir configuración de VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Tu administrador activó el registro de red, que controla el tráfico en tu dispositivo.\n\nComunícate con él para obtener más información."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Permitiste que una aplicación configurara una conexión VPN.\n\nEsta aplicación puede supervisar la actividad de la red y del dispositivo, incluidos los correos electrónicos, las aplicaciones y los sitios web."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu dispositivo.\n\nEl administrador puede supervisar y administrar la configuración, el acceso corporativo, las aplicaciones, los datos asociados al dispositivo y la información de ubicación.\n\nTambién tienes una conexión VPN, que puede supervisar la actividad de la red (correo electrónico, aplicaciones y sitios web).\n\nPara obtener más información, comunícate con el administrador."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu perfil de trabajo.\n\nEl administrador puede supervisar la actividad de la red, incluidos los correos electrónicos, las aplicaciones y los sitios web.\n\nPara obtener más información, comunícate con el administrador.\n\nTambién tienes conexión a una VPN, que puede supervisar la actividad de tu red."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Tienes conexión a la aplicación <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede supervisar la actividad de la red, incluidos los correos electrónicos, las aplicaciones y los sitios web."</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Te conectaste a <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede supervisar la actividad de tu red personal, incluidos los correos electrónicos, las apps y los sitios web."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu perfil de trabajo. Tiene conexión a <xliff:g id="APPLICATION">%2$s</xliff:g>, que puede supervisar la actividad de tu red de trabajo, incluidos los correos electrónicos, las aplicaciones y los sitios web.\n\nPara obtener más información, comunícate con el administrador."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu perfil de trabajo. Tiene conexión a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que puede supervisar la actividad de tu red de trabajo, incluidos los correos electrónicos, las aplicaciones y los sitios web.\n\nTambién tienes conexión a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que puede supervisar la actividad de la red personal."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu dispositivo.\n\nEl administrador puede supervisar y administrar la configuración, el acceso corporativo, las aplicaciones, los datos asociados al dispositivo y la información de la ubicación.\n\nTienes conexión a <xliff:g id="APPLICATION">%2$s</xliff:g>, que puede supervisar la actividad de la red, incluidos los correos electrónicos, las aplicaciones y los sitios web.\n\nPara obtener más información, comunícate con el administrador."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"El dispositivo permanecerá bloqueado hasta que lo desbloquees manualmente."</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Recibe notificaciones más rápido"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Ver antes de desbloquear"</string>
@@ -432,31 +442,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Expandir"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Contraer"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Pantalla fija"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Esta función mantiene la pantalla visible hasta que dejes de fijarla. Para ello, mantén presionado el botón Atrás."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Entendido"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"No, gracias"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"¿Ocultar <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Volverá a aparecer la próxima vez que se active en la configuración."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ocultar"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> quiere ser el cuadro de diálogo de volumen."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Permitir"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Rechazar"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> es el cuadro de diálogo de volumen."</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Presiona para restablecer el original."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Estás usando tu perfil de trabajo"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Llamar"</item>
- <item msgid="5997713001067658559">"Sistema"</item>
- <item msgid="7858983209929864160">"Hacer sonar"</item>
- <item msgid="1850038478268896762">"Multimedia"</item>
- <item msgid="8265110906352372092">"Alarma"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Accesibilidad"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Llamada"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistema"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Hacer sonar"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Multimedia"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarma"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Notificación"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Multifrecuencia de tono doble"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Accesibilidad"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Presiona para dejar de silenciar."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Presiona para establecer el modo vibración. Es posible que los servicios de accesibilidad estén silenciados."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Presiona para silenciar. Es posible que los servicios de accesibilidad estén silenciados."</string>
@@ -468,7 +472,7 @@
<string name="quick_settings" msgid="10042998191725428">"Configuración rápida"</string>
<string name="status_bar" msgid="4877645476959324760">"Barra de estado"</string>
<string name="overview" msgid="4018602013895926956">"Recientes"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Modo demostración"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Modo demostración de la IU del sistema"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Activar el modo de demostración"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Ver en modo de demostración"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -508,20 +512,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Activado"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Desactivado"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Con los controles de activación de notificaciones, puedes establecer un nivel de importancia para las notificaciones de una app. \n\n"<b>"Nivel 5"</b>" \n- Mostrar en la parte superior de la lista de notificaciones. \n- Permitir interrupción en la pantalla completa. \n- Mostrar siempre. \n\n"<b>"Nivel 4"</b>" \n- No permitir interrupción en la pantalla completa. \n- Mostrar siempre. \n\n"<b>"Nivel 3"</b>" \n- No permitir interrupción en la pantalla completa. \n- No mostrar. \n\n"<b>"Nivel 2"</b>" \n- No permitir interrupción en la pantalla completa. \n- No mostrar. \n- No sonar ni vibrar. \n\n"<b>"Nivel 1"</b>" \n- No permitir interrupción en la pantalla completa. \n- No mostrar. \n- No sonar ni vibrar. \n- Ocultar de la pantalla bloqueada y la barra de estado. \n- Mostrar al final de la lista de notificaciones. \n\n"<b>"Nivel 0"</b>" \n- Bloquear todas las notificaciones de la app."</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Importancia: Automática"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Importancia: Nivel 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Importancia: Nivel 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Importancia: Nivel 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Importancia: Nivel 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Importancia: Nivel 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Importancia: Nivel 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"La app determina la importancia de cada notificación."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"No mostrar notificaciones de esta app"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"No interrumpir pantalla, mostrar, sonar ni vibrar. Ocultar de pantalla bloqueada y barra de estado."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"No interrumpir en la pantalla completa, mostrar, sonar ni vibrar"</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"No mostrar ni interrumpir en la pantalla"</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Mostrar siempre, pero no interrumpir en la pantalla completa"</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Mostrar siempre y permitir interrupción en la pantalla completa"</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Más opciones de configuración"</string>
<string name="notification_done" msgid="5279426047273930175">"Listo"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Controles de notificaciones de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -654,4 +666,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Editar orden de configuración"</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Página <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Expandir"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizar"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Descartar"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"El teléfono se está calentando"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Se limitarán algunas funciones mientras se enfría el teléfono"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Tu teléfono intentará enfriarse automáticamente. Podrás usarlo, pero es posible que funcione más lento.\n\nUna vez que se haya enfriado, volverá a funcionar correctamente."</string>
</resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index ba9154d..a2bf7a3 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -165,6 +165,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Ajustes del sistema"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Notificaciones"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Contenedor adicional de notificaciones"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Borrar notificación"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS habilitado"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Obteniendo ubicación..."</string>
@@ -186,6 +187,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Pantalla de bloqueo."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Ajustes"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Aplicaciones recientes."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Cerrar"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi desactivado."</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Borrar todo"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Iniciar ahora"</string>
<string name="empty_shade_text" msgid="708135716272867002">"No hay notificaciones"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Es posible que este dispositivo esté supervisado"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Es posible que se supervise el perfil"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Puede que la red esté supervisada"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Puede que la red esté supervisada"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Supervisión de dispositivo"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Supervisión del perfil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Supervisión de red"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Registro de red"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Inhabilitar VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Administrador de tu dispositivo: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nEl administrador puede controlar y administrar los ajustes, el acceso corporativo, las aplicaciones, los datos asociados al dispositivo e información de su ubicación. Para obtener más información, ponte en contacto con el administrador."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Tu dispositivo está administrado por <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> utiliza <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> para administrar tu dispositivo."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Tu admin. puede controlar y gestionar ajustes, acceso corporativo, apps, datos asociados al dispositivo y sus datos de ubicación."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Más información"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Te has conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que puede controlar tu actividad de red, como los correos electrónicos, las aplicaciones y los sitios web."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir Ajustes de red VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Tu administrador ha activado el registro de la red para controlar el tráfico en tu dispositivo.\n\nPonte en contacto con él para obtener más información."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Has concedido permiso a una aplicación para configurar una conexión VPN.\n\nEsta aplicación puede controlar tu dispositivo y tu actividad de red, como correos electrónicos, aplicaciones y sitios web."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Administrador del dispositivo: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nEl administrador puede controlar y administrar los ajustes, el acceso corporativo, las aplicaciones, los datos asociados al dispositivo e información de su ubicación.\n\nEstás conectado a una red VPN que puede controlar tu actividad de red, como correos electrónicos, aplicaciones y sitios web.\n\nPara obtener más información, ponte en contacto con el administrador."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"El administrador de tu perfil de trabajo es <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nTu administrador puede supervisar tu actividad de red, como correos electrónicos, aplicaciones y sitios web.\n\nPara obtener más información, ponte en contacto con tu administrador.\n\nTambién estás conectado a una red VPN que puede supervisar tu actividad de red."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Estás conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede controlar tu actividad de red, como correos electrónicos, aplicaciones y sitios web."</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Estas conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede controlar tu actividad de red personal, como correos electrónicos, aplicaciones y sitios web."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"El administrador de tu perfil de trabajo es <xliff:g id="ORGANIZATION">%1$s</xliff:g> y está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que puede controlar tu actividad de red del trabajo, como correos electrónicos, aplicaciones y sitios web.\n\nPara obtener más información, ponte en contacto con el administrador."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"El administrador de tu perfil de trabajo es <xliff:g id="ORGANIZATION">%1$s</xliff:g> y está conectado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que puede controlar tu actividad de red, como correos electrónicos, aplicaciones y sitios web.\n\nTú también estás conectado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que puede controlar tu actividad de red personal."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"El administrador de tu dispositivo es <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nTu administrador puede supervisar y administrar los ajustes, el acceso corporativo, las aplicaciones, los datos asociados al dispositivo e información de su ubicación.\n\nEstás conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que puede supervisar tu actividad de red, como correos electrónicos, aplicaciones y sitios web.\n\nPara obtener más información, ponte en contacto con tu administrador."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"El dispositivo permanecerá bloqueado hasta que se desbloquee manualmente"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Recibe notificaciones más rápido"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Ver antes de desbloquear"</string>
@@ -432,31 +442,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Mostrar"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Ocultar"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Pantalla fijada"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"La pantalla se mantiene visible hasta que dejes de fijarla (para ello, mantén pulsado el botón Atrás)."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Entendido"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"No, gracias"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"¿Ocultar <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Volverá a aparecer la próxima vez que actives esta opción en Ajustes."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ocultar"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> quiere ser el cuadro de diálogo de volumen."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Permitir"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Rechazar"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> es el cuadro de diálogo de volumen"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Toca para restaurar el original."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Estás usando tu perfil de trabajo"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Llamar"</item>
- <item msgid="5997713001067658559">"Sistema"</item>
- <item msgid="7858983209929864160">"Hacer sonar"</item>
- <item msgid="1850038478268896762">"Multimedia"</item>
- <item msgid="8265110906352372092">"Alarma"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Accesibilidad"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Llamada"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistema"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Tono"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Multimedia"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarma"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Notificación"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Multifrecuencia de tono dual"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Accesibilidad"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Toca para activar el sonido."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Toca para poner el dispositivo en vibración. Los servicios de accesibilidad pueden silenciarse."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Toca para silenciar. Los servicios de accesibilidad pueden silenciarse."</string>
@@ -468,7 +472,7 @@
<string name="quick_settings" msgid="10042998191725428">"Ajustes rápidos"</string>
<string name="status_bar" msgid="4877645476959324760">"Barra de estado"</string>
<string name="overview" msgid="4018602013895926956">"Aplicaciones recientes"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Modo de demostración"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Modo de demostración de IU del sistema"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Habilitar modo de demostración"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Mostrar modo de demostración"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -508,20 +512,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Sí"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"No"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Los controles de energía de las notificaciones permiten establecer un nivel de importancia de 0 a 5 para las notificaciones de las aplicaciones. \n\n"<b>"Nivel 5"</b>" \n- Mostrar en la parte superior de la lista de notificaciones \n- Permitir interrumpir en el modo de pantalla completa \n- Mostrar siempre \n\n"<b>"Nivel 4"</b>" \n- Evitar interrumpir en el modo de pantalla completa \n- Mostrar siempre \n\n"<b>"Nivel 3"</b>" \n- Evitar interrumpir en el modo de pantalla completa \n- No mostrar nunca \n\n"<b>"Nivel 2"</b>" \n- Evitar interrumpir en el modo de pantalla completa\n- No mostrar nunca \n- No emitir sonido ni vibrar nunca \n\n"<b>"Nivel 1"</b>" \n- Evitar interrumpir en el modo de pantalla completa \n- No mostrar nunca \n- No emitir sonido ni vibrar nunca \n- Ocultar de la pantalla de bloqueo y de la barra de estado \n- Mostrar en la parte inferior de la lista de notificaciones \n\n"<b>"Nivel 0"</b>" \n- Bloquear todas las notificaciones de la aplicación"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Importancia: Automático"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Importancia: Nivel 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Importancia: Nivel 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Importancia: Nivel 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Importancia: Nivel 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Importancia: Nivel 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Importancia: Nivel 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"La aplicación determina la importancia de cada notificación."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"No mostrar nunca notificaciones de esta aplicación."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"No interrumpir, mostrar, emitir sonido ni vibrar en el modo de pantalla completa. Ocultar de pantalla de bloqueo y barra de estado."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"No interrumpir, mostrar, emitir sonido ni vibrar en el modo de pantalla completa."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"No interrumpir ni mostrar en el modo de pantalla completa."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Mostrar siempre. No interrumpir en el modo de pantalla completa."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Mostrar siempre y permitir interrumpir en el modo de pantalla completa."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Más ajustes"</string>
<string name="notification_done" msgid="5279426047273930175">"Listo"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Controles de notificaciones de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -654,4 +666,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Cambiar el orden de los ajustes."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Página <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Mostrar"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizar"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Rechazar"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"El teléfono se está calentando"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Se limitan algunas funciones mientras el teléfono se enfría"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"El teléfono intentará enfriarse. Puedes seguir utilizándolo, pero es posible que funcione con mayor lentitud.\n\nUna vez que se haya enfriado, funcionará con normalidad."</string>
</resources>
diff --git a/packages/SystemUI/res/values-et-rEE-land/strings.xml b/packages/SystemUI/res/values-et-rEE-land/strings.xml
deleted file mode 100644
index 77b0ce1..0000000
--- a/packages/SystemUI/res/values-et-rEE-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"Ekraan on nüüd lukustatud horisontaalasendisse."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-et-rEE/config.xml b/packages/SystemUI/res/values-et/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-et-rEE/config.xml
rename to packages/SystemUI/res/values-et/config.xml
diff --git a/packages/SystemUI/res/values-et-rEE/strings.xml b/packages/SystemUI/res/values-et/strings.xml
similarity index 93%
rename from packages/SystemUI/res/values-et-rEE/strings.xml
rename to packages/SystemUI/res/values-et/strings.xml
index 7566137..ed6e7f4 100644
--- a/packages/SystemUI/res/values-et-rEE/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -165,6 +165,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Süsteemiseaded"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Märguanded"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Märguande ületäite konteiner"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Märguande eemaldamine."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS on lubatud."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS-signaali otsimine."</string>
@@ -186,6 +187,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Kuva lukustamine."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Seaded"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Ülevaade."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Sulgemine"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"WiFi on välja lülitatud."</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Tühjenda kõik"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Alusta kohe"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Märguandeid pole"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Seadet võidakse jälgida"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profiili võidakse jälgida"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Võrku võidakse jälgida"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Võrku võidakse jälgida"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Seadme jälgimine"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profiili jälgimine"</string>
<string name="monitoring_title" msgid="169206259253048106">"Võrgu jälgimine"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Võrgu logimine"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Keela VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Katkesta VPN-i ühendus"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Teie seadet haldab <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministraator saab jälgida ja hallata seadeid, ettevõttesisest juurdepääsu, rakendusi, seadmega seotud andmeid ja seadme asukohateavet. Lisateabe saamiseks võtke ühendust administraatoriga."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Teie seadet haldab rakendus <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"Organisatsioon <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> kasutab teie seadme haldamiseks rakendust <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administraator saab jälgida ja hallata teie seadmega seotud seadeid, ettevõtte juurdepääsu, rakendusi ning andmeid ja teie seadme asukohateavet."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Lisateave"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Olete ühendatud rakendusega <xliff:g id="VPN_APP">%1$s</xliff:g>, mis saab jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Ava VPN-i seaded"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Teie administraator on sisse lülitanud võrgu logimise funktsiooni, mis jälgib liiklust teie seadmes.\n\nLisateabe saamiseks pöörduge administraatori poole."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Andsite rakendusele loa VPN-i ühenduse seadistamiseks.\n\nSee rakendus võib jälgida teie seadet ja võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Teie seadet haldab <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministraator saab jälgida ja hallata seadeid, ettevõttesisest juurdepääsu, rakendusi, seadmega seotud andmeid ja seadme asukohateavet.\n\nTeil on ühendus VPN-iga, mis saab jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite.\n\nLisateabe saamiseks võtke ühendust administraatoriga."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Teie tööprofiili haldab organisatsioon <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministraator saab jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite.\n\nLisateabe saamiseks võtke ühendust administraatoriga.\n\nTeil on ühendus ka VPN-iga, mis saab jälgida teie võrgutegevusi."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Teie seade on ühendatud rakendusega <xliff:g id="APPLICATION">%1$s</xliff:g>, mis võib jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Olete ühendatud rakendusega <xliff:g id="APPLICATION">%1$s</xliff:g>, mis võib jälgida teie isiklikke võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Teie tööprofiili haldab organisatsioon <xliff:g id="ORGANIZATION">%1$s</xliff:g>. See on ühendatud rakendusega <xliff:g id="APPLICATION">%2$s</xliff:g>, mis võib jälgida teie töökoha võrgutegevusi, sh meile, rakendusi ja veebisaite.\n\nLisateabe saamiseks võtke ühendust administraatoriga."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Teie tööprofiili haldab organisatsioon <xliff:g id="ORGANIZATION">%1$s</xliff:g>. See on ühendatud rakendusega <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, mis võib jälgida teie töökoha võrgutegevusi, sh meile, rakendusi ja veebisaite.\n\nTeie seade on ühendatud ka rakendusega <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, mis võib jälgida teie isiklikke võrgutegevusi."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Teie seadet haldab organisatsioon <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministraator saab jälgida ja hallata seadeid, ettevõttesisest juurdepääsu, rakendusi, seadmega seotud andmeid ja seadme asukohateavet.\n\nOlete ühendatud rakendusega <xliff:g id="APPLICATION">%2$s</xliff:g>, mis saab jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite.\n\nLisateabe saamiseks võtke ühendust administraatoriga."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Seade jääb lukku, kuni selle käsitsi avate"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Saate märguandeid kiiremini"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Näete neid enne avamist"</string>
@@ -432,31 +442,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Laiendamine"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Ahendamine"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Ekraan on kinnitatud"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"See hoitakse kuval, kuni selle vabastate. Vabastamiseks puudutage pikalt nuppu Tagasi."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Selge"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Tänan, ei"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Kas peita <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"See kuvatakse uuesti järgmisel korral, kui selle seadetes sisse lülitate."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Peida"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> tahab olla helitugevuse dialoog."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Luba"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Keela"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> on helitugevuse dialoog"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Puudutage originaali taastamiseks."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Kasutate oma tööprofiili"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Helistamine"</item>
- <item msgid="5997713001067658559">"Süsteem"</item>
- <item msgid="7858983209929864160">"Helin"</item>
- <item msgid="1850038478268896762">"Meedia"</item>
- <item msgid="8265110906352372092">"Äratus"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Juurdepääsetavus"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Kõne"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Süsteem"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Helin"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Meedia"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarm"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Märguanne"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Kaks mitme tooniga sagedust"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Juurdepääsetavus"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Puudutage vaigistuse tühistamiseks."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Puudutage värinarežiimi määramiseks. Juurdepääsetavuse teenused võidakse vaigistada."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Puudutage vaigistamiseks. Juurdepääsetavuse teenused võidakse vaigistada."</string>
@@ -468,7 +472,7 @@
<string name="quick_settings" msgid="10042998191725428">"Kiirseaded"</string>
<string name="status_bar" msgid="4877645476959324760">"Olekuriba"</string>
<string name="overview" msgid="4018602013895926956">"Ülevaade"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Demorežiim"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Süsteemi kasutajaliidese demorežiim"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Demorežiimi lubamine"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Kuva demorežiim"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -508,20 +512,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Sees"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Väljas"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Toite märguannete juhtnuppudega saate määrata rakenduse märguannete tähtsuse taseme vahemikus 0–5. \n\n"<b>"5. tase"</b>" \n- Kuva märguannete loendi ülaosas\n- Luba täisekraanil häirimine \n- Kuva alati ekraani servas \n\n"<b>"4. tase"</b>" \n- Keela täisekraanil häirimine \n- Kuva alati ekraani servas \n\n"<b>"3. tase"</b>" \n- Keela täisekraanil häirimine \n- Ära kunagi kuva ekraani servas \n\n"<b>"2. tase"</b>" \n- Keela täisekraanil häirimine \n- Ära kunagi kuva ekraani servas \n- Ära kunagi helise ega vibreeri \n\n"<b>"1. tase"</b>" \n- Keela täisekraanil häirimine \n- Ära kunagi kuva ekraani servas \n- Ära kunagi helise ega vibreeri \n- Peida lukustuskuval ja olekuribal \n- Kuva märguannete loendi allosas \n\n"<b>"Tase 0"</b>" \n- Blokeeri kõik rakenduse märguanded"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Tähtsus: automaatne"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Tähtsus: tase 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Tähtsus: 1. tase"</string>
- <string name="low_importance" msgid="7571498511534140">"Tähtsus: 2. tase"</string>
- <string name="default_importance" msgid="7609889614553354702">"Tähtsus: 3. tase"</string>
- <string name="high_importance" msgid="3441537905162782568">"Tähtsus: 4. tase"</string>
- <string name="max_importance" msgid="4880179829869865275">"Tähtsus: 5. tase"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Rakendus määrab iga märguande tähtsuse."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Ära kuva kunagi selle rakenduse märguandeid."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Täisekr. häirimine, servas kuvamine, hel. ega vibr. pole lubatud. Peida lukustuskuval ja olekuribal"</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Täisekraanil häirimine, ekraani servas kuvamine, helisemine ega vibreerimine pole lubatud."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Täisekraanil häirimine ega ekraani servas kuvamine pole lubatud."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Kuva alati ekraani servas. Täisekraanil häirimine pole lubatud."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Kuva alati ekraani servas ja luba täisekraanil häirimine."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Rohkem seadeid"</string>
<string name="notification_done" msgid="5279426047273930175">"Valmis"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> märguannete juhtnupud"</string>
@@ -654,4 +666,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Muuda seadete järjestust."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Leht <xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Laiendamine"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimeeri"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Loobu"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Telefon soojeneb"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Mõned funktsioonid on piiratud, kuni telefon jahtub"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Teie telefon proovib automaatselt maha jahtuda. Saate telefoni ikka kasutada, kuid see võib olla aeglasem.\n\nKui telefon on jahtunud, töötab see tavapäraselt."</string>
</resources>
diff --git a/packages/SystemUI/res/values-et-rEE/strings_car.xml b/packages/SystemUI/res/values-et/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-et-rEE/strings_car.xml
rename to packages/SystemUI/res/values-et/strings_car.xml
diff --git a/packages/SystemUI/res/values-et-rEE/strings_tv.xml b/packages/SystemUI/res/values-et/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-et-rEE/strings_tv.xml
rename to packages/SystemUI/res/values-et/strings_tv.xml
diff --git a/packages/SystemUI/res/values-eu-rES-land/strings.xml b/packages/SystemUI/res/values-eu-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-eu-rES-land/strings.xml
rename to packages/SystemUI/res/values-eu-land/strings.xml
diff --git a/packages/SystemUI/res/values-eu-rPV-land/strings.xml b/packages/SystemUI/res/values-eu-rPV-land/strings.xml
deleted file mode 100644
index c8640c7..0000000
--- a/packages/SystemUI/res/values-eu-rPV-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"Pantaila horizontalki blokeatuta dago."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-eu-rES/config.xml b/packages/SystemUI/res/values-eu/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-eu-rES/config.xml
rename to packages/SystemUI/res/values-eu/config.xml
diff --git a/packages/SystemUI/res/values-eu-rES/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
similarity index 93%
rename from packages/SystemUI/res/values-eu-rES/strings.xml
rename to packages/SystemUI/res/values-eu/strings.xml
index b78ca62..c8e9ade 100644
--- a/packages/SystemUI/res/values-eu-rES/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -165,6 +165,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Sistemaren ezarpenak."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Jakinarazpenak."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Gehiegizko jakinarazpenen edukitzailea"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Garbitu jakinarazpena."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS aktibatuta."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS seinalea lortzen."</string>
@@ -186,6 +187,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Pantaila blokeatzeko aukera."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Ezarpenak"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Ikuspegi orokorra."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Itxi"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi konexioa desaktibatu egin da."</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Garbitu guztiak"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Hasi"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Ez dago jakinarazpenik"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Baliteke gailua kontrolatuta egotea"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Baliteke profila kontrolatuta egotea"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Baliteke sarea kontrolatuta egotea"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Baliteke sarea kontrolatuta egotea"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Gailuen kontrola"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profila kontrolatzeko aukera"</string>
<string name="monitoring_title" msgid="169206259253048106">"Sareen kontrola"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Sare-erregistroak"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Desgaitu VPN konexioa"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Deskonektatu VPN sarea"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Gailuaren kudeatzailea:<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratzaileak gailua eta sareko jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webgune seguruak barne. Informazio gehiago lortzeko, jarri administratzailearekin harremanetan."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> aplikazioak kudeatzen du gailu hau."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> erakundeak <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> erabiltzen du gailua kudeatzeko."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Gailuko ezarpenak, enpresa-sarbidea, aplikazioak eta datuak gainbegira eta kudea ditzake administratzaileak, baita gailuaren kokapen-informazioa ere."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Informazio gehiago"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"<xliff:g id="VPN_APP">%1$s</xliff:g> aplikaziora konektatuta zaude eta hark sareko jarduerak gainbegira ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Ireki VPN ezarpenak"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administratzaileak sare-erregistroak aktibatu ditu; horrela, zure gailuko trafikoa gainbegira dezake.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Aplikazio bati VPN konexio bat konfiguratzeko baimena eman diozu.\n\nAplikazio horrek gailuko eta sareko jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Gailuaren kudeatzailea:<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratzaileak ezarpenak, enpresako sarbidea, aplikazioak, gailuarekin lotutako datuak eta gailuaren kokapenari buruzko informazioa kontrola eta kudea ditzake.\n\nSareko jarduerak (mezu elektronikoak, aplikazioak eta webguneak barne) kontrola ditzakeen VPN batera konektatuta zaude.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> da laneko profilaren kudeatzailea.\n\nAdministratzaileak sareko jarduerak (mezu elektronikoak, aplikazioak eta webguneak barne) kontrola ditzake.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan.\n\nHorrez gain, sareko jarduerak kontrola ditzakeen VPN batera konektatuta zaude."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN konexioa"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"<xliff:g id="APPLICATION">%1$s</xliff:g> aplikaziora konektatuta zaude. Aplikazio horrek sarean egiten dituzun jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"<xliff:g id="APPLICATION">%1$s</xliff:g> aplikaziora konektatuta zaude. Aplikazio horrek sarean egiten dituzun jarduera pertsonalak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> da laneko profilaren kudeatzailea, eta profila <xliff:g id="APPLICATION">%2$s</xliff:g> aplikaziora konektatuta dago. Aplikazio horrek sarean egiten dituzun laneko jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> da laneko profilaren kudeatzailea, eta profila <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> aplikaziora konektatuta dago. Aplikazio horrek sarean egiten dituzun laneko jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne.\n\nHorrez gain, sarean egiten dituzun jarduera pertsonalak kontrola ditzakeen <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> aplikaziora konektatuta zaude."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> da gailuaren kudeatzailea.\n\nAdministratzaileak ezarpenak, enpresako sarbidea, aplikazioak, gailuarekin lotutako datuak eta gailuaren kokapenari buruzko informazioa kontrola eta kudea ditzake.\n\n<xliff:g id="APPLICATION">%2$s</xliff:g> aplikaziora konektatuta zaude. Aplikazio horrek sarean egiten dituzun jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Gailua blokeatuta egongo da eskuz desblokeatu arte"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Eskuratu jakinarazpenak azkarrago"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Ikusi desblokeatu baino lehen"</string>
@@ -432,31 +442,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Zabaldu"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Tolestu"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Pantaila ainguratuta dago"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Horrela, ikusgai egongo da aingura kendu arte. Aingura kentzeko, eduki sakatuta \"Atzera\" botoia."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Ados"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Ez, eskerrik asko"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> ezkutatu nahi duzu?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ezarpenetan aktibatzen duzun hurrengoan agertuko da berriro."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ezkutatu"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> bolumenaren leihoa izan nahian ari da."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Baimendu"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Ukatu"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> da bolumenaren leihoa"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Sakatu jatorrizkora leheneratzeko."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Work profila erabiltzen ari zara"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Deitu"</item>
- <item msgid="5997713001067658559">"Sistema"</item>
- <item msgid="7858983209929864160">"Tonua"</item>
- <item msgid="1850038478268896762">"Multimedia-edukia"</item>
- <item msgid="8265110906352372092">"Alarma"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth konexioa"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Erabilerraztasuna"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Deia"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistema"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Jo tonua"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Multimedia-edukia"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarma"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Jakinarazpena"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth konexioa"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Tonu anitzeko maiztasun duala"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Erabilerraztasuna"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Sakatu audioa aktibatzeko."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Sakatu dardara ezartzeko. Baliteke erabilerraztasun-eginbideen audioa desaktibatzea."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Sakatu audioa desaktibatzeko. Baliteke erabilerraztasun-eginbideen audioa desaktibatzea."</string>
@@ -468,7 +472,7 @@
<string name="quick_settings" msgid="10042998191725428">"Ezarpen bizkorrak"</string>
<string name="status_bar" msgid="4877645476959324760">"Egoera-barra"</string>
<string name="overview" msgid="4018602013895926956">"Ikuspegi orokorra"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Proba modua"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Sistemaren erabiltzaile-interfazearen demo modua"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Gaitu proba modua"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Erakutsi proba modua"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -508,20 +512,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Aktibatuta"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Desaktibatuta"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Bateria-mailaren arabera jakinarazpenak kontrolatzeko aukerekin, 0 eta 5 bitarteko garrantzi-mailetan sailka ditzakezu aplikazioen jakinarazpenak. \n\n"<b>"5. maila"</b>" \n- Erakutsi jakinarazpenen zerrendaren goialdean. \n- Baimendu etetea pantaila osoko moduan zaudenean. \n- Agerrarazi beti jakinarazpenak. \n\n"<b>"4. maila"</b>" \n- Galarazi etetea pantaila osoko moduan zaudenean. \n- Agerrarazi beti jakinarazpenak. \n\n"<b>"3. maila"</b>" \n- Galarazi etetea pantaila osoko moduan zaudenean. \n- Ez agerrarazi jakinarazpenik inoiz. \n\n"<b>"2. maila"</b>" \n- Galarazi etetea pantaila osoko moduan zaudenean. \n- Ez agerrarazi jakinarazpenik inoiz. \n- Ez egin soinurik edo dardararik inoiz. \n\n"<b>"1. maila"</b>" \n- Galarazi etetea pantaila osoko moduan zaudenean. \n- Ez agerrarazi jakinarazpenik inoiz. \n- Ez egin soinurik edo dardararik inoiz. \n- Ezkutatu pantaila blokeatutik eta egoera-barratik. \n- Erakutsi jakinarazpenen zerrendaren behealdean. \n\n"<b>"0. maila"</b>" \n- Blokeatu aplikazioaren jakinarazpen guztiak."</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Garrantzia: automatikoa"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Garrantzia: 0. maila"</string>
- <string name="min_importance" msgid="560779348928574878">"Garrantzia: 1. maila"</string>
- <string name="low_importance" msgid="7571498511534140">"Garrantzia: 2. maila"</string>
- <string name="default_importance" msgid="7609889614553354702">"Garrantzia: 3. maila"</string>
- <string name="high_importance" msgid="3441537905162782568">"Garrantzia: 4. maila"</string>
- <string name="max_importance" msgid="4880179829869865275">"Garrantzia: 5. maila"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Aplikazioak zehazten du jakinarazpen bakoitzaren garrantzia."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Ez erakutsi inoiz aplikazio honen jakinarazpenak."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Ez eten, ez agerrarazi jakinarazpenik eta ez egin soinurik edo dardararik pantaila osoko modua aktibo dagoenean. Ezkutatu pantaila blokeatutik eta egoera-barratik."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Ez eten, ez agerrarazi jakinarazpenik eta ez egin soinurik edo dardararik pantaila osoko moduan."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Ez agerrarazi jakinarazpenik eta ez eten pantaila osoko modua aktibo dagoenean."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Agerrarazi beti jakinarazpenak. Ez eten pantaila osoko modua aktibo dagoenean."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Agerrarazi beti jakinarazpenak eta onartu etetea pantaila osoko modua aktibo dagoenean."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Ezarpen gehiago"</string>
<string name="notification_done" msgid="5279426047273930175">"Eginda"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioaren jakinarazpenak kontrolatzeko aukerak"</string>
@@ -654,4 +666,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Editatu ezarpenen ordena."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g> orria"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Zabaldu"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizatu"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Baztertu"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Berotzen ari da telefonoa"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Eginbide batzuk ezingo dira erabili telefonoa hoztu arte"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Telefonoa automatikoki saiatuko da hozten. Hoztu bitartean, telefonoa erabiltzen jarrai dezakezu, baina mantsoago funtziona lezake.\n\nTelefonoaren tenperatura jaitsi bezain laster, ohi bezala funtzionatzen jarraituko du."</string>
</resources>
diff --git a/packages/SystemUI/res/values-eu-rES/strings_car.xml b/packages/SystemUI/res/values-eu/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-eu-rES/strings_car.xml
rename to packages/SystemUI/res/values-eu/strings_car.xml
diff --git a/packages/SystemUI/res/values-eu-rES/strings_tv.xml b/packages/SystemUI/res/values-eu/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-eu-rES/strings_tv.xml
rename to packages/SystemUI/res/values-eu/strings_tv.xml
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index de596d2..1992dd6 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"در حال شارژ باتری، <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> درصد"</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"تنظیمات سیستم."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"اعلانها."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"محتوی سرریز اعلان"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"پاک کردن اعلان"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS فعال شد."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"دستیابی به GPS."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"قفل صفحه."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"تنظیمات"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"نمای کلی."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"بستن"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi خاموش شد."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"پاک کردن همه موارد"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"اکنون شروع شود"</string>
<string name="empty_shade_text" msgid="708135716272867002">"اعلانی موجود نیست"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"ممکن است دستگاه کنترل شود"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"شاید نمایه کنترل شود"</string>
<string name="vpn_footer" msgid="2388611096129106812">"ممکن است شبکه کنترل شود"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"ممکن است شبکه کنترل شود"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"کنترل دستگاه"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"کنترل نمایه"</string>
<string name="monitoring_title" msgid="169206259253048106">"کنترل شبکه"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"گزارشگیری شبکه"</string>
<string name="disable_vpn" msgid="4435534311510272506">"غیرفعال کردن VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"قطع اتصال VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"مدیریت دستگاه شما توسط <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nسرپرستتان میتواند تنظیمات، دسترسی شرکت، برنامهها دادههای مرتبط با دستگاهتان و اطلاعات مکان دستگاهتان را کنترل و مدیریت کند. برای دریافت اطلاعات بیشتر، با سرپرستتان تماس بگیرید."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> دستگاه شما را مدیریت میکند."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> با استفاده از <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> دستگاهتان را مدیریت میکند."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"سرپرست سیستم شما میتواند بر تنظیمات، دسترسی شرکتی، برنامهها، دادههای مرتبط با دستگاه و اطلاعات مکان دستگاهتان نظارت داشته باشد و آنها را مدیریت کند."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"بیشتر بدانید"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"به <xliff:g id="VPN_APP">%1$s</xliff:g> وصل شدهاید، که میتواند فعالیت شبکه شما را (ازجمله رایانامهها، برنامهها و وبسایتها) کنترل کند."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"باز کردن تنظیمات VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"سرپرست شما گزارشگیری شبکه را (که بر ترافیک دستگاهتان نظارت میکند) روشن کرده است.\n\nبرای اطلاعات بیشتر با سرپرست خود تماس بگیرید."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"شما به برنامهای برای تنظیم اتصال VPN اجازه دادید.\n\n این برنامه میتواند دستگاه و فعالیت شبکهتان را کنترل کند، از جمله رایانامه، برنامه و وبسایتها."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"دستگاهتان توسط <xliff:g id="ORGANIZATION">%1$s</xliff:g> مدیریت میشود.\n\nسرپرستتان میتواند تنظیمات، دسترسی شرکت، برنامهها، دادههای مرتبط با دستگاهتان و اطلاعات مکان دستگاهتان را کنترل و مدیریت کند.\n\nشما به یک VPN وصل هستید که میتواند فعالیت شبکه شما را کنترل کند، از جمله ایمیلها، برنامهها و وبسایتها.\n\nبرای دریافت اطلاعات بیشتر، با سرپرستتان تماس بگیرید."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"نمایه کاری شما توسط <xliff:g id="ORGANIZATION">%1$s</xliff:g> مدیریت میشود.\n\nسرپرستتان میتواند فعالیت شبکهتان از جمله رایانامه، برنامه و وبسایتها را کنترل کند.\n\nبرای دریافت اطلاعات بیشتر با سرپرستتان تماس بگیرید.\n\nهمچنین به یک VPN وصل هستید که میتواند فعالیت شبکه شما را کنترل کند."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"شما به <xliff:g id="APPLICATION">%1$s</xliff:g> وصل شدهاید، که میتواند فعالیت شبکه شما از جمله رایانامه، برنامه و وبسایتها را کنترل کند."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"به <xliff:g id="APPLICATION">%1$s</xliff:g> وصل شدهاید، که میتواند فعالیت شبکه شخصی شما را (ازجمله رایانامهها، برنامهها و وبسایتها) کنترل کند."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"نمایه کاریتان توسط <xliff:g id="ORGANIZATION">%1$s</xliff:g> مدیریت میشود. این به <xliff:g id="APPLICATION">%2$s</xliff:g> وصل است که فعالیت شبکه کاریتان از جمله رایانامه، برنامه و وبسایتها را کنترل میکند.\n\nبرای دریافت اطلاعات بیشتر، با سرپرستتان تماس بگیرید."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"نمایه کاری شما توسط <xliff:g id="ORGANIZATION">%1$s</xliff:g> مدیریت میشود. این به <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> متصل است که میتواند فعالیت شبکه کاریتان از جمله رایانامه، برنامه و وبسایتها را کنترل کند.\n\nشما همچنین به <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> متصل هستید که میتواند فعالیت شبکه شخصیتان را کنترل کند."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"دستگاهتان توسط <xliff:g id="ORGANIZATION">%1$s</xliff:g> مدیریت میشود.\n\nسرپرستتان میتواند تنظیمات، دسترسی شرکت، برنامهها، دادههای مرتبط با دستگاهتان و اطلاعات مکان دستگاهتان را کنترل و مدیریت کند.\n\nشما به <xliff:g id="APPLICATION">%2$s</xliff:g> وصل هستید که میتواند فعالیت شبکه شما را کنترل کند، از جمله رایانامه، برنامه و وبسایتها.\n\nبرای دریافت اطلاعات بیشتر، با سرپرستتان تماس بگیرید."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"دستگاه قفل باقی میماند تا زمانی که قفل آن را به صورت دستی باز کنید"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"دریافت سریعتر اعلانها"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"قبل از باز کردن قفل آنها را مشاهده کنید"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"بزرگ کردن"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"کوچک کردن"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"صفحه نمایش پین شد"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"تا زمانی که پین را بردارید، در نما نگهداشته میشود. برای برداشتن پین، «برگشت» را لمس کنید و نگهدارید."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"متوجه شدم"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"نه متشکرم"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> مخفی شود؟"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"دفعه بعد که آن را روشن کنید، در تنظیمات نشان داده میشود."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"پنهان کردن"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> میخواهد کنترلکننده صدا باشد."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"مجاز است"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"اجازه ندارد"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> کنترلکننده صدا است"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"برای بازیابی نسخه اصلی ضربه بزنید."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"درحال استفاده از نمایه کاریتان هستید"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"تماس"</item>
- <item msgid="5997713001067658559">"سیستم"</item>
- <item msgid="7858983209929864160">"تماس"</item>
- <item msgid="1850038478268896762">"رسانه"</item>
- <item msgid="8265110906352372092">"هشدار"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"بلوتوث"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"دسترسپذیری"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"تماس"</string>
+ <string name="stream_system" msgid="7493299064422163147">"سیستم"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"زنگ زدن"</string>
+ <string name="stream_music" msgid="9086982948697544342">"رسانه"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"زنگ ساعت"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"اعلان"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"بلوتوث"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"فرکانس دوتایی چند نوایی"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"دسترسپذیری"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. برای باصدا کردن ضربه بزنید."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. برای تنظیم روی لرزش ضربه بزنید. ممکن است سرویسهای دسترسپذیری بیصدا شوند."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. برای بیصدا کردن ضربه بزنید. ممکن است سرویسهای دسترسپذیری بیصدا شوند."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"تنظیمات سریع"</string>
<string name="status_bar" msgid="4877645476959324760">"نوار وضعیت"</string>
<string name="overview" msgid="4018602013895926956">"نمای کلی"</string>
- <string name="demo_mode" msgid="2389163018533514619">"حالت نمایشی"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"حالت نمایشی رابط کاربری سیستم"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"فعال کردن حالت نمایشی"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"نمایش حالت نمایشی"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"اترنت"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"روشن"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"خاموش"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"با کنترلهای قدرتمند اعلان میتوانید سطح اهمیت اعلانهای هر برنامه را از ۰ تا ۵ تعیین کنید. \n\n"<b>"سطح ۵"</b>" \n- در صدر فهرست اعلانها نشان داده میشود \n- وقفه برای نمایش تمامصفحه مجاز است \n- همیشه اجمالی نشان داده میشود \n\n"<b>"سطح ۴"</b>" \n- وقفه برای نمایش تمامصفحه مجاز نیست \n- همیشه اجمالی نشان داده میشود \n\n"<b>"سطح ۳"</b>" \n- وقفه برای نمایش تمامصفحه مجاز نیست \n- هیچوقت اجمالی نشان داده نمیشود \n\n"<b>"سطح ۲"</b>" \n- وقفه برای نمایش تمامصفحه مجاز نیست \n- هیچوقت اجمالی نشان داده نمیشود \n- هیچوقت صدا و لرزش ایجاد نمیکند \n\n"<b>"سطح ۱"</b>" \n- نمایش تمام صفحه مجاز نیست \n- هیچوقت اجمالی نشان داده نمیشود \n- هیچوقت صدا یا لرزش ایجاد نمیکند \n- در قفل صفحه و نوار وضعیت پنهان است \n- در پایین فهرست اعلانها نشان داده میشود \n\n"<b>"سطح ۰"</b>" \n- همه اعلانهای این برنامه مسدود است"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"اهمیت: خودکار"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"اهمیت: سطح ۰"</string>
- <string name="min_importance" msgid="560779348928574878">"اهمیت: سطح ۱"</string>
- <string name="low_importance" msgid="7571498511534140">"اهمیت: سطح ۲"</string>
- <string name="default_importance" msgid="7609889614553354702">"اهمیت: سطح ۳"</string>
- <string name="high_importance" msgid="3441537905162782568">"اهمیت: سطح ۴"</string>
- <string name="max_importance" msgid="4880179829869865275">"اهمیت: سطح ۵"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"برنامه اهمیت هر اعلان را تعیین میکند."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"اعلانهای این برنامه هرگز نشان داده نمیشود."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"بدون وقفه نمایش تمامصفحه، نمایش اجمالی، صدا یا لرزش. عدم نمایش در قفل صفحه و نوار وضعیت."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"بدون وقفه نمایش تمامصفحه، نمایش اجمالی، صدا یا لرزش."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"بدون وقفه نمایش تمامصفحه یا نمایش اجمالی."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"همیشه نمایش اجمالی. بدون وقفه نمایش تمامصفحه."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"همیشه نمایش اجمالی، و مجاز بودن وقفه برای نمایش تمامصفحه."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"تنظیمات بیشتر"</string>
<string name="notification_done" msgid="5279426047273930175">"تمام"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"کنترلهای اعلان <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"ویرایش ترتیب تنظیمات."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"صفحه <xliff:g id="ID_1">%1$d</xliff:g> از <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"بزرگ کردن"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"کوچک کردن"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"نپذیرفتن"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"تلفن درحال گرم شدن است"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"وقتی تلفن درحال خنک شدن است، بعضی از قابلیتها محدود میشوند"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"تلفنتان بهطور خودکار سعی میکند خنک شود. همچنان میتوانید از تلفنتان استفاده کنید، اما ممکن است کندتر عمل کند.\n\nوقتی تلفن خنک شد، عملکرد عادیاش از سرگرفته میشود."</string>
</resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 234a850..7176df4 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Akku latautuu: <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> prosenttia"</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Järjestelmän asetukset"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Ilmoitukset"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Ilmoitusten ylivuototila"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Tyhjennä ilmoitus"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS käytössä."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Haetaan GPS-signaalia."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Lukitse näyttö."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Asetukset"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Viimeisimmät."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Sulje"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi poistettiin käytöstä."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Poista kaikki"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Aloita nyt"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Ei ilmoituksia"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Laitetta voidaan valvoa"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profiilia saatetaan valvoa"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Verkkoa saatetaan valvoa"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Verkkoa saatetaan valvoa"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Laitteiden valvonta"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profiilin valvonta"</string>
<string name="monitoring_title" msgid="169206259253048106">"Verkon valvonta"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Lokitiedostojen tallennus"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Poista VPN käytöstä"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Katkaise VPN-yhteys"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Tätä laitetta hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJärjestelmänvalvoja voi tarkkailla ja hallinnoida asetuksiasi, yrityskäyttöä, sovelluksia, laitteeseesi yhdistettyjä tietoja sekä laitteesi sijaintitietoja. Saat lisätietoja järjestelmänvalvojalta."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Laitettasi hallinnoi <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> hallinnoi laitettasi sovelluksen <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> avulla."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Järjestelmänvalvoja voi valvoa ja hallinnoida asetuksia, yrityskäyttöä, sovelluksia, laitteen sijaintitietoja ja muita tietoja."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Lisätietoja"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Olet yhteydessä sovellukseen <xliff:g id="VPN_APP">%1$s</xliff:g>, joka voi valvoa verkkotoimintaasi, esimerkiksi sähköposteja, sovelluksia ja verkkosivustoja."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Avaa VPN-asetukset"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Järjestelmänvalvoja on ottanut käyttöön verkkolokitiedostojen tallentamisen. Sen avulla seurataan laitteellasi tapahtuvaa liikennettä.\n\nPyydä lisätietoja järjestelmänvalvojalta."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Olet myöntänyt sovellukselle oikeuden VPN-yhteyden muodostamiseen.\n\nSovellus voi valvoa laitettasi ja toimintaasi verkossa, esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Tätä laitetta hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJärjestelmänvalvoja voi tarkkailla ja hallinnoida asetuksiasi, yrityskäyttöä, sovelluksia, laitteeseesi yhdistettyjä tietoja sekä laitteesi sijaintitietoja.\n\nKäytät VPN-yhteyttä, joka voi valvoa toimiasi verkossa, esimerkiksi sähköpostin, sovellusten ja verkkosivustojen käyttöä.\n\nSaat lisätietoja järjestelmänvalvojalta."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Työprofiiliasi hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJärjestelmänvalvojasi voi valvoa toimintaasi verkossa. Hän voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja.\n\nLisätietoja saat järjestelmänvalvojaltasi.\n\nLisäksi olet muodostanut yhteyden VPN-palveluun, joka voi valvoa toimintaasi verkossa."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Olet muodostanut yhteyden sovellukseen <xliff:g id="APPLICATION">%1$s</xliff:g>, joka voi valvoa toimintaasi verkossa. Sovellus voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Olet muodostanut yhteyden sovellukseen <xliff:g id="APPLICATION">%1$s</xliff:g>, joka voi valvoa henkilökohtaista toimintaasi verkossa. Sovellus voi esimerkiksi seurata avaamiasi sähköposteja, sovelluksia ja verkkosivustoja."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Työprofiiliasi hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Se on yhteydessä sovellukseen <xliff:g id="APPLICATION">%2$s</xliff:g>, joka voi valvoa työhön liittyvää toimintaasi verkossa. Sovellus voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja.\n\nSaat lisätietoja järjestelmänvalvojaltasi."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Työprofiiliasi hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Se on yhteydessä sovellukseen <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, joka voi valvoa työhön liittyvää toimintaasi verkossa. Sovellus voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja.\n\nLisäksi olet yhteydessä sovellukseen <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, joka voi valvoa henkilökohtaista toimintaasi verkossa."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Laitettasi hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJärjestelmänvalvojasi voi valvoa ja hallinnoida laitteesi asetuksia, yrityskäyttöä, sovelluksia, laitteeseesi liittyviä tietoja ja laitteen sijaintitietoja.\n\nOlet yhteydessä sovellukseen <xliff:g id="APPLICATION">%2$s</xliff:g>, joka voi valvoa toimintaasi verkossa. Sovellus voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja.\n\nLisätietoja saat järjestelmänvalvojaltasi."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Laite pysyy lukittuna, kunnes se avataan käsin"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Näe ilmoitukset nopeammin"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Näytä ennen lukituksen avaamista"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Laajenna."</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Tiivistä."</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Näyttö on kiinnitetty"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Tämä pitää sen näkyvissä, kunnes peruutat kiinnityksen. Peruuta kiinnitys koskettamalla Edellinen-kohtaa pitkään."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Selvä"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Ei kiitos"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Piilotetaanko <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Se tulee takaisin näkyviin, kun seuraavan kerran otat sen käyttöön asetuksissa."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Piilota"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> haluaa olla äänenvoimakkuusvalinta."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Salli"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Estä"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> on äänenvoimakkuusvalinta."</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Palauta alkuperäinen napauttamalla."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Käytät työprofiilia."</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Soita"</item>
- <item msgid="5997713001067658559">"Järjestelmä"</item>
- <item msgid="7858983209929864160">"Soittoääni"</item>
- <item msgid="1850038478268896762">"Media"</item>
- <item msgid="8265110906352372092">"Herätys"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Esteettömyys"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Puhelu"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Järjestelmä"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Soittoääni"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Media"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Hälytys"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Ilmoitus"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Äänitaajuusvalinta"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Esteettömyys"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Poista mykistys koskettamalla."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Siirry värinätilaan koskettamalla. Myös esteettömyyspalvelut saattavat mykistyä."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Mykistä koskettamalla. Myös esteettömyyspalvelut saattavat mykistyä."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Pika-asetukset"</string>
<string name="status_bar" msgid="4877645476959324760">"Tilapalkki"</string>
<string name="overview" msgid="4018602013895926956">"Yleiskatsaus"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Esittelytila"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Käyttöliittymän esittelytila"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Ota esittelytila käyttöön"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Näytä esittelytila"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Käytössä"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Pois käytöstä"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Ilmoitusten tehohallinnan avulla voit määrittää sovelluksen ilmoituksille tärkeystason väliltä 0–5. \n\n"<b>"Taso 5"</b>" \n– Ilmoitukset näytetään ilmoitusluettelon yläosassa \n– Näkyminen koko näytön tilassa sallitaan \n– Ilmoitukset kurkistavat aina näytölle\n\n"<b>"Taso 4"</b>" \n– Näkyminen koko näytön tilassa estetään \n– Ilmoitukset kurkistavat aina näytölle \n\n"<b>"Taso 3"</b>" \n– Näkyminen koko näytön tilassa estetään \n– Ei kurkistamista \n\n"<b>"Taso 2"</b>" \n– Näkyminen koko näytön tilassa estetään \n– Ei kurkistamista \n– Ei ääniä eikä värinää \n\n"<b>"Taso 1"</b>" \n– Näkyminen koko näytön tilassa estetään \n– Ei kurkistamista \n– Ei ääniä eikä värinää \n– Ilmoitukset piilotetaan lukitusnäytöltä ja tilapalkista \n– Ilmoitukset näytetään ilmoitusluettelon alaosassa \n\n"<b>"Taso 0"</b>" \n– Kaikki sovelluksen ilmoitukset estetään"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Tärkeys: automaattinen"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Tärkeys: taso 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Tärkeys: taso 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Tärkeys: taso 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Tärkeys: taso 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Tärkeys: taso 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Tärkeys: taso 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Sovellus määrittää kunkin ilmoituksen tärkeyden"</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Älä koskaan näytä ilmoituksia tästä sovelluksesta"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Estä kurkistaminen, ääni, värinä ja näkyminen koko näytön tilassa, lukitusnäytöllä ja tilapalkissa"</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Ei kurkistamista, ääntä, värinää eikä näkymistä koko näytön tilassa"</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Ilmoitukset eivät saa kurkistaa näytölle tai näkyä koko näytön tilassa"</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Ilmoitukset saavat aina kurkistaa näytölle, mutteivät näkyä koko näytön tilassa"</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Ilmoitukset saavat aina kurkistaa näytölle ja näkyä koko näytön tilassa"</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Lisäasetukset"</string>
<string name="notification_done" msgid="5279426047273930175">"Valmis"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ilmoitusten hallinta"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Muokkaa asetusten järjestystä."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Sivu <xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Laajenna"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Pienennä"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Ohita"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Puhelin lämpenee"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Joidenkin ominaisuuksien käyttöä on rajoitettu puhelimen jäähtymisen aikana."</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Puhelimesi yrittää automaattisesti jäähdyttää itsensä. Voit silti käyttää puhelinta, mutta se voi toimia hitaammin.\n\nKun puhelin on jäähtynyt, se toimii normaalisti."</string>
</resources>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 11edeb9..3ec4ecc 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -165,6 +165,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Paramètres système"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Notifications"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Conteneur de dépassement des notifications"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Supprimer la notification"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS activé"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Acquisition de données GPS"</string>
@@ -186,6 +187,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Écran de verrouillage"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Paramètres"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Aperçu"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Fermer"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>"</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi désactivé"</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Tout effacer"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Commencer"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Aucune notification"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Il est possible que cet appareil soit surveillé."</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"le profil peut être contrôlé"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Le réseau peut être surveillé"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Le réseau peut être surveillé"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Surveillance d\'appareils"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Contrôle de profil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Surveillance réseau"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"RPV"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Journalisation réseau"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Désactiver le RPV"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Déconnecter le RPV"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Votre appareil est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler et gérer les paramètres, l\'accès aux contenus de l\'entreprise, les applications, les données associées à cet appareil et les données de localisation de celui-ci. Pour en savoir plus, communiquez avec votre administrateur."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Votre appareil est géré par <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> utilise <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> pour gérer votre appareil."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"L\'admin. de l\'entreprise peut surv. et gérer les param., l\'accès, les applis et les données de cet app., y compris sa localisation"</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"En savoir plus"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Vous êtes connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>, qui peut contrôler votre activité réseau, y compris les courriels, les applications et les sites Web."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Paramètres RPV ouverts"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Votre administrateur a activé la journalisation réseau, qui surveille le trafic sur votre appareil.\n\nPour en savoir plus, communiquez avec lui."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Vous avez autorisé une application à configurer une connexion RPV.\n\nCette application peut contrôler l\'activité de votre appareil et votre activité sur le réseau, y compris les courriels, les applications et les sites Web."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Votre appareil est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler et gérer les paramètres, l\'accès aux contenus de l\'entreprise, les applications, les données associées à cet appareil et les données de localisation de celui-ci.\n\nVous êtes connecté à un RPV qui peut contrôler votre activité sur le réseau (courriels, applications et sites Web).\n\nPour en savoir plus, communiquez avec votre administrateur."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler votre activité sur le réseau, y compris les courriels, les applications et les sites Web.\n\nPour en savoir plus, communiquez avec votre administrateur.\n\nVous êtes également connecté à un RPV qui peut contrôler votre activité sur le réseau."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"RPV"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité sur le réseau, y compris les courriels, les applications et les sites Web."</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité personnelle sur le réseau, y compris les courriels, les applications et les sites Web."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Il est connecté à <xliff:g id="APPLICATION">%2$s</xliff:g>. Cette application peut contrôler votre activité sur le réseau, y compris les courriels, les applications et les sites Web.\n\nPour en savoir plus, communiquez avec votre administrateur."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Il est connecté à <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>. Cette application peut contrôler votre activité sur le réseau, y compris les courriels, les applications et les sites Web.\n\nVous êtes également connecté à <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>. Cette application peut contrôler votre activité personnelle sur le réseau."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Votre appareil est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler et gérer les paramètres, l\'accès aux contenus de l\'entreprise, les applications, les données associées à cet appareil et ses données de localisation.\n\nVous êtes connecté à <xliff:g id="APPLICATION">%2$s</xliff:g>, qui peut contrôler votre activité réseau, y compris les courriels, les applications et les sites Web.\n\nPour en savoir plus, communiquez avec votre administrateur."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"L\'appareil restera verrouillé jusqu\'à ce que vous le déverrouilliez manuellement"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Voir les notifications plus rapidement"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Afficher les notifications avant de déverrouiller l\'appareil"</string>
@@ -432,31 +442,23 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Développer"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Réduire"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"L\'écran est épinglé"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Cet écran est épinglé jusqu\'à ce que vous annuliez l\'opération. Pour annuler l\'épinglage, maintenez le doigt sur « Retour »."</string>
+ <string name="screen_pinning_description" msgid="8909878447196419623">"Cet écran est épinglé jusqu\'à ce que vous annuliez l\'opération. Pour annuler l\'épinglage, maintenez le doigt sur « Retour » et « Aperçu »."</string>
+ <string name="screen_pinning_description_accessible" msgid="426190689254018656">"Cet écran est épinglé jusqu\'à ce que vous annuliez l\'opération. Pour annuler l\'épinglage, maintenez le doigt sur « Aperçu »."</string>
<string name="screen_pinning_positive" msgid="3783985798366751226">"OK"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Non, merci"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Masquer <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Cet élément réapparaîtra la prochaine fois que vous l\'activerez dans les paramètres."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Masquer"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> souhaite être la boîte de dialogue du volume."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Autoriser"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Refuser"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> correspond à la boîte de dialogue du volume"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Touchez pour restaurer l\'original."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Vous utilisez votre profil professionnel."</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Appeler"</item>
- <item msgid="5997713001067658559">"Système"</item>
- <item msgid="7858983209929864160">"Sonnerie"</item>
- <item msgid="1850038478268896762">"Multimédia"</item>
- <item msgid="8265110906352372092">"Alarme"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Accessibilité"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Appeler"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Système"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Sonnerie"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Multimédia"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarme"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Notification"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Fréquence double multi ton"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Accessibilité"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Touchez pour réactiver le son."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Touchez pour activer les vibrations. Il est possible de couper le son des services d\'accessibilité."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Touchez pour couper le son. Il est possible de couper le son des services d\'accessibilité."</string>
@@ -468,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Paramètres rapides"</string>
<string name="status_bar" msgid="4877645476959324760">"Barre d\'état"</string>
<string name="overview" msgid="4018602013895926956">"Aperçu"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Mode Démonstration"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Mode de démonstration de l\'interface système"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Activer le mode Démonstration"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Afficher le mode Démonstration"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -508,20 +510,17 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Activé"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Désactivé"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Avec les réglages avancés des notifications, vous pouvez définir un degré d\'importance de 0 à 5 pour les notifications d\'une application. \n\n"<b>"Niveau 5"</b>" \n- Afficher dans le haut de la liste des notifications \n- Autoriser les interruptions en mode plein écran \n- Toujours afficher les aperçus \n\n"<b>"Niveau 4"</b>" \n- Empêcher les interruptions en mode plein écran \n- Toujours afficher les aperçus \n\n"<b>"Niveau 3"</b>" \n- Empêcher les interruptions en mode plein écran \n- Ne jamais afficher les aperçus \n\n"<b>"Niveau 2"</b>" \n- Empêcher les interruptions en mode plein écran \n- Ne jamais afficher les aperçus \n- Ne pas autoriser les sons et les vibrations \n\n"<b>"Niveau 1"</b>" \n- Empêcher les interruptions en mode plein écran \n- Ne jamais afficher les aperçus \n- Ne pas autoriser les sons et les vibrations \n- Masquer de l\'écran de verrouillage et de la barre d\'état status bar \n- Afficher dans le bas de la liste des notifications \n\n"<b>"Level 0"</b>" \n- Bloquer toutes les notifications de l\'application"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Importance : automatique"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Importance : niveau 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Importance : niveau 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Importance : niveau 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Importance : niveau 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Importance : niveau 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Importance : niveau 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"L\'application détermine l\'importance de chaque notification."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Ne jamais afficher les notifications de cette application."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Pas d\'interruptions, d\'aperçus, de sons ou de vibrations en mode plein écran. Masquer de l\'écran de verrouillage et de la barre d\'état."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Pas d\'interruptions, d\'aperçus, de sons ou de vibrations en mode plein écran."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Pas d\'interruptions et d\'aperçus en mode plein écran."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Toujours afficher les aperçus, mais pas d\'interruptions en mode plein écran."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Toujours afficher les aperçus et autoriser les interruptions en mode plein écran."</string>
+ <string name="notification_header_default_channel" msgid="7506845022070889909">"Notifications"</string>
+ <string name="notification_channel_disabled" msgid="5805874247999578073">"Vous ne recevrez plus ces notifications."</string>
+ <string name="notification_importance_header_app" msgid="3572576545406258751">"<xliff:g id="APP">%s</xliff:g> notifications pour"</string>
+ <string name="min_importance" msgid="7559703098688382595">"Faible"</string>
+ <string name="low_importance" msgid="6891335321576225228">"Moyenne"</string>
+ <string name="default_importance" msgid="6400766013567512061">"Élevée"</string>
+ <string name="high_importance" msgid="730741630855788381">"Urgente"</string>
+ <string name="notification_importance_min" msgid="3237794091374404537">"Aucun son ni interruption visuelle"</string>
+ <string name="notification_importance_low" msgid="8929105501798019743">"Affichage silencieux"</string>
+ <string name="notification_importance_default" msgid="9025125660733917469">"Émettre un son"</string>
+ <string name="notification_importance_high" msgid="3316555356062640222">"Émettre un son et s\'afficher à l\'écran"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Plus de paramètres"</string>
<string name="notification_done" msgid="5279426047273930175">"Terminé"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Commandes de notification pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -654,4 +653,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Modifier l\'ordre des paramètres."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Page <xliff:g id="ID_1">%1$d</xliff:g> sur <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Développer"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Réduire"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Ignorer"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Le téléphone commence à chauffer"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Les fonctionnalités sont limitées pendant que le téléphone refroidit"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Votre téléphone va essayer de se refroidir automatiquement. Vous pouvez toujours l\'utiliser, mais il risque d\'être plus lent.\n\nUne fois refroidi, il fonctionnera normalement."</string>
</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index fa9494e..36db7dd 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -165,6 +165,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Paramètres système"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Notifications"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Conteneur de dépassement des notifications"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Supprimer la notification"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS activé"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Acquisition de données GPS"</string>
@@ -186,6 +187,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Écran de verrouillage"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Paramètres"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Aperçu"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Fermer"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>"</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi désactivé."</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Tout effacer"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Commencer"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Aucune notification"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Il est possible que cet appareil soit surveillé."</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Le profil peut être contrôlé."</string>
<string name="vpn_footer" msgid="2388611096129106812">"Il est possible que le réseau soit surveillé."</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Il est possible que le réseau soit surveillé."</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Contrôle des appareils"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Contrôle du profil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Contrôle du réseau"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Journalisation réseau"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Désactiver le VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Déconnecter le VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Votre appareil est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler et gérer les paramètres, l\'accès aux contenus de l\'entreprise, les applications, les données associées à cet appareil et les informations de localisation de celui-ci. Pour en savoir plus, contactez votre administrateur."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Votre appareil est géré par <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> utilise <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> pour gérer votre appareil."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Votre administrateur peut contrôler et gérer paramètres, accès aux contenus entreprise, applications, données et informations de localisation associées à cet appareil."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"En savoir plus"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Vous êtes connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>, qui peut contrôler votre activité sur le réseau, y compris les e-mails, les applications et les sites Web."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Ouvrir les paramètres VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Votre administrateur a activé la journalisation réseau, qui surveille le trafic sur votre appareil.\n\nPour en savoir plus, contactez-le."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Vous avez autorisé une application à configurer une connexion VPN.\n\nCette application peut contrôler l\'activité de votre appareil et votre activité sur le réseau, y compris votre activité relative aux e-mails, aux applications et aux sites Web."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Votre appareil géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler et gérer les paramètres, l\'accès aux contenus de l\'entreprise, les applications, les données associées à cet appareil et les informations de localisation de celui-ci.\n\nVous êtes connecté à un VPN qui peut contrôler votre activité sur le réseau (e-mails, applications et sites Web).\n\nPour en savoir plus, contactez votre administrateur."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler votre activité sur le réseau (e-mails, applications et sites Web).\n\nPour en savoir plus, contactez votre administrateur.\n\nVous êtes également connecté à un VPN qui peut contrôler votre activité sur le réseau."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité sur le réseau, y compris l\'activité relative aux e-mails, aux applications et aux sites Web."</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité personnelle sur le réseau, y compris les e-mails, les applications et les sites Web."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Il est connecté à <xliff:g id="APPLICATION">%2$s</xliff:g>. Cette application peut contrôler l\'activité de ce profil sur le réseau, y compris l\'activité relative aux e-mails, aux applications et aux sites Web.\n\nPour en savoir plus, contactez votre administrateur."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Il est connecté à <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>. Cette application peut contrôler l\'activité de ce profil sur le réseau, y compris l\'activité relative aux e-mails, aux applications et aux sites Web.\n\nVous êtes également connecté à <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>. Cette application peut surveiller votre activité personnelle sur le réseau."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Votre appareil géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler et gérer les paramètres, l\'accès aux contenus de l\'entreprise, les applications, les données associées à cet appareil et les informations de localisation de celui-ci.\n\nVous êtes connecté à <xliff:g id="APPLICATION">%2$s</xliff:g> qui peut contrôler votre activité sur le réseau (e-mails, applications et sites Web).\n\nPour en savoir plus, contactez votre administrateur."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"L\'appareil restera verrouillé jusqu\'à ce que vous le déverrouilliez manuellement."</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Recevoir les notifications plus vite"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Afficher les notifications avant de déverrouiller l\'appareil"</string>
@@ -432,31 +442,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Développer"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Réduire"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Écran épinglé"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Cet écran est épinglé jusqu\'à l\'annulation de l\'opération. Pour annuler l\'épinglage, appuyez de manière prolongée sur \"Retour\"."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"OK"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Non, merci"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Masquer <xliff:g id="TILE_LABEL">%1$s</xliff:g> ?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Cet élément réapparaîtra la prochaine fois que vous l\'activerez dans les paramètres."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Masquer"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> souhaite être la boîte de dialogue du volume."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Autoriser"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Refuser"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> correspond à la boîte de dialogue du volume"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Appuyez pour rétablir la version d\'origine."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Vous utilisez votre profil professionnel."</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Appeler"</item>
- <item msgid="5997713001067658559">"Système"</item>
- <item msgid="7858983209929864160">"Sonnerie"</item>
- <item msgid="1850038478268896762">"Multimédia"</item>
- <item msgid="8265110906352372092">"Alarme"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Accessibilité"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Appel"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Système"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Sonnerie"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Contenus multimédias"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarme"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Notification"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"DTMF"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Accessibilité"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Appuyez pour ne plus ignorer."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Appuyez pour mettre en mode vibreur. Vous pouvez ignorer les services d\'accessibilité."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Appuyez pour ignorer. Vous pouvez ignorer les services d\'accessibilité."</string>
@@ -468,7 +472,7 @@
<string name="quick_settings" msgid="10042998191725428">"Configuration rapide"</string>
<string name="status_bar" msgid="4877645476959324760">"Barre d\'état"</string>
<string name="overview" msgid="4018602013895926956">"Aperçu"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Mode de démonstration"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Mode de démonstration de l\'interface du système"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Activer le mode de démonstration"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Afficher le mode de démonstration"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -508,20 +512,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Activé"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Désactivé"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Grâce aux commandes de gestion des notifications, vous pouvez définir le niveau d\'importance (compris entre 0 et 5) des notifications d\'une application. \n\n"<b>"Niveau 5"</b>" \n- Afficher en haut de la liste des notifications \n- Autoriser l\'interruption en plein écran \n- Toujours en aperçu \n\n"<b>"Niveau 4"</b>" \n- Empêcher l\'interruption en plein écran \n- Toujours en aperçu \n\n"<b>"Niveau 3"</b>" \n- Empêcher l\'interruption en plein écran \n- Jamais en aperçu \n\n"<b>"Niveau 2"</b>" \n- Empêcher l\'interruption en plein écran \n- Jamais en aperçu \n- Ne jamais émettre de signal sonore ni déclencher le vibreur \n\n"<b>"Niveau 1"</b>" \n- Empêcher l\'interruption en plein écran \n- Jamais en aperçu \n- Ne jamais émettre de signal sonore ni déclencher le vibreur \n- Masquer les notifications dans l\'écran de verrouillage et la barre d\'état \n- Afficher au bas de la liste des notifications \n\n"<b>"Niveau 0"</b>" \n- Bloquer toutes les notifications de l\'application"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Importance : automatique"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Importance : niveau 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Importance : niveau 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Importance : niveau 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Importance : niveau 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Importance : niveau 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Importance : niveau 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"L\'application détermine l\'importance de chaque notification."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Ne jamais afficher les notifications de cette application."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Pas d\'interruption plein écran, ni aperçu, son, vibration. Masquer dans écran verr. et barre d\'état."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Pas d\'interruption en plein écran, d\'aperçu, de signal sonore ou de vibration."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Pas d\'interruption en plein écran ni d\'aperçu."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Toujours en aperçu. Pas d\'interruption en plein écran."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Toujours en aperçu et autoriser l\'interruption en plein écran."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Plus de paramètres"</string>
<string name="notification_done" msgid="5279426047273930175">"Terminé"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Commandes de notification de l\'application <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -654,4 +666,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Modifier l\'ordre des paramètres."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Page <xliff:g id="ID_1">%1$d</xliff:g> sur <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Développer"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Réduire"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Ignorer"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Le téléphone chauffe"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Fonctionnalités limitées pendant le refroidissement du téléphone"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Votre téléphone va essayer de se refroidir automatiquement. Vous pouvez toujours l\'utiliser, mais il risque d\'être plus lent.\n\nUne fois refroidi, il fonctionnera normalement."</string>
</resources>
diff --git a/packages/SystemUI/res/values-gl-rES-land/strings.xml b/packages/SystemUI/res/values-gl-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-gl-rES-land/strings.xml
rename to packages/SystemUI/res/values-gl-land/strings.xml
diff --git a/packages/SystemUI/res/values-gl-rGA-land/strings.xml b/packages/SystemUI/res/values-gl-rGA-land/strings.xml
deleted file mode 100644
index f0b7507..0000000
--- a/packages/SystemUI/res/values-gl-rGA-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"Agora a pantalla está bloqueada en orientación horizontal."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-gl-rES/config.xml b/packages/SystemUI/res/values-gl/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-gl-rES/config.xml
rename to packages/SystemUI/res/values-gl/config.xml
diff --git a/packages/SystemUI/res/values-gl-rES/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
similarity index 93%
rename from packages/SystemUI/res/values-gl-rES/strings.xml
rename to packages/SystemUI/res/values-gl/strings.xml
index 2f9b2e6..d7824e4 100644
--- a/packages/SystemUI/res/values-gl-rES/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -165,6 +165,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Configuración do sistema"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Notificacións"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Contedor de rebordamento de notificacións"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Eliminar notificación."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS activado"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Obtendo GPS."</string>
@@ -186,6 +187,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Pantalla de bloqueo."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Configuración"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Visión xeral."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Pechar"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi desactivada."</string>
@@ -352,7 +355,7 @@
<string name="speed_bump_explanation" msgid="1288875699658819755">"Notificacións menos urxentes abaixo"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Toca de novo para abrir"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Pasa o dedo cara arriba para desbloquear"</string>
- <string name="do_disclosure_generic" msgid="8498005633306135779">"Este dispositivo está xestionado"</string>
+ <string name="do_disclosure_generic" msgid="8498005633306135779">"Este é un dispositivo xestionado"</string>
<string name="do_disclosure_with_name" msgid="5640615509915445501">"Este dispositivo está xestionado por <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
<string name="phone_hint" msgid="4872890986869209950">"Pasa o dedo desde a icona para acceder ao teléfono"</string>
<string name="voice_hint" msgid="8939888732119726665">"Pasa o dedo desde a icona para acceder ao asistente de voz"</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Eliminar todas"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Iniciar agora"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Non hai notificacións"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"É posible que se supervise o dispositivo"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"O perfil pódese supervisar"</string>
<string name="vpn_footer" msgid="2388611096129106812">"É posible que se supervise a rede"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"É posible que se supervise a rede"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Supervisión de dispositivos"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Supervisión do perfil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Supervisión de rede"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Rexistro na rede"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Desactivar VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"O teu dispositivo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO teu administrador pode supervisar e xestionar a configuración, o acceso corporativo, as aplicacións, os datos asociados co teu dispositivo e a información de localización do teu dispositivo. Para obter máis información, ponte en contacto co teu administrador."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"O teu dispositivo está xestionado por <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> utiliza <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> para xestionar o teu dispositivo."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Para este dispositivo, o administrador pode controlar: configuración, acceso, aplicacións, datos e información de localización."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Máis información"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Estás conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode controlar a túa actividade na rede, mesmo os correos electrónicos, as aplicacións e os sitios web."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir configuración da VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"O administrador activou o rexistro na rede, que controla o tráfico do teu dispositivo.\n\nPara obter máis información, contacta co teu administrador."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Outorgaches permiso a unha aplicación para configurar unha conexión VPN.\n\nEsta aplicación pode supervisar a túa actividade na rede, incluídos os correos electrónicos, as aplicacións e os sitios web."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"O teu dispositivo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO teu administrador pode supervisar e xestionar a configuración, o acceso corporativo, as aplicacións, os datos asociados co teu dispositivo e a información de localización do teu dispositivo.\n\nEstás conectado a unha VPN, que pode supervisar a túa actividade de rede, incluídos os correos electrónicos, as aplicacións e os sitios web.\n\nPara obter máis información, ponte en contacto co teu administrador."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"O teu perfil de traballo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO teu administrador é capaz de supervisar a túa actividade na rede, incluídos os correos electrónicos, as aplicacións e os sitios web.\n\nPara obter máis información, ponte en contacto co teu administrador.\n\nTamén estás conectado a unha VPN, que pode supervisar a túa actividade na rede."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Estás conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode supervisar a túa actividade na rede, incluídos os correos electrónicos, as aplicacións e os sitios web."</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Estás conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode supervisar a túa actividade persoal na rede, incluídos os correos electrónicos, as aplicacións e os sitios web."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"O teu perfil de traballo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode supervisar a túa actividade na rede, incluídos os correos electrónicos, as aplicacións e os sitios web.\n\nPara obter máis información, ponte en contacto co teu administrador."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"O teu perfil de traballo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Está conectado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pode supervisar a túa actividade na rede, incluídos os correos electrónicos, as aplicacións e os sitios web.\n\nTamén estás conectado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pode supervisar a túa actividade persoal na rede."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"O dispositivo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO teu administrador pode supervisar e xestionar a configuración, o acceso corporativo, as aplicacións, os datos asociados co dispositivo e a información de localización do dispositivo.\n\nEstás conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode supervisar a túa actividade na rede: os correos electrónicos, as aplicacións e os sitios web.\n\nPara obter máis información, contacta co teu administrador."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"O dispositivo permanecerá bloqueado ata que o desbloquees manualmente"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Recibir notificacións máis rápido"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Consúltaas antes de desbloquear"</string>
@@ -432,31 +442,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Ampliar"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Contraer"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"A pantalla está fixada"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"A pantalla manterase visible ata que a soltes. Para facelo, mantén premido Atrás."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"De acordo"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Non, grazas"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Queres ocultar <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Volverá aparecer a próxima vez que se active na configuración."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ocultar"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> quere ser o cadro de diálogo de volume."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Permitir"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Denegar"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> é o cadro de diálogo de volume"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Toca para restaurar o orixinal."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Estás usando o perfil de traballo"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Chamar"</item>
- <item msgid="5997713001067658559">"Sistema"</item>
- <item msgid="7858983209929864160">"Facer soar"</item>
- <item msgid="1850038478268896762">"Multimedia"</item>
- <item msgid="8265110906352372092">"Alarma"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Accesibilidade"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Chamada"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistema"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Ton"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Multimedia"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarma"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Notificación"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Multifrecuencia de dobre ton"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Accesibilidade"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Toca para activar o son."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Toca para establecer a vibración. Pódense silenciar os servizos de accesibilidade."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Toca para silenciar. Pódense silenciar os servizos de accesibilidade."</string>
@@ -468,7 +472,7 @@
<string name="quick_settings" msgid="10042998191725428">"Configuración rápida"</string>
<string name="status_bar" msgid="4877645476959324760">"Barra de estado"</string>
<string name="overview" msgid="4018602013895926956">"Visión xeral"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Modo de demostración"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Modo de demostración da IU do sistema"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Activar modo de demostración"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Mostrar modo de demostración"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -508,20 +512,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Activar"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Desactivar"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Cos controis de notificacións mellorados, podes asignarlles un nivel de importancia comprendido entre 0 e 5 ás notificacións dunha aplicación determinada. \n\n"<b>"Nivel 5"</b>" \n- Mostrar na parte superior da lista de notificacións. \n- Permitir interrupcións no modo de pantalla completa. \n- Mostrar sempre. \n\n"<b>"Nivel 4"</b>" \n- Impedir interrupcións no modo de pantalla completa. \n- Mostrar sempre. \n\n"<b>"Nivel 3"</b>" \n- Impedir interrupcións no modo de pantalla completa. \n- Non mostrar nunca. \n\n"<b>"Nivel 2"</b>" \n- Impedir interrupcións no modo de pantalla completa. \n- Non mostrar nunca. \n- Non soar nin vibrar nunca. \n\n"<b>"Nivel 1"</b>" \n- Impedir interrupcións no modo de pantalla completa. \n- Non mostrar nunca. \n- Non soar nin vibrar nunca. \n- Ocultar na pantalla de bloqueo e na barra de estado. \n- Mostrar na parte inferior da lista de notificacións. \n\n"<b>"Nivel 0"</b>" \n- Bloquear todas as notificacións da aplicación."</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Importancia: automática"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Importancia: nivel 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Importancia: nivel 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Importancia: nivel 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Importancia: nivel 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Importancia: nivel 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Importancia: nivel 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"A aplicación determina a importancia de cada notificación."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Non mostrar nunca as notificacións desta aplicación."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Sen notif. e sen son, vibrac. ou inter. en pant. completa. Ocultar na pant. bloqueo e barra estado."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Sen mostrar notificacións e sen son, vibración ou interrupcións no modo de pantalla completa."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Sen mostrar notificacións e sen interrupcións no modo de pantalla completa."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Mostrar notificacións sempre. Sen interrupcións no modo de pantalla completa."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Mostrar notificacións sempre e permitir interrupcións no modo de pantalla completa."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Máis opcións"</string>
<string name="notification_done" msgid="5279426047273930175">"Feito"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Controis de notificacións de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -654,4 +666,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Editar a orde das opcións de configuración."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Páxina <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Despregar"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizar"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Ignorar"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"O teléfono está quentando"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"O uso dalgunhas funcións é limitado mentres o teléfono arrefría"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"O teléfono tentará arrefriar automaticamente. Podes utilizalo, pero é probable que funcione máis lento.\n\nUnha vez que arrefríe, funcionará con normalidade."</string>
</resources>
diff --git a/packages/SystemUI/res/values-gl-rES/strings_car.xml b/packages/SystemUI/res/values-gl/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-gl-rES/strings_car.xml
rename to packages/SystemUI/res/values-gl/strings_car.xml
diff --git a/packages/SystemUI/res/values-gl-rES/strings_tv.xml b/packages/SystemUI/res/values-gl/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-gl-rES/strings_tv.xml
rename to packages/SystemUI/res/values-gl/strings_tv.xml
diff --git a/packages/SystemUI/res/values-gu-rIN-land/strings.xml b/packages/SystemUI/res/values-gu-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-gu-rIN-land/strings.xml
rename to packages/SystemUI/res/values-gu-land/strings.xml
diff --git a/packages/SystemUI/res/values-gu-rIN/config.xml b/packages/SystemUI/res/values-gu/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-gu-rIN/config.xml
rename to packages/SystemUI/res/values-gu/config.xml
diff --git a/packages/SystemUI/res/values-gu-rIN/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
similarity index 92%
rename from packages/SystemUI/res/values-gu-rIN/strings.xml
rename to packages/SystemUI/res/values-gu/strings.xml
index 3649e85..e86f759 100644
--- a/packages/SystemUI/res/values-gu-rIN/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"બૅટરી ચાર્જ થઈ રહી છે, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> ટકા."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"સિસ્ટમ સેટિંગ્સ."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"સૂચનાઓ."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"સૂચના ઓવરફ્લો કંટેનર"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"સૂચના સાફ કરો."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS સક્ષમ."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS મેળવી રહ્યું છે."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"લૉક સ્ક્રીન."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"સેટિંગ્સ"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"વિહંગાવલોકન."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"બંધ કરો"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi બંધ કર્યું."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"બધુ સાફ કરો"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"હવે પ્રારંભ કરો"</string>
<string name="empty_shade_text" msgid="708135716272867002">"કોઈ સૂચનાઓ નથી"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"ઉપકરણ મૉનિટર કરી શકાય છે"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"પ્રોફાઇલ મૉનિટર કરી શકાય છે"</string>
<string name="vpn_footer" msgid="2388611096129106812">"નેટવર્ક મૉનિટર કરી શકાય છે"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"નેટવર્ક મૉનિટર કરવામાં આવી શકે છે"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"ઉપકરણ નિરીક્ષણ"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"પ્રોફાઇલ નિરીક્ષણ"</string>
<string name="monitoring_title" msgid="169206259253048106">"નેટવર્ક મૉનિટરિંગ"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"નેટવર્ક લૉગિંગ"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN અક્ષમ કરો"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN ડિસ્કનેક્ટ કરો"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"તમારું ઉપકરણ <xliff:g id="ORGANIZATION">%1$s</xliff:g> દ્વારા સંચાલિત થાય છે.\n\nતમારા વ્યવસ્થાપક સેટિંગ્સ, કોર્પોરેટ ઍક્સેસ, ઍપ્લિકેશનો, તમારા ઉપકરણ સાથે સંકળાયેલ ડેટા અને તમારા ઉપકરણની સ્થાન માહિતી મોનિટર અને સંચાલિત કરી શકે છે. વધુ માહિતી માટે, તમારા વ્યવસ્થાપકનો સંપર્ક કરો."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"તમારું ઉપકરણ <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> દ્વારા સંચાલિત થાય છે."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>, તમારા ઉપકરણનું સંચાલન કરવા માટે <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> નો ઉપયોગ કરે છે."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"તમારા વ્યવસ્થાપક સેટિંગ્સ, કૉર્પોરેટ ઍક્સેસ, ઍપ્સ, તમારા ઉપકરણ સાથે સંકળાયેલ ડેટા અને તમારા ઉપકરણની સ્થાન માહિતીને મૉનિટર અને સંચાલિત કરી શકે છે."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"વધુ જાણો"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"તમે <xliff:g id="VPN_APP">%1$s</xliff:g> સાથે કનેક્ટ થયાં છો, જે ઇમેઇલ્સ, ઍપ્લિકેશનો અને વેબસાઇટ્સ સહિત તમારી નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN સેટિંગ્સ ખોલો"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"તમારા વ્યવસ્થાપકે નેટવર્ક લૉગિંગ ચાલુ કરેલ છે, જે તમારા ઉપકરણ પર ટ્રાફિકને મૉનિટર કરે છે.\n\nવધુ માહિતી માટે, તમારા વ્યવસ્થાપકનો સંપર્ક કરો."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"તમે VPN કનેક્શન સેટ કરવા માટે ઍપ્લિકેશન પરવાનગી આપી.\n\nઆ ઍપ્લિકેશન ઇમેઇલ્સ, ઍપ્લિકેશનો અને વેબસાઇટ્સ સહિત તમારા ઉપકરણ અને નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"તમારું ઉપકરણ <xliff:g id="ORGANIZATION">%1$s</xliff:g> દ્વારા સંચાલિત થાય છે.\n\nતમારા વ્યવસ્થાપક સેટિંગ્સ, કોર્પોરેટ ઍક્સેસ, ઍપ્લિકેશનો, તમારા ઉપકરણ સાથે સંકળાયેલ ડેટા અને તમારા ઉપકરણની સ્થાન માહિતી મોનિટર અને સંચાલિત કરી શકે છે.\n\nતમે VPN સાથે કનેક્ટ થયેલા છો જે ઇમેઇલ્સ, ઍપ્લિકેશનો અને વેબસાઇટ્સ સહિતની, તમારી નેટવર્ક પ્રવૃત્તિ મોનિટર કરી શકે છે.\n\nવધુ માહિતી માટે, તમારા વ્યવસ્થાપકનો સંપર્ક કરો."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"તમારી કાર્ય પ્રોફાઇલ <xliff:g id="ORGANIZATION">%1$s</xliff:g> દ્વારા સંચાલિત થાય છે.\n\nતમારા વ્યવસ્થાપક ઇમેઇલ્સ, ઍપ્લિકેશનો અને વેબસાઇટ્સ સહિતની તમારી નેટવર્ક પ્રવૃત્તિને મૉનિટર કરવામાં સમર્થ છે.\n\nવધુ માહિતી માટે, તમારા વ્યવસ્થાપકનો સંપર્ક કરો.\n\nતમે VPN સાથે પણ કનેક્ટ છો, જે તમારી નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"તમે <xliff:g id="APPLICATION">%1$s</xliff:g> સાથે કનેક્ટ થયાં છો, જે ઇમેઇલ્સ, ઍપ્લિકેશનો અને વેબસાઇટ્સ સહિતની તમારી નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"તમે <xliff:g id="APPLICATION">%1$s</xliff:g> સાથે કનેક્ટ થયાં છો, જે ઇમેઇલ્સ, ઍપ્લિકેશનો અને વેબસાઇટ્સ સહિત તમારી વ્યક્તિગત નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"તમારી કાર્ય પ્રોફાઇલ <xliff:g id="ORGANIZATION">%1$s</xliff:g> દ્વારા સંચાલિત થાય છે. તે <xliff:g id="APPLICATION">%2$s</xliff:g> સાથે કનેક્ટ થયેલ છે, જે ઇમેઇલ્સ, ઍપ્લિકેશનો અને વેબસાઇટ્સ સહિતની તમારી કાર્ય નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે.\n\nવધુ માહિતી માટે, તમારા વ્યવસ્થાપકનો સંપર્ક કરો."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"તમારી કાર્ય પ્રોફાઇલ <xliff:g id="ORGANIZATION">%1$s</xliff:g> દ્વારા સંચાલિત થાય છે. તે <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> સાથે કનેક્ટ થયેલ છે, જે ઇમેઇલ્સ, ઍપ્લિકેશનો અને વેબસાઇટ્સ સહિતની તમારી કાર્ય નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે.\n\nતમે <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> સાથે પણ કનેક્ટ થયેલ છો, જે તમારી વ્યક્તિગત નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"તમારું ઉપકરણ <xliff:g id="ORGANIZATION">%1$s</xliff:g> દ્વારા સંચાલિત થાય છે.\n\nતમારા વ્યવસ્થાપક, સેટિંગ્સ, કોર્પોરેટ ઍક્સેસ, ઍપ્લિકેશનો, તમારા ઉપકરણ સાથે સંકળાયેલ ડેટા અને તમારા ઉપકરણની સ્થાન માહિતીને મૉનિટર કરી અને સંચાલિત કરી શકે છે.\n\nતમે <xliff:g id="APPLICATION">%2$s</xliff:g> સાથે કનેક્ટ થયાં છો, જે ઇમેઇલ્સ, ઍપ્લિકેશનો અને વેબસાઇટ્સ સહિતની તમારી નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે.\n\nવધુ માહિતી માટે, તમારા વ્યવસ્થાપકનો સંપર્ક કરો."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"તમે ઉપકરણને મેન્યુઅલી અનલૉક કરશો નહીં ત્યાં સુધી તે લૉક રહેશે"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"વધુ ઝડપથી સૂચનાઓ મેળવો"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"તમે અનલૉક કરો તે પહેલાં તેમને જુઓ"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"વિસ્તૃત કરો"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"સંકુચિત કરો"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"સ્ક્રીન પિન કરેલ છે"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"તમે જ્યાં સુધી અનપિન કરશો નહીં ત્યાં સુધી આ તેને દૃશ્યક્ષમ રાખે છે. અનપિન કરવા માટે પાછળને ટચ કરો અને પકડી રાખો."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"સમજાઈ ગયું"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"નહીં આભાર"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> ને છુપાવીએ?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"તે સેટિંગ્સમાં તમે તેને ચાલુ કરશો ત્યારે આગલી વખતે ફરીથી દેખાશે."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"છુપાવો"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> વૉલ્યૂમ સંવાદ બનવા માગે છે."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"મંજૂરી આપો"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"નકારો"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> એ વૉલ્યૂમ સંવાદ છે"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"મૂળને પુનઃસ્થાપિત કરવા માટે ટૅપ કરો."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"તમે તમારી કાર્ય પ્રોફાઇલનો ઉપયોગ કરી રહ્યાં છો"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"કૉલ કરો"</item>
- <item msgid="5997713001067658559">"સિસ્ટમ"</item>
- <item msgid="7858983209929864160">"રિંગ કરો"</item>
- <item msgid="1850038478268896762">"મીડિયા"</item>
- <item msgid="8265110906352372092">"એલાર્મ"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"ઍક્સેસિબિલિટી"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"કૉલ કરો"</string>
+ <string name="stream_system" msgid="7493299064422163147">"સિસ્ટમ"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"રિંગ કરો"</string>
+ <string name="stream_music" msgid="9086982948697544342">"મીડિયા"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"એલાર્મ"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"સૂચના"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"દ્વિ બહુ ટોન આવર્તન"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"ઍક્સેસિબિલિટી"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. અનમ્યૂટ કરવા માટે ટૅપ કરો."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. વાઇબ્રેટ પર સેટ કરવા માટે ટૅપ કરો. ઍક્સેસિબિલિટી સેવાઓ મ્યૂટ કરવામાં આવી શકે છે."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. મ્યૂટ કરવા માટે ટૅપ કરો. ઍક્સેસિબિલિટી સેવાઓ મ્યૂટ કરવામાં આવી શકે છે."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"ઝડપી સેટિંગ્સ"</string>
<string name="status_bar" msgid="4877645476959324760">"સ્થિતિ બાર"</string>
<string name="overview" msgid="4018602013895926956">"વિહંગાવલોકન"</string>
- <string name="demo_mode" msgid="2389163018533514619">"ડેમો મોડ"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"સિસ્ટમ UI ડેમો મોડ"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"ડેમો મોડ સક્ષમ કરો"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"ડેમો મોડ બતાવો"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"ઇથરનેટ"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"ચાલુ"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"બંધ"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"પાવર સૂચના નિયંત્રણો સાથે, તમે ઍપ્લિકેશનની સૂચનાઓ માટે 0 થી 5 સુધીના મહત્વના સ્તરને સેટ કરી શકો છો. \n\n"<b>"સ્તર 5"</b>" \n- સૂચના સૂચિની ટોચ પર બતાવો \n- પૂર્ણ સ્ક્રીન અવરોધની મંજૂરી આપો \n- હંમેશાં ત્વરિત દૃષ્ટિ કરો \n\n"<b>"સ્તર 4"</b>" \n- પૂર્ણ સ્ક્રીન અવરોધ અટકાવો \n- હંમેશાં ત્વરિત દૃષ્ટિ કરો \n\n"<b>"સ્તર 3"</b>" \n- પૂર્ણ સ્ક્રીન અવરોધ અટકાવો \n- ક્યારેય ત્વરિત દૃષ્ટિ કરશો નહીં \n\n"<b>"સ્તર 2"</b>" \n- પૂર્ણ સ્ક્રીન અવરોધ અટકાવો \n- ક્યારેય ત્વરિત દૃષ્ટિ કરશો નહીં \n- ક્યારેય અવાજ અને વાઇબ્રેશન કરશો નહીં \n\n"<b>"સ્તર 1"</b>" \n- પૂર્ણ સ્ક્રીન અવરોધ અટકાવો \n- ક્યારેય ત્વરિત દૃષ્ટિ કરશો નહીં \n- ક્યારેય અવાજ અથવા વાઇબ્રેટ કરશો નહીં \n- લૉક સ્ક્રીન અને સ્થિતિ બારથી છુપાવો \n- સૂચના સૂચિના તળિયા પર બતાવો \n\n"<b>"સ્તર 0"</b>" \n- ઍપ્લિકેશનની તમામ સૂચનાઓને અવરોધિત કરો"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"મહત્વ: સ્વચલિત"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"મહત્વ: સ્તર 0"</string>
- <string name="min_importance" msgid="560779348928574878">"મહત્વ: સ્તર 1"</string>
- <string name="low_importance" msgid="7571498511534140">"મહત્વ: સ્તર 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"મહત્વ: સ્તર 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"મહત્વ: સ્તર 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"મહત્વ: સ્તર 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"દરેક સૂચના માટે મહત્વને ઍપ્લિકેશન નિર્ધારિત કરે છે."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"આ ઍપ્લિકેશનમાંથી ક્યારેય સૂચનાઓ બતાવશો નહીં."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"કોઈ પૂર્ણ સ્ક્રીન અવરોધ, ત્વરિત દૃષ્ટિ, અવાજ અથવા વાઇબ્રેશન નહીં. લૉક સ્ક્રીન અને સ્થિતિ બારથી છુપાવો."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"કોઈ પૂર્ણ સ્ક્રીન અવરોધ, ત્વરિત દૃષ્ટિ, અવાજ અથવા વાઇબ્રેશન નહીં."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"કોઈ પૂર્ણ સ્ક્રીન અવરોધ અથવા ત્વરિત દૃષ્ટિ નહીં."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"હંમેશાં ત્વરિત દૃષ્ટિ કરો. કોઈ પૂર્ણ સ્ક્રીન અવરોધ નહીં."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"હંમેશાં ત્વરિત દૃષ્ટિ કરો અને પૂર્ણ સ્ક્રીન અવરોધને મંજૂરી આપો."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"વધુ સેટિંગ્સ"</string>
<string name="notification_done" msgid="5279426047273930175">"થઈ ગયું"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> સૂચના નિયંત્રણો"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"સેટિંગ્સનો ક્રમ સંપાદિત કરો."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_2">%2$d</xliff:g> માંથી <xliff:g id="ID_1">%1$d</xliff:g> પૃષ્ઠ"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"વિસ્તૃત કરો"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"નાનું કરો"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"છોડી દો"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"ફોન ગરમ થઈ રહ્યો છે"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"ફોન ઠંડો થાય ત્યાં સુધી કેટલીક સુવિધાઓ મર્યાદિત હોય છે"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"તમારો ફોન આપમેળે ઠંડો થવાનો પ્રયાસ કરશે. તમે હજી પણ તમારા ફોનનો ઉપયોગ કરી શકો છો, પરંતુ તે કદાચ થોડો ધીમો ચાલે.\n\nતમારો ફોન ઠંડો થઈ જવા પર, તે સામાન્ય રીતે ચાલશે."</string>
</resources>
diff --git a/packages/SystemUI/res/values-gu-rIN/strings_car.xml b/packages/SystemUI/res/values-gu/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-gu-rIN/strings_car.xml
rename to packages/SystemUI/res/values-gu/strings_car.xml
diff --git a/packages/SystemUI/res/values-gu-rIN/strings_tv.xml b/packages/SystemUI/res/values-gu/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-gu-rIN/strings_tv.xml
rename to packages/SystemUI/res/values-gu/strings_tv.xml
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 7fd5eb6..13dac84 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"बैटरी चार्ज हो रही है, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> प्रतिशत."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"सिस्टम सेटिंग."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"सूचनाएं."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"नोटिफ़िकेशन ओवरफ़्लो कंटेनर"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"नोटिफिकेशन साफ़ करें"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS सक्षम."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS प्राप्त करना."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"लॉक स्क्रीन."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"सेटिंग"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"अवलोकन."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"बंद करें"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"वाई-फ़ाई को बंद किया गया."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"सभी साफ करें"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"अब प्रारंभ करें"</string>
<string name="empty_shade_text" msgid="708135716272867002">"कोई नोटिफिकेशन नहीं"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"डिवाइस को मॉनीटर किया जा सकता है"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"प्रोफ़ाइल को मॉनीटर किया जा सकता है"</string>
<string name="vpn_footer" msgid="2388611096129106812">"नेटवर्क को मॉनीटर किया जा सकता है"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"नेटवर्क को मॉनिटर किया जा सकता है"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"डिवाइस को मॉनीटर करना"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"प्रोफ़ाइल को मॉनीटर करना"</string>
<string name="monitoring_title" msgid="169206259253048106">"नेटवर्क को मॉनीटर करना"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"नेटवर्क लॉगिंग"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN अक्षम करें"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN डिस्कनेक्ट करें"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"आपका डिवाइस <xliff:g id="ORGANIZATION">%1$s</xliff:g> के द्वारा प्रबंधित है.\n\nआपका नियंत्रक सेटिंग, कॉर्पोरेट ऐक्सेस, ऐप्स, आपके डिवाइस से संबद्ध डेटा और आपके डिवाइस की स्थान जानकारी की निगरानी और उसका प्रबंधन कर सकता है. अधिक जानकारी के लिए, अपने नियंत्रक से संपर्क करें."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> आपका डिवाइस प्रबंधित करता है."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> आपका डिवाइस प्रबंधित करने के लिए <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> का उपयोग करता है."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"व्यवस्थापक डिवाइस से संबद्ध सेटिंग, कॉर्पोरेट एक्सेस, ऐप्लिकेशन, डेटा और डिवाइस की स्थान जानकारी को मॉनिटर और प्रबंधित कर सकता है."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"अधिक जानें"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"आप <xliff:g id="VPN_APP">%1$s</xliff:g> से कनेक्ट हैं, जो ईमेल, ऐप्लिकेशन और वेबसाइट सहित आपकी नेटवर्क गतिविधि को मॉनिटर कर सकता है."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN सेटिंग खोलें"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"आपके व्यवस्थापक ने नेटवर्क लॉगिंग को चालू कर दिया है, जो आपके डिवाइस पर ट्रैफ़िक को मॉनीटर करती है.\n\nअधिक जानकारी के लिए अपने व्यवस्थापक से संपर्क करें."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"आपने किसी ऐप को VPN कनेक्शन सेट करने की अनुमति दी है.\n\nयह ऐप ईमेल, ऐप्स और सुरक्षित वेबसाइटों सहित आपके डिवाइस और नेटवर्क की गतिविधि की निगरानी कर सकता है."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"आपका डिवाइस <xliff:g id="ORGANIZATION">%1$s</xliff:g> के द्वारा प्रबंधित है.\n\nआपका नियंत्रक सेटिंग, कॉर्पोरेट ऐक्सेस, ऐप्स, आपके डिवाइस से संबद्ध डेटा और आपके डिवाइस की स्थान जानकारी की निगरानी और उसका प्रबंधन कर सकता है.\n\nआप एक VPN से कनेक्ट हैं, जो ईमेल, ऐप्स और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकता है.\n\nअधिक जानकारी के लिए, अपने नियंत्रक से संपर्क करें."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"आपकी कार्य प्रोफ़ाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> के द्वारा प्रबंधित है.\n\nआपका नियंत्रक ईमेल, ऐप्स और सुरक्षित वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी करने में सक्षम है.\n\nअधिक जानकारी के लिए, अपने नियंत्रक से संपर्क करें.\n\nआप एक ऐसे VPN से भी कनेक्ट हैं, जो आपकी नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"आप <xliff:g id="APPLICATION">%1$s</xliff:g> से कनेक्ट हैं, जो ईमेल, ऐप्स और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"आप <xliff:g id="APPLICATION">%1$s</xliff:g> से कनेक्ट हैं, जो ईमेल, ऐप्लिकेशन और वेबसाइट सहित आपकी व्यक्तिगत नेटवर्क गतिविधि को मॉनिटर कर सकता है."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"आपकी कार्य प्रोफ़ाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> के द्वारा प्रबंधित है. वह <xliff:g id="APPLICATION">%2$s</xliff:g> से कनेक्ट है, जो ईमेल, ऐप्स और वेबसाइटों सहित आपकी कार्य नेटवर्क गतिविधि की निगरानी कर सकता है.\n\nअधिक जानकारी के लिए, अपने नियंत्रक से संपर्क करें."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"आपकी कार्य प्रोफ़ाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> के द्वारा प्रबंधित है. वह <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> से कनेक्ट है, जो ईमेल, ऐप्स और वेबसाइटों सहित आपकी कार्य नेटवर्क गतिविधि की निगरानी कर सकता है.\n\nआप <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> से भी कनेक्ट हैं, जो आपकी व्यक्तिगत नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"आपका डिवाइस <xliff:g id="ORGANIZATION">%1$s</xliff:g> के द्वारा प्रबंधित है.\n\nआपका नियंत्रक सेटिंग, कॉर्पोरेट ऐक्सेस, ऐप्स, आपके डिवाइस से संबद्ध डेटा और आपके डिवाइस की स्थान जानकारी की निगरानी और उसका प्रबंधन कर सकता है.\n\nआप <xliff:g id="APPLICATION">%2$s</xliff:g> से कनेक्ट हैं, जो ईमेल, ऐप्स और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकता है.\n\nअधिक जानकारी के लिए, अपने नियंत्रक से संपर्क करें."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"जब तक कि आप मैन्युअल रूप से अनलॉक नहीं करते तब तक डिवाइस लॉक रहेगा"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"सूचनाएं अधिक तेज़ी से प्राप्त करें"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"आपके द्वारा उन्हें अनलॉक किए जाने से पहले देखें"</string>
@@ -430,31 +440,23 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"विस्तृत करें"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"संक्षिप्त करें"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"स्क्रीन पिन कर दी गई है"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"इससे वह तब तक दृश्य में बना रहता है जब तक कि आप उसे अनपिन नहीं कर देते. अनपिन करने के लिए वापस जाएं को स्पर्श करके रखें."</string>
+ <string name="screen_pinning_description" msgid="8909878447196419623">"इससे वह तब तक दृश्य में बना रहता है जब तक कि आप उसे अनपिन नहीं कर देते. अनपिन करने के लिए, वापस जाएं और अवलोकन को स्पर्श करके रखें."</string>
+ <string name="screen_pinning_description_accessible" msgid="426190689254018656">"इससे वह तब तक दृश्य में बना रहता है जब तक कि आप उसे अनपिन नहीं कर देते. अनपिन करने के लिए, अवलोकन को स्पर्श करके रखें."</string>
<string name="screen_pinning_positive" msgid="3783985798366751226">"समझ लिया"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"नहीं, रहने दें"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> को छिपाएं?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"जब आप उसे अगली बार सेटिंग में चालू करेंगे तो वह फिर से दिखाई देगी."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"छिपाएं"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> वॉल्यूम संवाद होना चाहता है."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"अनुमति दें"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"अस्वीकार करें"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> वॉल्यूम संवाद है"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"मूल को पुन: स्थापित करने के लिए टैप करें."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"आप अपनी कार्य प्रोफ़ाइल का उपयोग कर रहे हैं"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"कॉल करें"</item>
- <item msgid="5997713001067658559">"सिस्टम"</item>
- <item msgid="7858983209929864160">"रिंग करें"</item>
- <item msgid="1850038478268896762">"मीडिया"</item>
- <item msgid="8265110906352372092">"अलार्म"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"ब्लूटूथ"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"एक्सेस-योग्यता"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"कॉल करें"</string>
+ <string name="stream_system" msgid="7493299064422163147">"सिस्टम"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"रिंग करें"</string>
+ <string name="stream_music" msgid="9086982948697544342">"मीडिया"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"अलार्म"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"नोटिफ़िकेशन"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"ब्लूटूथ"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"दोहरी बहु टोन आवृत्ति"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"एक्सेस-योग्यता"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. अनम्यूट करने के लिए टैप करें."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. कंपन पर सेट करने के लिए टैप करें. एक्सेस-योग्यता सेवाएं म्यूट हो सकती हैं."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. म्यूट करने के लिए टैप करें. एक्सेस-योग्यता सेवाएं म्यूट हो सकती हैं."</string>
@@ -466,7 +468,7 @@
<string name="quick_settings" msgid="10042998191725428">"तेज़ सेटिंग"</string>
<string name="status_bar" msgid="4877645476959324760">"स्थिति बार"</string>
<string name="overview" msgid="4018602013895926956">"अवलोकन"</string>
- <string name="demo_mode" msgid="2389163018533514619">"डेमो मोड"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"सिस्टम UI डेमो मोड"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"डेमो मोड सक्षम करें"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"डेमो मोड दिखाएं"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"ईथरनेट"</string>
@@ -506,20 +508,17 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"चालू"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"बंद"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"पावर नोटिफ़िकेशन नियंत्रण के द्वारा, आप किसी ऐप्लिकेशन के नोटिफ़िकेशन के लिए 0 से 5 तक महत्व का लेवल सेट कर सकते हैं. \n\n"<b>"लेवल 5"</b>" \n- नोटिफ़िकेशन सूची के शीर्ष पर दिखाएं \n- पूर्ण स्क्रीन बाधा की अनुमति दें \n- हमेशा तांक-झांक करें \n\n"<b>"लेवल 4"</b>" \n- पूर्ण स्क्रीन बाधा को रोकें \n- हमेशा तांक-झांक करें \n\n"<b>"लेवल 3"</b>" \n- पूर्ण स्क्रीन बाधा को रोकें \n- कभी भी तांक-झांक ना करें \n\n"<b>"लेवल 2"</b>" \n- पूर्ण स्क्रीन बाधा को रोकें \n- कभी भी तांक-झांक ना करें \n- कभी भी ध्वनि या कंपन ना करें \n\n"<b>"लेवल 1"</b>" \n- पूर्ण स्क्रीन बाधा को रोकें \n- कभी भी तांक-झांक ना करें \n- कभी भी ध्वनि या कंपन ना करें \n- लॉक स्क्रीन और स्थिति बार से छिपाएं \n- नोटिफ़िकेशन सूची के नीचे दिखाएं \n\n"<b>"लेवल 0"</b>" \n- ऐप्लिकेशन के सभी नोटिफ़िकेशन अवरुद्ध कर दें"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"महत्व: स्वचालित"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"महत्व: लेवल 0"</string>
- <string name="min_importance" msgid="560779348928574878">"महत्व: लेवल 1"</string>
- <string name="low_importance" msgid="7571498511534140">"महत्व: लेवल 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"महत्व: लेवल 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"महत्व: लेवल 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"महत्व: लेवल 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"ऐप्लिकेशन प्रत्येक नोटिफ़िकेशन का महत्व निर्धारित करता है."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"इस ऐप्लिकेशन के नोटिफ़िकेशन कभी ना दिखाएं."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"कोई पूर्ण स्क्रीन बाधा, तांक-झांक, ध्वनि या कंपन नहीं है. लॉक स्क्रीन और स्थिति बार से छिपाएं."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"कोई पूर्ण स्क्रीन बाधा, तांक-झांक, ध्वनि या कंपन नहीं है."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"कोई पूर्ण स्क्रीन बाधा या तांक-झांक नहीं है."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"हमेशा तांक-झांक. कोई पूर्ण स्क्रीन बाधा नहीं है."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"हमेशा तांक-झांक और पूर्ण स्क्रीन बाधा की अनुमति दें."</string>
+ <string name="notification_header_default_channel" msgid="7506845022070889909">"नोटिफ़िकेशन"</string>
+ <string name="notification_channel_disabled" msgid="5805874247999578073">"अब आपको ये नोटिफ़िकेशन नहीं मिलेंगे."</string>
+ <string name="notification_importance_header_app" msgid="3572576545406258751">"इसके लिए <xliff:g id="APP">%s</xliff:g> नोटिफ़िकेशन"</string>
+ <string name="min_importance" msgid="7559703098688382595">"निम्न"</string>
+ <string name="low_importance" msgid="6891335321576225228">"मध्यम"</string>
+ <string name="default_importance" msgid="6400766013567512061">"उच्च"</string>
+ <string name="high_importance" msgid="730741630855788381">"अति आवश्यक"</string>
+ <string name="notification_importance_min" msgid="3237794091374404537">"ध्वनि या दृश्य संबंधी कोई रुकावट नहीं"</string>
+ <string name="notification_importance_low" msgid="8929105501798019743">"मौन रूप से दिखाएं"</string>
+ <string name="notification_importance_default" msgid="9025125660733917469">"ध्वनि करें"</string>
+ <string name="notification_importance_high" msgid="3316555356062640222">"ध्वनि करें और स्क्रीन पर दिखाएं"</string>
<string name="notification_more_settings" msgid="816306283396553571">"और सेटिंग"</string>
<string name="notification_done" msgid="5279426047273930175">"हो गया"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> नोटिफ़िकेशन नियंत्रण"</string>
@@ -652,4 +651,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"सेटिंग का क्रम संपादित करें."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"पृष्ठ <xliff:g id="ID_2">%2$d</xliff:g> में से <xliff:g id="ID_1">%1$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"विस्तृत करें"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"छोटा करें"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"खारिज करें"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"फ़ोन गर्म हो रहा है"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"फ़ोन के ठंडा होने के दौरान कुछ सुविधाएं सीमित होती हैं"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"आपका फ़ोन अपने आप ठंडा होने की कोशिश करेगा. आप अभी भी अपने फ़ोन का उपयोग कर सकते हैं, लेकिन हो सकता है कि यह धीमी गति से चले.\n\nठंडा हो जाने पर आपका फ़ोन सामान्य रूप से चलेगा."</string>
</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index c105c23..f160f2df 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -164,6 +164,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Baterija se puni, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> posto."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Postavke sustava."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Obavijesti."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Spremnik dodatnih obavijesti"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Brisanje obavijesti"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS je omogućen."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Dohvaćanje GPS-a."</string>
@@ -185,6 +186,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Zaključavanje zaslona."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Postavke"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Pregled."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Zatvaranje"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi isključen."</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Izbriši sve"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Započni sad"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Nema obavijesti"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Uređaj se možda nadzire"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil se možda nadzire"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Mreža se možda nadzire"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Mreža se možda nadzire"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Nadzor uređaja"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Nadzor profila"</string>
<string name="monitoring_title" msgid="169206259253048106">"Nadzor mreže"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Mrežni zapisnik"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Onemogući VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Prekini vezu s VPN-om"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Vašim uređajem upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVaš administrator može nadzirati postavke, pristup tvrtki, aplikacije, podatke povezane s vašim uređajem i podatke o lokaciji uređaja, kao i upravljati svim prethodno navedenim. Više informacija možete saznati od administratora."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Vašim uređajem upravlja aplikacija <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> upotrebljava aplikaciju <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> za upravljanje vašim uređajem."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administrator može nadzirati postavke, korporacijski pristup, aplikacije, podatke o uređaju i lokaciji uređaja te upravljati njima"</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saznajte više"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Povezani ste s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g> koja može nadzirati vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Otvorite postavke VPN-a"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administrator je uključio mrežni zapisnik koji prati promet na vašem uređaju.\n\nViše informacija možete dobiti od administratora."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Dali ste dopuštenje aplikaciji za postavljanje VPN veze.\n\nTa aplikacija može nadzirati vašu aktivnost na uređaju i mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Vašim uređajem upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVaš administrator može nadzirati postavke, pristup tvrtki, aplikacije, podatke povezane s vašim uređajem i podatke o lokaciji uređaja, kao i upravljati svim prethodno navedenim.\n\nPovezani ste s VPN-om koji može nadzirati vaše aktivnosti u mreži, uključujući e-poruke, aplikacije i web-lokacije.\n\n Više informacija možete saznati od administratora."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Vašim poslovnim profilom upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVaš administrator može nadzirati vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nObratite se administratoru za više informacija.\n\nPovezani ste i s VPN-om koji može nadzirati vašu aktivnost na mreži."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Povezani ste s aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g> koja može nadzirati vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Povezani ste s aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g> koja može nadzirati vašu osobnu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Vašim poslovnim profilom upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je s aplikacijom <xliff:g id="APPLICATION">%2$s</xliff:g> koja može nadzirati vašu poslovnu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nObratite se svojem administratoru za više informacija."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Vašim poslovnim profilom upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je s aplikacijom <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> koja može nadzirati vašu poslovnu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nPovezani ste i s aplikacijom <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> koja može nadzirati vašu osobnu aktivnost na mreži."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Vašim uređajem upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVaš administrator može nadzirati postavke, poslovni pristup, aplikacije, podatke povezane s uređajem i podatke o lokaciji uređaja te upravljati njima.\n\nPovezani ste s aplikacijom <xliff:g id="APPLICATION">%2$s</xliff:g> koja može nadzirati vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nObratite se svojem administratoru za više informacija."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Uređaj će ostati zaključan dok ga ručno ne otključate"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Primajte obavijesti brže"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Pogledajte ih prije otključavanja"</string>
@@ -432,31 +442,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Proširivanje"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Sažimanje"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Zaslon je prikvačen"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Zaslon će tako ostati u prvom planu dok ga ne otkvačite. Dodirnite i zadržite Natrag da biste ga otkvačili."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Shvaćam"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Ne, hvala"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Želite li sakriti pločicu <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ponovo će se pojaviti kada je sljedeći put uključite u postavkama."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Sakrij"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> želi biti dijaloški okvir za upravljanje glasnoćom."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Dopusti"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Odbij"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> predstavlja dijaloški okvir za upravljanje glasnoćom"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Dodirnite da biste vratili izvornik."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Upotrebljavate radni profil"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Poziv"</item>
- <item msgid="5997713001067658559">"Sustav"</item>
- <item msgid="7858983209929864160">"Zvonjenje"</item>
- <item msgid="1850038478268896762">"Mediji"</item>
- <item msgid="8265110906352372092">"Alarm"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Pristupačnost"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Nazovi"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sustav"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Zvoni"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Mediji"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarm"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Obavijest"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"DTMF"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Pristupačnost"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Dodirnite da biste uključili zvuk."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Dodirnite da biste postavili na vibraciju. Usluge pristupačnosti možda neće imati zvuk."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Dodirnite da biste isključili zvuk. Usluge pristupačnosti možda neće imati zvuk."</string>
@@ -468,7 +472,7 @@
<string name="quick_settings" msgid="10042998191725428">"Brze postavke"</string>
<string name="status_bar" msgid="4877645476959324760">"Traka statusa"</string>
<string name="overview" msgid="4018602013895926956">"Pregled"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Demo način"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Demo način korisničkog sučelja sustava"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Omogući demo način"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Prikaži demo način"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -508,20 +512,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Uključeno"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Isključeno"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Napredne kontrole obavijesti omogućuju vam da postavite razinu važnosti za obavijesti aplikacije od 0 do 5. \n\n"<b>"Razina 5"</b>" \n– prikaži na vrhu popisa obavijesti \n– dopusti prekide prikaza na cijelom zaslonu \n– uvijek dopusti brzi pregled \n\n"<b>"Razina 4"</b>" \n– onemogući prekid prikaza na cijelom zaslonu \n– uvijek dopusti brzi pregled \n\n"<b>"Razina 3"</b>" \n– onemogući prekid prikaza na cijelom zaslonu \n– nikad ne dopusti brzi pregled\n\n"<b>"Razina 2"</b>" \n– onemogući prekid prikaza na cijelom zaslonu \n– nikad ne dopusti brzi pregled \n– nikad ne emitiraj zvuk ni vibraciju \n\n"<b>"Razina 1"</b>" \n– onemogući prekid prikaza na cijelom zaslonu \n– nikad ne dopusti brzi pregled \n– nikad ne emitiraj zvuk ni vibraciju \n– ne prikazuj na zaključanom zaslonu i traci statusa \n– prikaži na dnu popisa obavijesti \n\n"<b>"Razina 0"</b>" \n– blokiraj sve obavijesti aplikacije"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Važnost: automatski"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Važnost: razina 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Važnost: razina 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Važnost: razina 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Važnost: razina 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Važnost: razina 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Važnost: razina 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Aplikacija određuje važnost za svaku obavijest."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Nikad ne prikazuj obavijesti te aplikacije."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Bez prekida prikaza na cijelom zaslonu, brzog pregleda, zvuka ili vibracije. Ne prikazuj na zaključanom zaslonu i traci statusa."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Bez prekida prikaza na cijelom zaslonu, bez brzog pregleda, zvuka i vibracije."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Bez prekida prikaza na cijelom zaslonu i bez brzog pregleda."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Uvijek dopusti brzi pregled. Bez prekida prikaza na cijelom zaslonu."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Uvijek dopusti brzi pregled i prekid prikaza na cijelom zaslonu."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Više postavki"</string>
<string name="notification_done" msgid="5279426047273930175">"Gotovo"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Kontrole obavijesti za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -654,4 +666,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Uređivanje redoslijeda postavki."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Stranica <xliff:g id="ID_1">%1$d</xliff:g> od <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Proširivanje"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimiziraj"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Odbaci"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Telefon se zagrijava"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Neke su značajke ograničene dok se telefon hladi"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Telefon će se automatski pokušati ohladiti. Možete ga nastaviti koristiti, no mogao bi raditi sporije.\n\nKad se ohladi, radit će normalno."</string>
</resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 9944b21..94b0f0e 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Akkumulátor töltése folyamatban, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> százalék."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Rendszerbeállítások"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Értesítések"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Az értesítések túlcsordulási tárolója"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Értesítés törlése"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS engedélyezve."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS lekérése."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Lezárási képernyő."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Beállítások"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Áttekintés."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Bezárás"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi kikapcsolva."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Az összes törlése"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Indítás most"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Nincs értesítés"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Lehet, hogy az eszközt figyelik"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profilját felügyelhetik"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Lehet, hogy a hálózatot figyelik"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Lehet, hogy a hálózat felügyelt"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Eszközfigyelés"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilfelügyelet"</string>
<string name="monitoring_title" msgid="169206259253048106">"Hálózatfigyelés"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Hálózati naplózás"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN letiltása"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN-kapcsolat bontása"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Az eszközt a következő felügyeli:<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nRendszergazdája ellenőrizheti és módosíthatja a beállításokat, vállalati hozzáféréseket, alkalmazásokat, az eszközéhez társított adatokat és eszköze helyadatait. További tájékoztatásért forduljon rendszergazdájához."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Az eszközt a(z) <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> kezeli."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"A(z) <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> a(z) <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> alkalmazást használja az eszközkezeléshez."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"A rendszergazda kezelheti az eszközzel kapcsolatos beállításokat, vállalati hozzáférést, alkalmazásokat, adatokat és helyadatokat."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"További információ"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Ön kapcsolódik ehhez: <xliff:g id="VPN_APP">%1$s</xliff:g>, amely figyelheti hálózati tevékenységét, köztük a levelezést, az alkalmazás- és webhelyhasználatot."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN-beállítások megnyitása"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Rendszergazdája bekapcsolta a hálózati naplózást, amely figyeli eszköze forgalmát.\n\nHa további információra van szüksége, vegye fel a kapcsolatot rendszergazdájával."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Engedélyezte egy alkalmazásnak, hogy VPN-kapcsolatot létesítsen.\n\nEz az alkalmazás (az e-mailekre, alkalmazásokra és a webhelyekre is kiterjedően) figyelemmel kísérheti az Ön eszközét és hálózati tevékenységét."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Eszközét a következő felügyeli: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nRendszergazdája figyelemmel kísérheti és módosíthatja beállításait, vállalati hozzáféréseit, alkalmazásait, az eszközéhez társított adatokat és eszköze helyadatait.\n\n Ön egy VPN-hez is kapcsolódik, amely (az e-mailekre, alkalmazásokra és webhelyekre is kiterjedően) figyelemmel kísérheti hálózati tevékenységét.\n\nTovábbi tájékoztatásért forduljon rendszergazdájához."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Munkaprofilját a következő felügyeli: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nA rendszergazda (az e-mailekre, alkalmazásokra és a webhelyekre is kiterjedően) figyelemmel kísérheti hálózati tevékenységét.\n\nTovábbi információért forduljon a rendszergazdához.\n\nÖn egy VPN-hez is csatlakozik, amely szintén figyelemmel kísérheti hálózati tevékenységét."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Csatlakoztatta a(z) <xliff:g id="APPLICATION">%1$s</xliff:g> alkalmazást, amely figyelheti hálózati tevékenységét, beleértve az e-maileket, az alkalmazásokat és a webhelyeket."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Ön a(z) <xliff:g id="APPLICATION">%1$s</xliff:g> alkalmazáshoz csatlakozik, amely figyelheti személyes hálózati tevékenységét, beleértve az e-maileket, alkalmazásokat és webhelyeket."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Munkaprofilját a(z) <xliff:g id="ORGANIZATION">%1$s</xliff:g> felügyeli. Csatlakoztatva van hozzá a(z) <xliff:g id="APPLICATION">%2$s</xliff:g> alkalmazás, amely figyelheti az Ön hálózati tevékenységét, beleértve az e-maileket, az alkalmazásokat és a webhelyeket.\n\nTovábbi információért forduljon a rendszergazdájához."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Munkaprofilját a(z) <xliff:g id="ORGANIZATION">%1$s</xliff:g> felügyeli. Csatlakoztatva van hozzá a(z) <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> alkalmazás, amely figyelheti az Ön hálózati tevékenységét, beleértve az e-maileket, az alkalmazásokat és a webhelyeket.\n\nCsatlakoztatta továbbá a(z) <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> alkalmazást, amely szintén figyelemmel kísérheti személyes hálózati tevékenységét."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Eszközét a következő felügyeli: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nA rendszergazda figyelemmel kísérheti és módosíthatja beállításait, vállalati hozzáféréseit, alkalmazásait, az eszközéhez társított adatokat és eszköze helyadatait.\n\nÖn a következőhöz csatlakozik: <xliff:g id="APPLICATION">%2$s</xliff:g>, amely (az e-mailekre, alkalmazásokra és webhelyekre is kiterjedően) figyelemmel kísérheti hálózati tevékenységét.\n\nTovábbi információért forduljon a rendszergazdához."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Az eszköz addig zárolva marad, amíg kézileg fel nem oldja"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Gyorsabban megkaphatja az értesítéseket"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Már a képernyőzár feloldása előtt megtekintheti őket"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Kibontás"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Összecsukás"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"A képernyő rögzítve van"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Megjelenítve tartja addig, amíg Ön fel nem oldja a rögzítést. A feloldáshoz tartsa lenyomva a Vissza lehetőséget."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Értem"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Nem, köszönöm"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Elrejti ezt: <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Újból megjelenik majd, amikor ismét engedélyezi a beállítások között."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Elrejtés"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazás szeretné kezelni a hangerőt."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Engedélyezés"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Elutasítás"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazás kezeli a hangerőt"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Koppintson az eredeti visszaállításához."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"A munkaprofilt használja"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Hívás"</item>
- <item msgid="5997713001067658559">"Rendszer"</item>
- <item msgid="7858983209929864160">"Csörgetés"</item>
- <item msgid="1850038478268896762">"Média"</item>
- <item msgid="8265110906352372092">"Ébresztő"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Kisegítő lehetőségek"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Telefonhívás"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Rendszer"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Csörgetés"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Média"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Ébresztő"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Értesítés"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Kéthangú többfrekvenciás jelzésátvitel (DTMF)"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Kisegítő lehetőségek"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Koppintson a némítás megszüntetéséhez."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Koppintson a rezgés beállításához. Előfordulhat, hogy a kisegítő lehetőségek szolgáltatásai le vannak némítva."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Koppintson a némításhoz. Előfordulhat, hogy a kisegítő lehetőségek szolgáltatásai le vannak némítva."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Gyorsbeállítások"</string>
<string name="status_bar" msgid="4877645476959324760">"Állapotsor"</string>
<string name="overview" msgid="4018602013895926956">"Áttekintés"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Demó mód"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"A rendszer kezelőfelületének demómódja"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Demó mód engedélyezése"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Demó mód megjelenítése"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Bekapcsolva"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Kikapcsolva"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Az értesítési beállítások révén 0-tól 5-ig állíthatja be a fontossági szintet az alkalmazás értesítéseinél. \n\n"<b>"5. szint"</b>" \n– Megjelenítés az értesítési lista tetején \n– Teljes képernyő megszakításának engedélyezése \n– Mindig felugrik \n\n"<b>"4. szint"</b>" \n– Teljes képernyő megszakításának megakadályozása \n– Mindig felugrik \n\n"<b>"3. szint"</b>" \n– Teljes képernyő megszakításának megakadályozása \n– Soha nem ugrik fel \n\n"<b>"2. szint"</b>" \n– Teljes képernyő megszakításának megakadályozása \n– Soha nem ugrik fel \n– Soha nincs hangjelzés és rezgés \n\n"<b>"1. szint"</b>" \n– Teljes képernyő megszakításának megakadályozása \n– Soha nem ugrik fel \n– Soha nincs hangjelzés vagy rezgés \n– Elrejtés a lezárási képernyőről és az állapotsávról \n– Megjelenítés az értesítési lista alján \n\n"<b>"0. szint"</b>" \n– Az alkalmazás összes értesítésének letiltása"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Fontosság: Automatikus"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Fontosság: 0. szint"</string>
- <string name="min_importance" msgid="560779348928574878">"Fontosság: 1. szint"</string>
- <string name="low_importance" msgid="7571498511534140">"Fontosság: 2. szint"</string>
- <string name="default_importance" msgid="7609889614553354702">"Fontosság: 3. szint"</string>
- <string name="high_importance" msgid="3441537905162782568">"Fontosság: 4. szint"</string>
- <string name="max_importance" msgid="4880179829869865275">"Fontosság: 5. szint"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Az alkalmazás határozza meg az egyes értesítések fontosságát."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Soha ne jelenjenek meg az alkalmazás értesítései."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Nem szakítja meg a teljes képernyőt, nem ugrik fel, illetve nincs hang vagy rezgés. Elrejtés a lezárási képernyőről és az állapotsávról."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Nem szakítja meg a teljes képernyőt, nem ugrik fel, illetve nincs hang vagy rezgés."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Nem szakítja meg a teljes képernyőt, és nem ugrik fel."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Mindig felugrik az értesítés. Nem szakítja meg a teljes képernyőt."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Mindig felugrik az értesítés, valamint megszakíthatja a teljes képernyőt."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"További beállítások"</string>
<string name="notification_done" msgid="5279426047273930175">"Kész"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g>-értesítések vezérlői"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Beállítások sorrendjének szerkesztése."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_1">%1$d</xliff:g>. oldal, összesen: <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Kibontás"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Kis méret"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Elvetés"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"A telefon melegszik"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Bizonyos funkciók korlátozottan működnek a telefon hűlése közben"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"A telefon automatikusan megpróbál lehűlni. Továbbra is tudja használni a telefont, de elképzelhető, hogy működése lelassul.\n\nAmint a telefon lehűl, újra a szokásos módon működik majd."</string>
</resources>
diff --git a/packages/SystemUI/res/values-hy-rAM-land/strings.xml b/packages/SystemUI/res/values-hy-rAM-land/strings.xml
deleted file mode 100644
index 7c0535c..0000000
--- a/packages/SystemUI/res/values-hy-rAM-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"Էկրանն այժմ կողպված է հորիզոնական դիրքավորման մեջ:"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-hy-rAM/config.xml b/packages/SystemUI/res/values-hy/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-hy-rAM/config.xml
rename to packages/SystemUI/res/values-hy/config.xml
diff --git a/packages/SystemUI/res/values-hy-rAM/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
similarity index 90%
rename from packages/SystemUI/res/values-hy-rAM/strings.xml
rename to packages/SystemUI/res/values-hy/strings.xml
index 1c3e9b3..8889a96 100644
--- a/packages/SystemUI/res/values-hy-rAM/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -64,7 +64,7 @@
<string name="usb_debugging_message" msgid="2220143855912376496">"Համակարգչի RSA-ի բանալի մատնահետքն է`\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
<string name="usb_debugging_always" msgid="303335496705863070">"Միշտ թույլատրել այս համակարգչից"</string>
<string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB վրիպազերծումը արգելված է"</string>
- <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Սարքի վրա այս պահին մուտք գործած օգտվողը չի կարող միացնել USB վրիպազերծումը: Այս գործառույթից օգտվելու համար մուտք գործեք ադմինիստրատորի հաշվով:"</string>
+ <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Սարքի վրա այս պահին մուտք գործած օգտատերը չի կարող միացնել USB վրիպազերծումը: Այս գործառույթից օգտվելու համար մուտք գործեք ադմինիստրատորի հաշվով:"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"Խոշորացնել` էկրանը լցնելու համար"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Ձգել` էկրանը լցնելու համար"</string>
<string name="screenshot_saving_ticker" msgid="7403652894056693515">"Պահում է էկրանի հանույթը…"</string>
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Մարտկոցը լիցքավորվում է: Լիցքը <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> տոկոս է:"</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Համակարգի կարգավորումներ:"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Ծանուցումներ:"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Ծանուցումների գերբեռնման զետեղարան"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Մաքրել ծանուցումը:"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS-ը միացված է:"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS-ի ստացում:"</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Էկրանի կողպում:"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Կարգավորումներ"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Համատեսք"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Փակել"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>:"</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi-ն անջատվեց:"</string>
@@ -285,8 +288,8 @@
<string name="quick_settings_settings_label" msgid="5326556592578065401">"Կարգավորումներ"</string>
<string name="quick_settings_time_label" msgid="4635969182239736408">"Ժամանակը"</string>
<string name="quick_settings_user_label" msgid="5238995632130897840">"Ես"</string>
- <string name="quick_settings_user_title" msgid="4467690427642392403">"Օգտվող"</string>
- <string name="quick_settings_user_new_user" msgid="9030521362023479778">"Նոր օգտվող"</string>
+ <string name="quick_settings_user_title" msgid="4467690427642392403">"Օտատեր"</string>
+ <string name="quick_settings_user_new_user" msgid="9030521362023479778">"Նոր օգտատեր"</string>
<string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Միացված չէ"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ցանց չկա"</string>
@@ -366,11 +369,11 @@
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Արագ լիցքավորում (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>՝ մինչև ավարտ)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Դանդաղ լիցքավորում (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>՝ մինչև ավարտ)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Անջատել օգտվողին"</string>
- <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Փոխել օգտվողին. ներկայիս օգտվողն է՝ <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
- <string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Ընթացիկ օգտվողը՝ <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
+ <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Փոխել օգտատիրոջը. ներկայիս օգտատերն է՝ <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
+ <string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Ընթացիկ օգտատերը՝ <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_quick_contact" msgid="3020367729287990475">"Ցույց տալ դիտարկումը"</string>
- <string name="user_add_user" msgid="5110251524486079492">"Ավելացնել օգտվող"</string>
- <string name="user_new_user_name" msgid="426540612051178753">"Նոր օգտվող"</string>
+ <string name="user_add_user" msgid="5110251524486079492">"Ավելացնել օգտատեր"</string>
+ <string name="user_new_user_name" msgid="426540612051178753">"Նոր օգտատեր"</string>
<string name="guest_nickname" msgid="8059989128963789678">"Հյուր"</string>
<string name="guest_new_guest" msgid="600537543078847803">"Հյուր ավելացնել"</string>
<string name="guest_exit_guest" msgid="7187359342030096885">"Հեռացնել հյուրին"</string>
@@ -384,13 +387,13 @@
<string name="guest_notification_title" msgid="1585278533840603063">"Հյուր"</string>
<string name="guest_notification_text" msgid="335747957734796689">"Հավելվածները և տվյալները ջնջելու համար հեռացրեք հյուրին"</string>
<string name="guest_notification_remove_action" msgid="8820670703892101990">"ՀԵՌԱՑՆԵԼ ՀՅՈՒՐԻՆ"</string>
- <string name="user_logout_notification_title" msgid="1453960926437240727">"Ընթացիկ օգտվողի դուրս գրում"</string>
- <string name="user_logout_notification_text" msgid="3350262809611876284">"Ընթացիկ օգտվողի դուրս գրում"</string>
+ <string name="user_logout_notification_title" msgid="1453960926437240727">"Ընթացիկ օգտատիրոջ դուրս գրում"</string>
+ <string name="user_logout_notification_text" msgid="3350262809611876284">"Ընթացիկ օգտատիրոջ դուրս գրում"</string>
<string name="user_logout_notification_action" msgid="1195428991423425062">"ԸՆԹԱՑԻԿ ՕԳՏՎՈՂԻ ԴՈՒՐՍ ԳՐՈՒՄ"</string>
<string name="user_add_user_title" msgid="4553596395824132638">"Ավելացնե՞լ նոր պրոֆիլ:"</string>
- <string name="user_add_user_message_short" msgid="2161624834066214559">"Երբ նոր օգտվող եք ավելացնում, նա պետք է կարգավորի իր պրոֆիլը:\n\nՑանկացած օգտվող կարող է թարմացնել հավելվածները մյուս բոլոր հաշիվների համար:"</string>
- <string name="user_remove_user_title" msgid="4681256956076895559">"Հեռացնե՞լ օգտվողին:"</string>
- <string name="user_remove_user_message" msgid="1453218013959498039">"Այս օգտվողի բոլոր հավելվածներն ու տվյալները կջնջվեն:"</string>
+ <string name="user_add_user_message_short" msgid="2161624834066214559">"Երբ նոր օգտատեր եք ավելացնում, նա պետք է կարգավորի իր պրոֆիլը:\n\nՑանկացած օգտատեր կարող է թարմացնել հավելվածները մյուս բոլոր հաշիվների համար:"</string>
+ <string name="user_remove_user_title" msgid="4681256956076895559">"Հեռացնե՞լ օգտատիրոջը:"</string>
+ <string name="user_remove_user_message" msgid="1453218013959498039">"Այս օգտատիրոջ բոլոր հավելվածներն ու տվյալները կջնջվեն:"</string>
<string name="user_remove_user_remove" msgid="7479275741742178297">"Հեռացնել"</string>
<string name="battery_saver_notification_title" msgid="237918726750955859">"Մարտկոցի տնտեսումը միացված է"</string>
<string name="battery_saver_notification_text" msgid="820318788126672692">"Նվազեցնում է ծանրաբեռնվածությունը և ֆոնային տվյալները"</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Մաքրել բոլորը"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Մեկնարկել հիմա"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Ծանուցումներ չկան"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Սարքը կարող է վերահսկվել"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Պրոֆիլը կարող է վերահսկվել"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Ցանցը կարող է վերահսկվել"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Ցանցը կարող է վերահսկվել"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Սարքի մշտադիտարկում"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Պրոֆիլի վերահսկում"</string>
<string name="monitoring_title" msgid="169206259253048106">"Ցանցի մշտադիտարկում"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Ցանցային իրադարձությունների գրանցում"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Անջատել VPN-ը"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Անջատել VPN-ը"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Սարքի կառավարիչն է՝ <xliff:g id="ORGANIZATION">%1$s</xliff:g>:\n\nԱդմինիստրատորը կարող է վերահսկել և կառավարել կարգավորումները, կորպորատիվ հաշիվը, հավելվածները, սարքի հետ առնչվող և սարքի տեղադրության տվյալները: Լրացուցիչ տեղեկությունների համար դիմեք ադմինիստրատորին:"</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Ձեր սարքը կառավարվում է <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> հավելվածի կողմից:"</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>-ը ձեր սարքը կառավարելու համար օգտագործում է <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> հավելվածը:"</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Ձեր ադմինիստրատորը կարող է վերահսկել և կառավարել ձեր սարքի հետ կապակցված կարգավորումները, կորպորատիվ մուտքը, հավելվածները և տվյալները, ինչպես նաև ձեր սարքի տեղադրության տվյալները:"</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Իմանալ ավելին"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Դուք կապակցված եք <xliff:g id="VPN_APP">%1$s</xliff:g> հավելվածին, որը կարող է վերահսկել ձեր ցանցային գործողությունը, այդ թվում նաև էլփոստը, հավելվածները և կայքերը:"</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Բացել VPN-ի կարգավորումները"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Ձեր ադմինիստրատորը միացրել է ցանցային իրադարձությունների գրանցումը, որը վերահսկում է ձեր սարքի թրաֆիկը։\n\nԼրացուցիչ տեղեկություններ ստանալու համար դիմեք ձեր ադմինիստրատորին։"</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Ինչ-որ հավելվածի թույլ եք տվել հաստատել VPN կապակցում:\n\nԱյդ հավելվածը կարող է վերահսկել ձեր սարքի և ցանցի գործունեությունը, այդ թվում նաև էլփոստի հաշիվները, հավելվածները և կայքերը:"</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Սարքի կառավարիչն է՝ <xliff:g id="ORGANIZATION">%1$s</xliff:g>:\n\nԱդմինիստրատորը կարող է վերահսկել և կառավարել կարգավորումները, կորպորատիվ հաշիվը, հավելվածները, սարքի հետ առնչվող և սարքի տեղադրության տվյալները:\n\nՆաև ունեք VPN կապակցում, ինչը կարող է վերահսկել ձեր ցանցի գործունեությունը, այդ թվում նաև՝ էլեկտրոնային նամակները, հավելվածները և կայքերը:\n\nԼրացուցիչ տեղեկությունների համար դիմեք ադմինիստրատորին:"</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Աշխատանքային պրոֆիլի կառավարիչն է՝ <xliff:g id="ORGANIZATION">%1$s</xliff:g>:\n\nԱդմինիստրատորը կարող է վերահսկել ցանցում ունեցած գործունեությունը, այդ թվում նաև էլփոստի հաշիվները, հավելվածները և կայքերը:\n\nԼրացուցիչ տեղեկությունների համար դիմեք ադմինիստրատորին:\n\nՆաև ունեք VPN կապակցում, ինչը կարող է վերահսկել ձեր ցանցում կատարած գործողությունները:"</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Դուք կապակցված եք <xliff:g id="APPLICATION">%1$s</xliff:g> հավելվածին, որը կարող է վերահսկել ձեր ցանցի գործունեությունը, այդ թվում նաև էլփոստի հաշիվները, հավելվածները և կայքերը:"</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Դուք կապակցված եք <xliff:g id="APPLICATION">%1$s</xliff:g> հավելվածին, որը կարող է վերահսկել անձնական ցանցում կատարած ձեր գործողությունները, այդ թվում նաև էլփոստի հաշիվները, հավելվածները և կայքերը:"</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Աշխատանքային պրոֆիլի կառավարիչն է՝ <xliff:g id="ORGANIZATION">%1$s</xliff:g>: Այն կապակցված է <xliff:g id="APPLICATION">%2$s</xliff:g> հավելվածին, որը կարող է վերահսկել աշխատանքային ցանցում կատարած գործունեությունը, այդ թվում նաև էլփոստի հաշիվները, հավելվածները և կայքերը:\n\nԼրացուցիչ տեղեկությունների համար դիմեք ադմինիստրատորին:"</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Աշխատանքային պրոֆիլի կառավարիչն է՝ <xliff:g id="ORGANIZATION">%1$s</xliff:g>: Այն կապակցված է <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> հավելվածին, որը կարող է վերահսկել աշխատանքային ցանցում կատարած գործունեությունը, այդ թվում նաև էլփոստի հաշիվները, հավելվածները և կայքերը:\n\nԴուք նույնպես կապակցված եք <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> հավելվածին, որը կարող է վերահսկել անձնական ցանցում կատարած ձեր գործողությունները:"</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Սարքի կառավարիչն է՝ <xliff:g id="ORGANIZATION">%1$s</xliff:g>:\n\nԱդմինիստրատորը կարող է վերահսկել և կառավարել կարգավորումները, կորպորատիվ հաշիվը, հավելվածները, սարքի հետ առնչվող և սարքի տեղադրության տվյալները:\n\nՆաև կապակցված եք <xliff:g id="APPLICATION">%2$s</xliff:g> հավելվածին, ինչը կարող է վերահսկել ձեր ցանցի գործունեությունը, այդ թվում նաև՝ էլփոստի հաշիվները, հավելվածները և կայքերը:\n\nԼրացուցիչ տեղեկությունների համար դիմեք ադմինիստրատորին:"</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Սարքը կմնա արգելափակված՝ մինչև ձեռքով չբացեք"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Ավելի արագ ստացեք ծանուցումները"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Տեսեք դրանք մինչև ապակողպելը"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Ընդարձակել"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Կոծկել"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Էկրանն ամրացված է"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Էկրանը կմնա տեսադաշտում, մինչև այն ապամրացնեք: Ապամրացնելու համար հպեք և պահեք Հետ կոճակը:"</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Եղավ"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Ոչ"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Թաքցնե՞լ <xliff:g id="TILE_LABEL">%1$s</xliff:g>-ը:"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Այն դարձյալ կհայտնվի, երբ նորից միացնեք կարգավորումներում:"</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Թաքցնել"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ը ցանկանում է երկխոսության հավելվածը դառնալ:"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Թույլատրել"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Մերժել"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ը ձայնի ուժգնության երկխոսության հավելված է"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Հպեք՝ բնօրինակը վերականգնելու համար:"</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Դուք օգտագործում եք ձեր աշխատանքային պրոֆիլը"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Զանգել"</item>
- <item msgid="5997713001067658559">"Համակարգ"</item>
- <item msgid="7858983209929864160">"Զանգ"</item>
- <item msgid="1850038478268896762">"Մեդիա"</item>
- <item msgid="8265110906352372092">"Զարթուցիչ"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Մատչելիություն"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Զանգ"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Համակարգ"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Զանգ"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Մեդիա"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Զարթուցիչ"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Ծանուցում"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Կրկնակի բազմերանգ հաճախականություն"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Մատչելիություն"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s: Հպեք՝ ձայնը միացնելու համար:"</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s: Հպեք՝ թրթռումը միացնելու համար: Մատչելիության ծառայությունների ձայնը կարող է անջատվել:"</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s: Հպեք՝ ձայնն անջատելու համար: Մատչելիության ծառայությունների ձայնը կարող է անջատվել:"</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Արագ կարգավորումներ"</string>
<string name="status_bar" msgid="4877645476959324760">"Կարգավիճակի գոտի"</string>
<string name="overview" msgid="4018602013895926956">"Համատեսք"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Ցուցադրական ռեժիմ"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Համակարգի միջերեսի ցուցադրական ռեժիմ"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Ցուցադրական ռեժիմի միացում"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Ցուցադրական ռեժիմի ցուցադրում"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -483,7 +487,7 @@
<string name="accessibility_status_bar_hotspot" msgid="4099381329956402865">"Թեժ կետ"</string>
<string name="accessibility_managed_profile" msgid="6613641363112584120">"Աշխատանքային պրոֆիլ"</string>
<string name="tuner_warning_title" msgid="7094689930793031682">"Զվարճանք մեկ՝ որոշակի մարդու համար"</string>
- <string name="tuner_warning" msgid="8730648121973575701">"Համակարգի ՕՄ-ի ընդունիչը հնարավորություն է տալիս հարմարեցնել Android-ի օգտվողի միջերեսը: Այս փորձնական գործառույթները կարող են հետագա թողարկումների մեջ փոփոխվել, խափանվել կամ ընդհանրապես չհայտնվել: Եթե շարունակում եք, զգուշացեք:"</string>
+ <string name="tuner_warning" msgid="8730648121973575701">"Համակարգի ՕՄ-ի ընդունիչը հնարավորություն է տալիս հարմարեցնել Android-ի օգտատիրոջ միջերեսը: Այս փորձնական գործառույթները կարող են հետագա թողարկումների մեջ փոփոխվել, խափանվել կամ ընդհանրապես չհայտնվել: Եթե շարունակում եք, զգուշացեք:"</string>
<string name="tuner_persistent_warning" msgid="8597333795565621795">"Այս փորձնական գործառույթները կարող են հետագա թողարկումների մեջ փոփոխվել, խափանվել կամ ընդհանրապես չհայտնվել: Եթե շարունակում եք, զգուշացեք:"</string>
<string name="got_it" msgid="2239653834387972602">"Եղավ"</string>
<string name="tuner_toast" msgid="603429811084428439">"Համակարգի ՕՄ-ի ընդունիչը ավելացվել է կարգավորումներին"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Միացնել"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Անջատել"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Ծանուցումների ընդլայնված կառավարման օգնությամբ կարող եք յուրաքանչյուր հավելվածի ծանուցումների համար նշանակել կարևորության աստիճան՝ 0-5 սահմաններում: \n\n"<b>"5-րդ աստիճան"</b>" \n- Ցուցադրել ծանուցումների ցանկի վերևում \n- Թույլատրել լիաէկրան ընդհատումները \n- Միշտ ցուցադրել կարճ ծանուցումները \n\n"<b>"4-րդ աստիճան"</b>" \n- Արգելել լիաէկրան ընդհատումները \n- Միշտ ցուցադրել կարճ ծանուցումները \n\n"<b>"3-րդ աստիճան"</b>" \n- Արգելել լիաէկրան ընդհատումները \n- Արգելել կարճ ծանուցումների ցուցադրումը \n\n"<b>"2-րդ աստիճան"</b>" \n- Արգելել լիաէկրան ընդհատումները \n- Արգելել կարճ ծանուցումների ցուցադրումը \n- Անջատել ձայնը և թրթռումը \n\n"<b>"1-ին աստիճան"</b>" \n- Արգելել լիաէկրան ընդհատումները \n- Արգելել կարճ ծանուցումների ցուցադրումը \n- Անջատել ձայնը և թրթռումը \n- Չցուցադրել կողպէկրանում և կարգավիճակի գոտում \n- Ցուցադրել ծանուցումների ցանկի ներքևում \n\n"<b>"0-րդ աստիճան"</b>\n"- Արգելափակել հավելվածի բոլոր ծանուցումները"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Կարևորությունը՝ ավտոմատ"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Կարևորությունը՝ 0-րդ աստիճան"</string>
- <string name="min_importance" msgid="560779348928574878">"Կարևորությունը՝ 1-ին աստիճան"</string>
- <string name="low_importance" msgid="7571498511534140">"Կարևորությունը՝ 2-րդ աստիճան"</string>
- <string name="default_importance" msgid="7609889614553354702">"Կարևորությունը՝ 3-րդ աստիճան"</string>
- <string name="high_importance" msgid="3441537905162782568">"Կարևորությունը՝ 4-րդ աստիճան"</string>
- <string name="max_importance" msgid="4880179829869865275">"Կարևորությունը՝ 5-րդ աստիճան"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Յուրաքանչյուր ծանուցման կարևորությունը որոշում է հավելվածը:"</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Երբեք ցույց չտալ ծանուցումներ այս հավելվածից:"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Արգելել լիաէկրան ընդհատումները, կարճ ծանուցումները, ձայնը կամ թրթռումը: Չցուցադրել կողպէկրանում և կարգավիճակի գոտում:"</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Արգելել լիաէկրան ընդհատումները, կարճ ծանուցումները, ձայնը կամ թրթռումը:"</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Արգելել լիաէկրան ընդհատումները կամ կարճ ծանուցումները:"</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Միշտ ցուցադրել կարճ ծանուցումները: Արգելել լիաէկրան ընդհատումները:"</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Միշտ ցուցադրել կարճ ծանուցումները և թույլատրել լիաէկրան ընդհատումները:"</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Այլ կարգավորումներ"</string>
<string name="notification_done" msgid="5279426047273930175">"Պատրաստ է"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի ծանուցումների կառավարներ"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Խմբագրել կարգավորումների հերթականությունը:"</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Էջ <xliff:g id="ID_1">%1$d</xliff:g> / <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Ընդարձակել"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Ծալել"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Փակել"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Հեռախոսը տաքանում է"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Հովանալու ընթացքում հեռախոսի որոշ գործառույթներ սահմանափակ են"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Ձեր հեռախոսն ավտոմատ կերպով կփորձի hովանալ: Կարող եք շարունակել օգտագործել հեռախոսը, սակայն հնարավոր է, որ այն ավելի դանդաղ աշխատի:\n\nՀովանալուց հետո հեռախոսը կաշխատի կանոնավոր կերպով:"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hy-rAM/strings_car.xml b/packages/SystemUI/res/values-hy/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-hy-rAM/strings_car.xml
rename to packages/SystemUI/res/values-hy/strings_car.xml
diff --git a/packages/SystemUI/res/values-hy-rAM/strings_tv.xml b/packages/SystemUI/res/values-hy/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-hy-rAM/strings_tv.xml
rename to packages/SystemUI/res/values-hy/strings_tv.xml
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index e1e522e..2ccbda4 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Mengisi daya baterai, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> persen."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Setelan sistem."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Notifikasi."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Penampung luapan notifikasi"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Menghapus pemberitahuan."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS diaktifkan."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Memperoleh GPS."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Layar kunci."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Setelan"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Ringkasan."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Tutup"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi dinonaktifkan."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Hapus semua"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Mulai sekarang"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Tidak ada pemberitahuan"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Perangkat mungkin dipantau"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil dapat dipantau"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Jaringan mungkin dipantau"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Jaringan mungkin dipantau"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Pemantauan perangkat"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Pemantauan profil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Pemantauan jaringan"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Pencatatan Log Jaringan"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Nonaktifkan VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Putuskan sambungan VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Perangkat dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator dapat memantau dan mengelola setelan, akses perusahaan, aplikasi, data terkait perangkat, dan informasi lokasi perangkat. Untuk informasi selengkapnya, hubungi administrator."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Perangkat dikelola oleh <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> menggunakan <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> untuk mengelola perangkat Anda."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Admin dapat memantau dan mengelola setelan, akses perusahaan, aplikasi, data terkait perangkat, dan informasi lokasi perangkat."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Pelajari lebih lanjut"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Anda tersambung ke <xliff:g id="VPN_APP">%1$s</xliff:g>, yang dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Buka Setelan VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Admin telah mengaktifkan pencatatan log jaringan, yang memantau traffic di perangkat.\n\nUntuk informasi selengkapnya, hubungi admin."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Anda memberikan izin kepada aplikasi untuk menyiapkan sambungan VPN.\n\nAplikasi ini ini dapat memantau aktivitas perangkat dan jaringan, termasuk email, aplikasi, dan situs web."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Perangkat dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator dapat memantau dan mengelola setelan, akses perusahaan, aplikasi, data terkait perangkat, dan informasi lokasi perangkat.\n\nAnda tersambung ke VPN yang dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web.\n\nUntuk informasi selengkapnya, hubungi administrator."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Profil kerja dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web.\n\nUntuk informasi selengkapnya, hubungi administrator.\n\nAnda juga tersambung ke VPN yang dapat memantau aktivitas jaringan."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Anda tersambung ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Anda tersambung ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang dapat memantau aktivitas jaringan pribadi, termasuk email, aplikasi, dan situs web.."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Profil kerja dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g> dan tersambung ke <xliff:g id="APPLICATION">%2$s</xliff:g>, yang dapat memantau aktivitas jaringan kerja, termasuk email, aplikasi, dan situs web.\n\nUntuk informasi selengkapnya, hubungi administrator."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Profil kerja dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g> dan tersambung ke <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, yang dapat memantau aktivitas jaringan kerja, termasuk email, aplikasi, dan situs web.\n\nAnda juga tersambung ke <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, yang dapat memantau aktivitas jaringan pribadi."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Perangkat dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator dapat memantau dan mengelola setelan, akses perusahaan, aplikasi, data terkait perangkat, dan informasi lokasi perangkat.\n\nAnda tersambung ke <xliff:g id="APPLICATION">%2$s</xliff:g>, yang dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web.\n\nUntuk informasi selengkapnya, hubungi administrator."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Perangkat akan tetap terkunci hingga Anda membukanya secara manual"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Dapatkan pemberitahuan lebih cepat"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Lihat sebelum membuka kunci"</string>
@@ -430,31 +440,23 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Luaskan"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Ciutkan"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Layar dipasangi pin"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Ini akan terus ditampilkan sampai Anda melepas pin. Sentuh dan tahan tombol Kembali untuk melepas pin."</string>
+ <string name="screen_pinning_description" msgid="8909878447196419623">"Ini akan terus ditampilkan sampai Anda melepas pin. Sentuh & tahan tombol Kembali dan Ringkasan untuk melepas pin."</string>
+ <string name="screen_pinning_description_accessible" msgid="426190689254018656">"Ini akan terus ditampilkan sampai Anda melepas pin. Sentuh dan tahan tombol Ringkasan untuk melepas pin."</string>
<string name="screen_pinning_positive" msgid="3783985798366751226">"Mengerti"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Lain kali"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Sembunyikan <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ini akan muncul kembali saat Anda mengaktifkannya dalam setelan."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Sembunyikan"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ingin menjadi dialog volume."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Izinkan"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Tolak"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> adalah dialog volume"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Ketuk untuk memulihkan aslinya."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Anda menggunakan profil kerja"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Telepon"</item>
- <item msgid="5997713001067658559">"Sistem"</item>
- <item msgid="7858983209929864160">"Dering"</item>
- <item msgid="1850038478268896762">"Media"</item>
- <item msgid="8265110906352372092">"Alarm"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Aksesibilitas"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Telepon"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistem"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Dering"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Media"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarm"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Notifikasi"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Frekuensi multinada ganda"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Aksesibilitas"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Ketuk untuk menyuarakan."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Ketuk untuk menyetel agar bergetar. Layanan aksesibilitas mungkin dibisukan."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Ketuk untuk membisukan. Layanan aksesibilitas mungkin dibisukan."</string>
@@ -466,7 +468,7 @@
<string name="quick_settings" msgid="10042998191725428">"Setelan Cepat"</string>
<string name="status_bar" msgid="4877645476959324760">"Bilah status"</string>
<string name="overview" msgid="4018602013895926956">"Ringkasan"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Mode demo"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Mode demo UI sistem"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Aktifkan mode demo"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Tampilkan mode demo"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +508,17 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Aktif"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Nonaktif"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Dengan kontrol notifikasi daya, Anda dapt menyetel level kepentingan notifikasi aplikasi dari 0 sampai 5. \n\n"<b>"Level 5"</b>" \n- Muncul di atas daftar notifikasi \n- Izinkan interupsi layar penuh \n- Selalu intip pesan \n\n"<b>"Level 4"</b>" \n- Jangan interupsi layar penuh \n- Selalu intip pesan \n\n"<b>"Level 3"</b>" \n- Jangan interupsi layar penuh \n- Tak pernah intip pesan \n\n"<b>"Level 2"</b>" \n- Jangan interupsi layar penuh \n- Tak pernah intip pesan \n- Tanpa suara dan getaran \n\n"<b>"Level 1"</b>" \n- Jangan interupsi layar penuh \n- Tak pernah intip pesan \n- Tanpa suara atau getaran \n- Sembunyikan dari layar kunci dan bilah status \n- Muncul di bawah daftar notifikasi \n\n"<b>"Level 0"</b>" \n- Blokir semua notifikasi dari aplikasi"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Level kepentingan: Otomatis"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Level kepentingan: Level 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Level kepentingan: Level 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Level kepentingan: Level 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Level kepentingan: Level 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Level kepentingan: Level 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Level kepentingan: Level 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Aplikasi menentukan level kepentingan setiap notifikasi."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Jangan pernah tampilkan notifikasi dari aplikasi ini."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Tak ada interupsi layar, intip pesan, suara, atau getar. Sembunyikan dari layar kunci & bilah status."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Tidak ada interupsi layar penuh, intip pesan, suara, atau getar."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Tidak ada interupsi layar penuh atau intip pesan."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Selalu intip pesan. Tidak ada interupsi layar penuh."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Selalu intip pesan, dan izinkan interupsi layar penuh."</string>
+ <string name="notification_header_default_channel" msgid="7506845022070889909">"Notifikasi"</string>
+ <string name="notification_channel_disabled" msgid="5805874247999578073">"Anda tidak akan mendapatkan notifikasi ini lagi."</string>
+ <string name="notification_importance_header_app" msgid="3572576545406258751">"Notifikasi <xliff:g id="APP">%s</xliff:g> untuk"</string>
+ <string name="min_importance" msgid="7559703098688382595">"Rendah"</string>
+ <string name="low_importance" msgid="6891335321576225228">"Sedang"</string>
+ <string name="default_importance" msgid="6400766013567512061">"Tinggi"</string>
+ <string name="high_importance" msgid="730741630855788381">"Penting"</string>
+ <string name="notification_importance_min" msgid="3237794091374404537">"Tidak ada gangguan suara atau visual"</string>
+ <string name="notification_importance_low" msgid="8929105501798019743">"Tampilkan secara diam-diam"</string>
+ <string name="notification_importance_default" msgid="9025125660733917469">"Buat suara"</string>
+ <string name="notification_importance_high" msgid="3316555356062640222">"Buat suara dan munculkan di layar"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Setelan lainnya"</string>
<string name="notification_done" msgid="5279426047273930175">"Selesai"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Kontrol notifikasi <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -652,4 +651,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Edit urutan setelan."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Halaman <xliff:g id="ID_1">%1$d</xliff:g> dari <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Luaskan"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimalkan"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Tutup"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Ponsel menjadi hangat"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Beberapa fitur dibatasi saat ponsel mendingin"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Ponsel akan otomatis mencoba mendingin. Anda tetap dapat menggunakan ponsel, tetapi mungkin berjalan lebih lambat.\n\nSetelah dingin, ponsel akan berjalan seperti biasa."</string>
</resources>
diff --git a/packages/SystemUI/res/values-is-rIS-land/strings.xml b/packages/SystemUI/res/values-is-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-is-rIS-land/strings.xml
rename to packages/SystemUI/res/values-is-land/strings.xml
diff --git a/packages/SystemUI/res/values-is-rIS/config.xml b/packages/SystemUI/res/values-is/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-is-rIS/config.xml
rename to packages/SystemUI/res/values-is/config.xml
diff --git a/packages/SystemUI/res/values-is-rIS/strings.xml b/packages/SystemUI/res/values-is/strings.xml
similarity index 93%
rename from packages/SystemUI/res/values-is-rIS/strings.xml
rename to packages/SystemUI/res/values-is/strings.xml
index d92092d..9d2d43f 100644
--- a/packages/SystemUI/res/values-is-rIS/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Rafhlaða í hleðslu, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> prósent."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Kerfisstillingar."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Tilkynningar."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Geymir yfirflæðistilkynninga"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Hreinsa tilkynningu."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS virkt."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Tenging við GPS."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Lásskjár."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Stillingar"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Yfirlit."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Loka"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Slökkt á Wi-Fi."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Hreinsa allt"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Byrja núna"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Engar tilkynningar"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Hugsanlega er fylgst með tækjum"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Hugsanlega er fylgst með þessu sniði"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Hugsanlega er fylgst með netinu"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Hugsanlega er fylgst með netinu"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Tækjaeftirlit"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Fylgst með sniði"</string>
<string name="monitoring_title" msgid="169206259253048106">"Neteftirlit"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Eftirlit netkerfa"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Slökkva á VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Aftengja VPN-net"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Tækinu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nKerfisstjórinn þinn getur fylgst með og stjórnað stillingum, fyrirtækjaaðgangi, forritum, gögnum sem tengd eru tækinu og staðsetningarupplýsingum tækisins. Hafðu samband við kerfisstjórann til að fá frekari upplýsingar."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Þessu tæki er stýrt af <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> notar <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> til að stýra tækinu þínu."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Kerfisstjóri getur fylgst með og stjórnað stillingum, fyrirtækjaaðgangi, forritum, gögnum tengdum tækinu og staðsetningu tækisins."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Frekari upplýsingar"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Þú ert með tengingu við <xliff:g id="VPN_APP">%1$s</xliff:g>, sem getur fylgst með netnotkun þinni, þ. á m. tölvupósti, forritum og vefsvæðum."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Opna VPN-stillingar"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Kerfisstjóri hefur kveikt á eftirliti netkerfa, sem fylgist með netumferð á tækinu þínu.\n\nHafðu samband við kerfisstjóra til að fá frekari upplýsingar."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Þú veittir forriti heimild til að koma á VPN-tengingu.\n\nÞetta forrit getur fylgst með virkni þinni í tækinu og á netinu, þar á meðal tölvupósti, forritum og vefsvæðum."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Tækinu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nKerfisstjórinn þinn getur fylgst með og stjórnað stillingum, fyrirtækjaaðgangi, forritum, gögnum sem tengd eru tækinu og staðsetningarupplýsingum tækisins.\n\nÞú ert með tengingu við VPN-net sem getur fylgst með netnotkun þinni, þar á meðal tölvupósti, forritum og vefsvæðum.\n\nHafðu samband við kerfisstjórann til að fá frekari upplýsingar."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Vinnusniðinu þínu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nKerfisstjórinn þinn getur fylgst með netnotkun þinni, þar á meðal tölvupósti, forritum og vefsvæðum.\n\nHafðu samband við kerfisstjórann til að fá frekari upplýsingar.\n\nÞú ert einnig með tengingu við VPN-net sem getur fylgst með netnotkun þinni."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Þú ert með tengingu við <xliff:g id="APPLICATION">%1$s</xliff:g>, sem getur fylgst með netnotkun þinni, þ. á m. tölvupósti, forritum og vefsvæðum."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Þú ert með tengingu við <xliff:g id="APPLICATION">%1$s</xliff:g>, sem getur fylgst með persónulegri netnotkun þinni, þ. á m. tölvupósti, forritum og vefsvæðum."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Vinnusniðinu þínu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Það er tengt <xliff:g id="APPLICATION">%2$s</xliff:g>, sem getur fylgst með vinnutengdri netnotkun þinni, þar á meðal tölvupósti, forritum og vefsvæðum.\n\nHafðu samband við kerfisstjórann til að fá frekari upplýsingar."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Vinnusniðinu þínu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Það er tengt <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, sem getur fylgst með vinnutengdri netnotkun þinni, þar á meðal tölvupósti, forritum og vefsvæðum.\n\nÞú ert einnig með tengingu við <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, sem getur fylgst með persónulegri netnotkun þinni."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Tækinu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nKerfisstjórinn þinn getur fylgst með og stjórnað stillingum, fyrirtækjaaðgangi, forritum, gögnum sem tengd eru tækinu og staðsetningarupplýsingum tækisins.\n\nÞú ert með tengingu við <xliff:g id="APPLICATION">%2$s</xliff:g>, sem getur fylgst með netnotkun þinni, þar á meðal tölvupósti, forritum og vefsvæðum.\n\nHafðu samband við kerfisstjórann til að fá frekari upplýsingar."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Tækið verður læst þar til þú opnar það handvirkt"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Fáðu tilkynningar hraðar"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Sjáðu þær áður en þú opnar"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Stækka"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Minnka"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Skjárinn er festur"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Þetta heldur þessu opnu þangað til þú losar það. Haltu fingri á „Til baka“ til að losa."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Ég skil"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Nei, takk"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Fela <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Þetta birtist aftur næst þegar þú kveikir á því í stillingunum."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Fela"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> vill vera hljóðstyrksvalmyndin."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Leyfa"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Hafna"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> er hljóðstyrksvalmyndin"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Ýttu til að færa í upprunalegt horf."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Þú ert að nota vinnusniðið"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Hringja"</item>
- <item msgid="5997713001067658559">"Kerfi"</item>
- <item msgid="7858983209929864160">"Hringing"</item>
- <item msgid="1850038478268896762">"Margmiðlun"</item>
- <item msgid="8265110906352372092">"Vekjari"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Aðgengi"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Símtal"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Kerfi"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Hringing"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Margmiðlun"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Vekjari"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Tilkynning"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Tvítóna fjöltíðni"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Aðgengi"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Ýttu til að hætta að þagga."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Ýttu til að stilla á titring. Hugsanlega verður slökkt á hljóði aðgengisþjónustu."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Ýttu til að þagga. Hugsanlega verður slökkt á hljóði aðgengisþjónustu."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Flýtistillingar"</string>
<string name="status_bar" msgid="4877645476959324760">"Stöðustika"</string>
<string name="overview" msgid="4018602013895926956">"Yfirlit"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Prufustilling"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Prufustilling kerfisviðmóts"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Kveikja á prufustillingu"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Sýna prufustillingu"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Kveikt"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Slökkt"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Með orkutilkynningastýringum geturðu stillt mikilvægi frá 0 upp í 5 fyrir tilkynningar forrita. \n\n"<b>"Stig 5"</b>" \n- Sýna efst á tilkynningalista \n- Leyfa truflun þegar birt er á öllum skjánum \n- Kíkja alltaf \n\n"<b>"Stig 4"</b>" \n- Hindra truflun við birtingu á öllum skjánum \n- Kíkja alltaf \n\n"<b>"Stig 3"</b>" \n- Hindra truflun við birtingu á öllum skjánum \n- Kíkja aldrei \n\n"<b>"Stig 2"</b>" \n- Hindra truflun við birtingu á öllum skjánum \n- Kíkja aldrei \n- Slökkva á hljóði og titringi \n\n"<b>"Stig 1"</b>" \n- Hindra truflun við birtingu á öllum skjánum \n- Kíkja aldrei \n- Slökkva á hljóði og titringi \n- Fela á lásskjá og stöðustiku \n- Sýna neðst á tilkynningalista \n\n"<b>"Stig 0"</b>" \n- Setja allar tilkynningar frá forriti á bannlista"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Mikilvægi: Sjálfvirkt"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Mikilvægi: Stig 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Mikilvægi: Stig 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Mikilvægi: Stig 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Mikilvægi: Stig 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Mikilvægi: Stig 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Mikilvægi: Stig 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Forrit ákvarðar mikilvægi hverrar tilkynningar fyrir sig."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Birta aldrei tilkynningar úr þessu forriti."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Ekki trufla, kíkja, spila hljóð eða nota titring. Fela á lásskjá og stöðustikunni."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Ekki trufla, kíkja, spila hljóð eða nota titring við birtingu á öllum skjánum."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Ekki trufla eða kíkja í birtingu á öllum skjánum."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Kíkja alltaf. Engar truflanir við birtingu á öllum skjánum."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Kíkja alltaf og leyfa truflanir við birtingu á öllum skjánum."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Fleiri stillingar"</string>
<string name="notification_done" msgid="5279426047273930175">"Lokið"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Tilkynningastýringar <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Breyta röð stillinga."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Blaðsíða <xliff:g id="ID_1">%1$d</xliff:g> af <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Stækka"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minnka"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Hunsa"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Síminn er að hitna"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Sumir eiginleikar eru takmarkaðir þegar síminn kælir sig"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Síminn reynir sjálfkrafa að kæla sig. Þú getur enn notað símann en hann gæti verið hægvirkari.\n\nEftir að síminn hefur kælt sig niður virkar hann eðlilega."</string>
</resources>
diff --git a/packages/SystemUI/res/values-is-rIS/strings_car.xml b/packages/SystemUI/res/values-is/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-is-rIS/strings_car.xml
rename to packages/SystemUI/res/values-is/strings_car.xml
diff --git a/packages/SystemUI/res/values-is-rIS/strings_tv.xml b/packages/SystemUI/res/values-is/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-is-rIS/strings_tv.xml
rename to packages/SystemUI/res/values-is/strings_tv.xml
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 43b5f34..93bbd43 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -165,6 +165,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Impostazioni di sistema."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Notifiche."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Contenitore per notifiche overflow"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Cancella notifica."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS abilitato."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Acquisizione GPS."</string>
@@ -186,6 +187,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Schermata di blocco."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Impostazioni"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Panoramica."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Chiudi"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi disattivato."</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Cancella tutto"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Avvia adesso"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Nessuna notifica"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Il dispositivo potrebbe essere monitorato"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Il profilo potrebbe essere monitorato"</string>
<string name="vpn_footer" msgid="2388611096129106812">"La rete potrebbe essere monitorata"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"La rete potrebbe essere monitorata"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Monitoraggio del dispositivo"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitoraggio del profilo"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitoraggio rete"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Log di rete"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Disattiva VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Scollega VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Il tuo dispositivo è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nL\'amministratore può monitorare e gestire impostazioni, accesso aziendale, app e dati associati al dispositivo, incluse le informazioni sulla posizione del dispositivo. Per ulteriori informazioni, contatta l\'amministratore."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Il dispositivo è gestito dall\'app <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> utilizza l\'app <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> per gestire il dispositivo."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"L\'amministratore può monitorare e gestire impostazioni, accesso aziendale, app, dati associati al dispositivo e informazioni sulla posizione del dispositivo."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Ulteriori informazioni"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Sei connesso a <xliff:g id="VPN_APP">%1$s</xliff:g>, che consente di monitorare le attività di rete, inclusi siti web, email e app."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Apri impostazioni VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"L\'amministratore ha attivato i log di rete, che monitorano il traffico sul dispositivo.\n\nContatta l\'amministratore per ulteriori informazioni."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Hai autorizzato l\'app a configurare una connessione VPN.\n\nQuesta app può monitorare il tuo dispositivo e l\'attività di rete, inclusi email, app e siti web."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Il tuo dispositivo è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nL\'amministratore può monitorare e gestire impostazioni, accesso aziendale, app e dati associati al dispositivo, incluse le informazioni sulla posizione del dispositivo.\n\nSei connesso a una rete VPN da cui è possibile monitorare la tua attività di rete, inclusi siti web, email e app.\n\nPer ulteriori informazioni, contatta l\'amministratore."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Il tuo profilo di lavoro è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nL\'amministratore può monitorare l\'attività di rete, inclusi email, app e siti web.\n\nPer ulteriori informazioni, contatta l\'amministratore.\n\nSei connesso anche a VPN, da cui è possibile monitorare la tua attività di rete."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Sei connesso a <xliff:g id="APPLICATION">%1$s</xliff:g>, da cui è possibile monitorare la tua attività di rete, inclusi email, app e siti web."</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Sei collegato a <xliff:g id="APPLICATION">%1$s</xliff:g>, che consente di monitorare la tua attività di rete personale, inclusi siti web, email e app."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Il tuo profilo di lavoro è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>. È connesso a <xliff:g id="APPLICATION">%2$s</xliff:g>, da cui è possibile monitorare la tua attività di rete lavorativa, inclusi email, app e siti web.\n\nPer ulteriori informazioni, contatta il tuo amministratore."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Il tuo profilo di lavoro è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>. È connesso a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, da cui è possibile monitorare la tua attività di rete lavorativa, inclusi email, app e siti web.\n\nSei connesso anche a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, da cui è possibile monitorare la tua attività di rete personale."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Il tuo dispositivo è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nL\'amministratore può monitorare e gestire impostazioni, accesso aziendale, app e dati associati al dispositivo, incluse le informazioni sulla posizione del dispositivo.\n\nSei connesso a <xliff:g id="APPLICATION">%2$s</xliff:g>, da cui è possibile monitorare la tua attività di rete, inclusi email, app e siti web.\n\nPer ulteriori informazioni, contatta l\'amministratore."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Il dispositivo resterà bloccato fino allo sblocco manuale"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Ricevi notifiche più velocemente"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Visualizza prima di sbloccare"</string>
@@ -432,31 +442,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Espandi"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Comprimi"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"La schermata è bloccata"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"La schermata rimane visibile finché non la sblocchi. Tieni premuto Indietro per sbloccare."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"OK"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"No, grazie"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Nascondere <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Verranno visualizzate di nuovo quando le riattiverai nelle impostazioni."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Nascondi"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> desidera fungere da finestra di dialogo relativa al volume"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Consenti"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Nega"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> rappresenta la finestra di dialogo relativa al volume"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Tocca per ripristinare l\'originale."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Stai utilizzando il profilo di lavoro"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Chiamata"</item>
- <item msgid="5997713001067658559">"Sistema"</item>
- <item msgid="7858983209929864160">"Suoneria"</item>
- <item msgid="1850038478268896762">"Contenuti multimediali"</item>
- <item msgid="8265110906352372092">"Sveglia"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Accessibilità"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Chiamata"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistema"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Suoneria"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Supporti multimediali"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Sveglia"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Notifica"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Frequenza multipla dual tone"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Accessibilità"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Tocca per riattivare l\'audio."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Tocca per attivare la vibrazione. L\'audio dei servizi di accessibilità può essere disattivato."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tocca per disattivare l\'audio. L\'audio dei servizi di accessibilità può essere disattivato."</string>
@@ -468,7 +472,7 @@
<string name="quick_settings" msgid="10042998191725428">"Impostazioni rapide"</string>
<string name="status_bar" msgid="4877645476959324760">"Barra di stato"</string>
<string name="overview" msgid="4018602013895926956">"Panoramica"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Modalità demo"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Modalità demo dell\'interfaccia utente di sistema"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Attiva modalità demo"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Mostra modalità demo"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -508,20 +512,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"On"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Off"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"I controlli di gestione delle notifiche ti consentono di impostare un livello di importanza compreso tra 0 e 5 per le notifiche di un\'app. \n\n"<b>"Livello 5"</b>" \n- Mostra in cima all\'elenco di notifiche \n- Consenti l\'interruzione a schermo intero \n- Visualizza sempre \n\n"<b>"Livello 4"</b>" \n- Impedisci l\'interruzione a schermo intero \n- Visualizza sempre \n\n"<b>"Livello 3"</b>" \n- Impedisci l\'interruzione a schermo intero \n- Non visualizzare mai \n\n"<b>"Livello 2"</b>" \n- Impedisci l\'interruzione a schermo intero \n- Non visualizzare mai \n- Non emettere mai suoni e vibrazioni \n\n"<b>"Livello 1"</b>" \n- Impedisci l\'interruzione a schermo intero \n- Non visualizzare mai \n- Non emettere mai suoni e vibrazioni \n- Nascondi da schermata di blocco e barra di stato \n- Mostra in fondo all\'elenco di notifiche \n\n"<b>"Livello 0"</b>" \n- Blocca tutte le notifiche dell\'app"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Importanza: automatica"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Importanza: livello 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Importanza: livello 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Importanza: livello 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Importanza: livello 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Importanza: livello 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Importanza: livello 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"L\'app stabilisce l\'importanza di ogni notifica."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Non mostrare mai le notifiche di questa app."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"No suoni, vibraz., visualizz. o interr. schermo intero. Nascondi da schermata blocco e barra stato."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Nessun suono, vibrazione, visualizzazione o interruzione a schermo intero."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Nessuna visualizzazione o interruzione a schermo intero."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Visualizza sempre. Nessuna interruzione a schermo intero."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Visualizza sempre e consenti l\'interruzione a schermo intero."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Altre impostazioni"</string>
<string name="notification_done" msgid="5279426047273930175">"Fine"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Controlli di notifica per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -654,4 +666,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Modifica l\'ordine delle impostazioni."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Pagina <xliff:g id="ID_1">%1$d</xliff:g> di <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Espandi"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Riduci a icona"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Ignora"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Il telefono si sta scaldando"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Alcune funzioni limitate durante il raffreddamento del telefono"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Il telefono cercherà automaticamente di raffreddarsi. Puoi comunque usarlo, ma potrebbe essere più lento.\n\nUna volta raffreddato, il telefono funzionerà normalmente."</string>
</resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index b51020b..6b5b115 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -165,6 +165,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"טעינת סוללה, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> אחוז."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"הגדרות מערכת"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"התראות"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"מאגר הודעות נוספות"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"נקה התראה"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS מופעל."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"השגת GPS."</string>
@@ -186,6 +187,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"מסך נעילה."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"הגדרות"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"סקירה."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"סגור"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi כבוי."</string>
@@ -404,18 +407,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"נקה הכל"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"התחל כעת"</string>
<string name="empty_shade_text" msgid="708135716272867002">"אין הודעות"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"ייתכן שהמכשיר נמצא במעקב"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"ייתכן שהפרופיל נתון למעקב"</string>
<string name="vpn_footer" msgid="2388611096129106812">"ייתכן שהרשת נמצאת במעקב"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"ייתכן שהרשת מנוטרת"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"מעקב אחר מכשיר"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"מעקב אחר פרופיל"</string>
<string name="monitoring_title" msgid="169206259253048106">"מעקב אחר פעילות ברשת"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"רישום התנועה ברשת"</string>
<string name="disable_vpn" msgid="4435534311510272506">"השבת VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"נתק את ה-VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"המכשיר מנוהל על ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nמנהל המערכת יכול לעקוב אחר הגדרות, גישה עסקית, אפליקציות, נתונים המשויכים למכשיר ומידע על מיקום המכשיר, ולנהל אותם. למידע נוסף, פנה אל מנהל המערכת."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"המכשיר שלך מנוהל על ידי <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> משתמש באפליקציה <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> כדי לנהל את מכשירך."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"מנהל המערכת יכול לבצע מעקב ולנהל הגדרות, גישה ארגונית, אפליקציות ונתונים המשויכים למכשירך, ולמידע על מיקום המכשיר."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"למידע נוסף"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"אתה מחובר לאפליקציה <xliff:g id="VPN_APP">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"פתח את הגדרות ה-VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"מנהל המערכת הפעיל את תכונת רישום התנועה ברשת, אשר מנטרת את תנועת הנתונים במכשירך.\n\nלמידע נוסף, צור קשר עם מנהל המערכת."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"נתת לאפליקציה כלשהי הרשאה להגדיר חיבור VPN.\n\nהאפליקציה הזו יכולה לעקוב אחר הפעילות שלך ברשת ובמכשיר, כולל הודעות אימייל, אפליקציות ואתרים."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"המכשיר מנוהל על ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nמנהל המערכת יכול לעקוב אחר הגדרות, גישה עסקית, אפליקציות, נתונים המשויכים למכשיר ומידע על מיקום המכשיר, ולנהל אותם.\n\nאתה מחובר ל-VPN שיכול לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים.\n\nלמידע נוסף, פנה למנהל המערכת."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"פרופיל העבודה שלך מנוהל על ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nמנהל המערכת שלך יכול לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים.\n\nלמידע נוסף, פנה למנהל המערכת שלך.\n\nאתה מחובר גם לרשת VPN, שיכולה לעקוב אחר הפעילות שלך ברשת."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"אתה מחובר לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string>
@@ -423,7 +434,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"אתה מחובר לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת הפרטית, כולל הודעות אימייל, אפליקציות ואתרים."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"פרופיל העבודה שלך מנוהל על ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>. הוא מחובר לאפליקציה <xliff:g id="APPLICATION">%2$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת העסקית, כולל הודעות אימייל, אפליקציות ואתרים.\n\nלמידע נוסף, פנה למנהל המערכת שלך."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"פרופיל העבודה שלך מנוהל על ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>. הוא מחובר לאפליקציה <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת העסקית, כולל הודעות אימייל, אפליקציות ואתרים.\n\nאתה מחובר גם לאפליקציה <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת הפרטית."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"המכשיר שלך מנוהל על ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nמנהל המערכת שלך יכול לעקוב אחר הגדרות, גישה עסקית, אפליקציות, נתונים המשויכים למכשיר שלך ומידע על מיקום המכשיר, ולנהל אותם.\n\nאתה מחובר לאפליקציה <xliff:g id="APPLICATION">%2$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים.\n\nלמידע נוסף, פנה למנהל המערכת שלך."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"המכשיר יישאר נעול עד שתבטל את נעילתו באופן ידני"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"קבל התראות מהר יותר"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"צפה בהן לפני שתבטל נעילה"</string>
@@ -434,31 +444,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"הרחב"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"כווץ"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"המסך מוצמד"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"שומר בתצוגה עד לביטול ההצמדה. גע והחזק בו-זמנית בלחצן \'הקודם\' כדי לבטל הצמדה."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"הבנתי"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"לא, תודה"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"להסתיר<xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"יופיע מחדש בפעם הבאה שתפעיל את האפשרות בהגדרות."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"הסתר"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> מנסה לפעול בתור תיבת הדו-שיח של עוצמת הקול."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"התר"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"דחה"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> הוא תיבת הדו-שיח של עוצמת הקול"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"הקש כדי לשחזר את המקור."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"אתה משתמש בפרופיל העבודה שלך"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"שיחה"</item>
- <item msgid="5997713001067658559">"מערכת"</item>
- <item msgid="7858983209929864160">"השמע צלצול"</item>
- <item msgid="1850038478268896762">"מדיה"</item>
- <item msgid="8265110906352372092">"התראה"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"נגישות"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"שיחה"</string>
+ <string name="stream_system" msgid="7493299064422163147">"מערכת"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"צלצול"</string>
+ <string name="stream_music" msgid="9086982948697544342">"מדיה"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"שעון מעורר"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"הודעה"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"טון זוגי מרובה תדרים (DTMF)"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"נגישות"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. הקש כדי לבטל את ההשתקה."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. הקש כדי להגדיר רטט. ייתכן ששירותי הנגישות מושתקים."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. הקש כדי להשתיק. ייתכן ששירותי הנגישות מושתקים."</string>
@@ -470,7 +474,7 @@
<string name="quick_settings" msgid="10042998191725428">"הגדרות מהירות"</string>
<string name="status_bar" msgid="4877645476959324760">"שורת סטטוס"</string>
<string name="overview" msgid="4018602013895926956">"סקירה"</string>
- <string name="demo_mode" msgid="2389163018533514619">"מצב הדגמה"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"מצב הדגמה בממשק המשתמש של המערכת"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"הפעל מצב הדגמה"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"הצג מצב הדגמה"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"אתרנט"</string>
@@ -510,20 +514,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"פועל"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"כבוי"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"בעזרת פקדים של הודעות הפעלה, תוכל להגדיר רמת חשיבות מ-0 עד 5 להודעות אפליקציה. \n\n"<b>"רמה 5"</b>" \n- הצג בראש רשימת ההודעות \n- אפשר הפרעה במסך מלא \n- תמיד אפשר הצצה \n\n"<b>"רמה 4"</b>" \n- מנע הפרעה במסך מלא \n- תמיד אפשר הצצה \n\n"<b>"רמה 3"</b>" \n- מנע הפרעה במסך מלא \n- אף פעם אל תאפשר הצצה \n\n"<b>"רמה 2"</b>" \n- מנע הפרעה במסך מלא \n- אף פעם אל תאפשר הצצה \n- אף פעם אל תאפשר קול ורטט \n\n"<b>"רמה 1"</b>" \n- מנע הפרעה במסך מלא \n- אף פעם אל תאפשר הצצה \n- אף פעם אל תאפשר קול ורטט \n- הסתר ממסך הנעילה ומשורת הסטטוס \n- הצג בתחתית רשימת ההודעות \n\n"<b>"רמה 0"</b>" \n- חסום את כל ההודעות מהאפליקציה"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"חשיבות: אוטומטית"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"חשיבות: רמה 0"</string>
- <string name="min_importance" msgid="560779348928574878">"חשיבות: רמה 1"</string>
- <string name="low_importance" msgid="7571498511534140">"חשיבות: רמה 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"חשיבות: רמה 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"חשיבות: רמה 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"חשיבות: רמה 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"האפליקציה קובעת חשיבות לכל הודעה."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"לעולם אל תציג הודעות מהאפליקציה הזו."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"ללא הפרעה, הצצה, קול או רטט במסך מלא. הסתר ממסך הנעילה ומשורת הסטטוס."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"ללא הפרעה, הצצה, קול או רטט במסך מלא."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"ללא הפרעה או הצצה במסך מלא."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"תמיד אפשר הצצה. ללא הפרעה במסך מלא."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"תמיד אפשר הצצה, ואפשר הפרעה במסך מלא."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"הגדרות נוספות"</string>
<string name="notification_done" msgid="5279426047273930175">"סיום"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> פקדי הודעות"</string>
@@ -656,4 +668,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"עריכת סדר ההגדרות."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"דף <xliff:g id="ID_1">%1$d</xliff:g> מתוך <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"הרחב"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"מזער"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"סגור"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"הטלפון מתחמם"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"חלק מהתכונות מוגבלות כל עוד הטלפון מתקרר"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"קירור הטלפון ייעשה באופן אוטומטי. תוכל עדיין להשתמש בטלפון, אבל ייתכן שהוא יפעל לאט יותר.\n\nהטלפון יחזור לפעול כרגיל לאחר שיתקרר."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index a949cbf..aa52801 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -165,6 +165,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"システム設定。"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"通知。"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"通知のオーバーフロー コンテナ"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"通知を消去。"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPSが有効です。"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS取得中です。"</string>
@@ -186,6 +187,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ロック画面"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"設定"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"最近"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"閉じる"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>"</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-FiをOFFにしました。"</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"すべて消去"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"今すぐ開始"</string>
<string name="empty_shade_text" msgid="708135716272867002">"通知はありません"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"端末が監視されている可能性があります"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"プロファイルが監視されている可能性があります"</string>
<string name="vpn_footer" msgid="2388611096129106812">"ネットワークが監視されている可能性があります"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"ネットワークが監視されている可能性があります"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"端末の監視"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"プロファイルの監視"</string>
<string name="monitoring_title" msgid="169206259253048106">"ネットワーク監視"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"ネットワーク ログ"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPNを無効にする"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPNを切断"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"この端末は<xliff:g id="ORGANIZATION">%1$s</xliff:g>によって管理されています。\n\n管理者は設定、コーポレートアクセス、アプリ、端末に関連付けられたデータ、端末の位置情報を監視、管理できます。詳しくは管理者にお問い合わせください。"</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"この端末は <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>で管理されています。"</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> は <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>を使用してこの端末を管理しています。"</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"管理者は、この端末に関連付けられた設定、コーポレート アクセス、アプリ、データと、端末の位置情報を監視および管理できます。"</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"詳細"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"「<xliff:g id="VPN_APP">%1$s</xliff:g>」に接続しています。このアプリはあなたのネットワーク アクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。"</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN 設定を開く"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"管理者がネットワーク ログを有効にしているため、この端末のトラフィックは監視されています。\n\n詳しくは、管理者にお問い合わせください。"</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"アプリにVPN接続の設定を許可しました。\n\nこのアプリはあなたの端末やネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。"</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"この端末は<xliff:g id="ORGANIZATION">%1$s</xliff:g>によって管理されています。\n\n管理者は設定、コーポレートアクセス、アプリ、端末に関連付けられたデータ、端末の位置情報を監視、管理できます。\n\nVPNに接続しているため、VPNもネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。\n\n詳しくは管理者にお問い合わせください。"</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"この仕事用プロファイルは<xliff:g id="ORGANIZATION">%1$s</xliff:g>によって管理されています。\n\n管理者はあなたのネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。\n\n詳しくは管理者にお問い合わせください。\n\nVPNにも接続しているため、VPNもネットワークアクティビティを監視できます。"</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"<xliff:g id="APPLICATION">%1$s</xliff:g>に接続しています。このアプリはあなたのネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。"</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"「<xliff:g id="APPLICATION">%1$s</xliff:g>」に接続しています。このアプリはあなたの個人のネットワーク アクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。"</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"この仕事用プロファイルは<xliff:g id="ORGANIZATION">%1$s</xliff:g>によって管理され、<xliff:g id="APPLICATION">%2$s</xliff:g>に接続しています。このアプリはあなたの仕事のネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。\n\n詳しくは管理者にお問い合わせください。"</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"この仕事用プロファイルは<xliff:g id="ORGANIZATION">%1$s</xliff:g>によって管理され、<xliff:g id="APPLICATION_WORK">%2$s</xliff:g>に接続しています。このアプリはあなたの仕事のネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。\n\n<xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>にも接続しているため、個人のネットワークアクティビティも監視できます。"</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"この端末は<xliff:g id="ORGANIZATION">%1$s</xliff:g>によって管理されています。\n\n管理者は設定、コーポレートアクセス、アプリ、端末に関連付けられたデータ、端末の位置情報を監視、管理できます。\n\n<xliff:g id="APPLICATION">%2$s</xliff:g>に接続しているため、このアプリもネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。\n\n詳しくは管理者にお問い合わせください。"</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"手動でロックを解除するまでロックされたままとなります"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"通知をすばやく確認できます"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"ロックを解除する前にご確認ください"</string>
@@ -432,31 +442,23 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"展開"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"折りたたむ"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"画面が固定されました"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"固定を解除するまで画面が常に表示されるようになります。固定を解除するには [戻る] を押し続けます。"</string>
+ <string name="screen_pinning_description" msgid="8909878447196419623">"固定を解除するまで画面が常に表示されるようになります。[戻る] と [最近] を同時に押し続けると固定が解除されます。"</string>
+ <string name="screen_pinning_description_accessible" msgid="426190689254018656">"固定を解除するまで画面が常に表示されるようになります。[最近] を押し続けると固定が解除されます。"</string>
<string name="screen_pinning_positive" msgid="3783985798366751226">"はい"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"いいえ"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g>を非表示にしますか?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"次回、設定でONにすると再表示されます。"</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"非表示"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g>が音量ダイアログとして機能します。"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"許可"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"許可しない"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g>を音量ダイアログとして使用"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"タップすると元に戻ります。"</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"仕事用プロファイルを使用しています"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"通話"</item>
- <item msgid="5997713001067658559">"システム"</item>
- <item msgid="7858983209929864160">"着信音"</item>
- <item msgid="1850038478268896762">"メディア"</item>
- <item msgid="8265110906352372092">"アラーム"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"ユーザー補助機能"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"発信"</string>
+ <string name="stream_system" msgid="7493299064422163147">"システム"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"着信音"</string>
+ <string name="stream_music" msgid="9086982948697544342">"メディア"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"アラーム"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"通知"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"デュアルトーン マルチ周波数"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"ユーザー補助機能"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s。タップしてミュートを解除します。"</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s。タップしてバイブレーションに設定します。ユーザー補助機能サービスがミュートされる場合があります。"</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s。タップしてミュートします。ユーザー補助機能サービスがミュートされる場合があります。"</string>
@@ -468,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"クイック設定"</string>
<string name="status_bar" msgid="4877645476959324760">"ステータスバー"</string>
<string name="overview" msgid="4018602013895926956">"概要"</string>
- <string name="demo_mode" msgid="2389163018533514619">"デモモード"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"システム UI デモモード"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"デモモードを有効にする"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"デモモードを表示"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"イーサネット"</string>
@@ -508,20 +510,17 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"ON"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"OFF"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"電源通知管理では、アプリの通知の重要度をレベル 0~5 で設定できます。\n\n"<b>"レベル 5"</b>" \n- 通知リストの一番上に表示する \n- 全画面表示を許可する \n- 常にポップアップする \n\n"<b>"レベル 4"</b>" \n- 全画面表示しない \n- 常にポップアップする \n\n"<b>"レベル 3"</b>" \n- 全画面表示しない \n- ポップアップしない \n\n"<b>"レベル 2"</b>" \n- 全画面表示しない \n- ポップアップしない \n- 音やバイブレーションを使用しない \n\n"<b>"レベル 1"</b>" \n- 全画面表示しない \n- ポップアップしない \n- 音やバイブレーションを使用しない \n- ロック画面やステータスバーに表示しない \n- 通知リストの一番下に表示する \n\n"<b>"レベル 0"</b>" \n- アプリからのすべての通知をブロックする"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"重要度: 自動"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"重要度: レベル 0"</string>
- <string name="min_importance" msgid="560779348928574878">"重要度: レベル 1"</string>
- <string name="low_importance" msgid="7571498511534140">"重要度: レベル 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"重要度: レベル 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"重要度: レベル 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"重要度: レベル 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"アプリが通知ごとに重要度を識別する"</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"このアプリからの通知を表示しない"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"全画面表示、ポップアップ、音、バイブレーションを使用しない。ロック画面やステータスバーにも表示しない"</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"全画面表示、ポップアップ、音、バイブレーションを使用しない"</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"全画面表示やポップアップを使用しない"</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"常にポップアップし、全画面表示はしない"</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"常にポップアップし、全画面表示も許可する"</string>
+ <string name="notification_header_default_channel" msgid="7506845022070889909">"通知"</string>
+ <string name="notification_channel_disabled" msgid="5805874247999578073">"今後、この通知は配信されません。"</string>
+ <string name="notification_importance_header_app" msgid="3572576545406258751">"「<xliff:g id="APP">%s</xliff:g>」からの通知"</string>
+ <string name="min_importance" msgid="7559703098688382595">"低"</string>
+ <string name="low_importance" msgid="6891335321576225228">"中"</string>
+ <string name="default_importance" msgid="6400766013567512061">"高"</string>
+ <string name="high_importance" msgid="730741630855788381">"緊急"</string>
+ <string name="notification_importance_min" msgid="3237794091374404537">"音声や画面表示を使用しない"</string>
+ <string name="notification_importance_low" msgid="8929105501798019743">"マナーモードで表示する"</string>
+ <string name="notification_importance_default" msgid="9025125660733917469">"音声で知らせる"</string>
+ <string name="notification_importance_high" msgid="3316555356062640222">"音声とポップアップで知らせる"</string>
<string name="notification_more_settings" msgid="816306283396553571">"詳細設定"</string>
<string name="notification_done" msgid="5279426047273930175">"完了"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」の通知の管理"</string>
@@ -654,4 +653,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"設定の順序を編集します。"</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"ページ <xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"展開"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"最小化"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"閉じる"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"スマートフォンの温度が上昇中"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"スマートフォンのクールダウン中は一部の機能が制限されます"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"スマートフォンは自動的にクールダウンを行います。その間もスマートフォンを使用できますが、動作が遅くなる可能性があります。\n\nクールダウンが完了すると、通常どおり動作します。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ka-rGE-land/strings.xml b/packages/SystemUI/res/values-ka-rGE-land/strings.xml
deleted file mode 100644
index 3f20938..0000000
--- a/packages/SystemUI/res/values-ka-rGE-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"ეკრანი ამჟამად დაბლოკილია თარაზულ ორიენტაციაში"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ka-rGE/config.xml b/packages/SystemUI/res/values-ka/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-ka-rGE/config.xml
rename to packages/SystemUI/res/values-ka/config.xml
diff --git a/packages/SystemUI/res/values-ka-rGE/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
similarity index 91%
rename from packages/SystemUI/res/values-ka-rGE/strings.xml
rename to packages/SystemUI/res/values-ka/strings.xml
index 41de915..bb73c4b 100644
--- a/packages/SystemUI/res/values-ka-rGE/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"ბატარეა იტენება, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> პროცენტი."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"სისტემის პარამეტრები."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"შეტყობინებები"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"შეტყობინების გადავსების კონტეინერი"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"შეტყობინებების გასუფთავება."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS გააქტიურდა."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS-ის დადგენა."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ეკრანის დაბლოკვა."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"პარამეტრები"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"მიმოხილვა"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"დახურვა"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi გამორთულია."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"ყველას გასუფთავება"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"დაწყება ახლავე"</string>
<string name="empty_shade_text" msgid="708135716272867002">"შეტყობინებები არ არის."</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"შესაძლოა მოწყობილობის მონიტორინგი არ ხორციელდება"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"შესაძლოა პროფილზე ხორციელდებოდეს მონიტორინგი"</string>
<string name="vpn_footer" msgid="2388611096129106812">"შესაძლოა ქსელზე ხორციელდება მონიტორინგი"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"ქსელზე შესაძლოა მონიტორინგი ხორციელდებოდეს"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"მოწყობილობის მონიტორინგი"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"პროფილის მონიტორინგი"</string>
<string name="monitoring_title" msgid="169206259253048106">"ქსელის მონიტორინგი"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"ქსელის ჟურნალირება"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN-ის გაუქმება"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN-ის გათიშვა"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"თქვენ მოწყობილობას მართავს <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nთქვენს ადმინისტრატორს შეუძლია ამ მოწყობილობასთან ასოცირებული პარამეტრების, კორპორატიული წვდომის, აპებისა და მონაცემების, მათ შორის, ქსელის აქტივობისა და თქვენი მოწყობილობის მდებარეობის ინფორმაციის მონიტორინგი და მართვა. დამატებითი ინფორმაციისათვის, დაუკავშირდით თქვენს ადმინისტრატორს."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"თქვენს მოწყობილობას მართავს <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> იყენებს <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>-ს თქვენი მოწყობილობის სამართავად."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"თქვენს ადმინისტრატორს შეუძლია მოწყობილობასთან დაკავშირებული პარამეტრების, კორპორატიული წვდომის, აპებისა და მონაცემების, მათ შორის, თქვენი მოწყობილობის მდებარეობის ინფორმაციის, მონიტორინგი და მართვა."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"შეიტყვეთ მეტი"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"თქვენ დაუკავშირდით <xliff:g id="VPN_APP">%1$s</xliff:g>-ს, რომელსაც თქვენი ქსელის აქტივობის, მათ შორის, ელფოსტის, აპებისა და ვებსაიტების, მონიტორინგი შეუძლია."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN-ის პარამეტრების გახსნა"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"თქვენმა ადმინისტრატორმა ქსელის ჟურნალირება ჩართო, რომელიც თქვენი მოწყობილობის ტრაფიკის მონიტორინგს ახორციელებს.\n\nდამატებითი ინფორმაციისთვის დაუკავშირდით თქვენს ადმინისტრატორს."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"თქვენ მიეცით ნებართვა აპს, დააყენოს VPN კავშირი.\n\nამ აპს შეუძლია თქვენი მოწყობილობის და ქსელის აქტივობის, მათ შორის, ელფოსტის, აპებისა და ვებსაიტების მონიტორინგი."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"თქვენ მოწყობილობას მართავს <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nთქვენს ადმინისტრატორს შეუძლია ამ მოწყობილობასთან ასოცირებული პარამეტრების, კორპორატიული წვდომის, აპებისა და მონაცემების, და ასევე თქვენი მოწყობილობის მდებარეობის ინფორმაციის მონიტორინგი და მართვა.\n\nთქვენ ასევე დაკავშირებული ხართ VPN-თან, რომელსაც შეუძლია თქვენი ქსელის აქტივობის, მათ შორის, ელფოსტის, აპების და ვებსაიტების მონიტორინგი.\n\nდამატებითი ინფორმაციისათვის, დაუკავშირდით თქვენს ადმინისტრატორს."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"თქვენს სამუშაო პროფილს მართავს <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nთქვენს ადმინისტრატორს შეუძლია თქვენი ქსელის აქტივობის მონიტორინგი, მათ შორის, ელფოსტის, აპებისა და ვებ-საიტების.\n\nდამატებითი ინფორმაციისთვის, დაუკავშირდით თქვენს ადმინისტრატორს.\n\nთქვენ ასევე დაკავშირებული ხართ VPN-თან, რომელსაც შეუძლია თქვენი ქსელის აქტივობის მონიტორინგი."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"თქვენ დაუკავშირდით <xliff:g id="APPLICATION">%1$s</xliff:g>-ს, რომელსაც შეუძლია თქვენი ქსელის აქტივობის, მათ შორის, ელფოსტის, აპებისა და ვებსაიტების მონიტორინგი."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"თქვენ დაუკავშირდით <xliff:g id="APPLICATION">%1$s</xliff:g>-ს, რომელსაც თქვენი პირადი ქსელის აქტივობის მონიტორინგი შეუძლია, მათ შორის, ელფოსტის, აპებისა და ვებსაიტების."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"თქვენი სამუშაო პროფილი <xliff:g id="ORGANIZATION">%1$s</xliff:g>-ის მიერ იმართება. ის დაკავშირებულია <xliff:g id="APPLICATION">%2$s</xliff:g>-თან, რომელსაც შეუძლია თქვენი სამსახურის ქსელის აქტივობის, მათ შორის, ელფოსტის, აპებისა და ვებსაიტების მონიტორინგი.\n\nდამატებითი ინფორმაციისთვის მიმართეთ თქვენს ადმინისტრატორს."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"თქვენი სამუშაო პროფილი <xliff:g id="ORGANIZATION">%1$s</xliff:g>-ის მიერ იმართება. ის დაკავშირებულია <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>-თან, რომელსაც შეუძლია თქვენი სამსახურის ქსელის აქტივობის, მათ შორის, ელფოსტის, აპებისა და ვებსაიტების მონიტორინგი.\n\nასევე, დაკავშირებული ხართ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>-თან, რომელსაც შეუძლია თქვენი პირადი ქსელის აქტივობის მონიტორინგი."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"თქვენს მოწყობილობას მართავს <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nადმინისტრატორს შეუძლია თქვენი მოწყობილობასთან ასოცირებული პარამეტრების, კორპორატიული წვდომის, აპებისა და მონაცემების, და ასევე მოწყობილობის მდებარეობის ინფორმაციის მონიტორინგი და მართვა.\n\nთქვენ დაკავშირებული ხართ <xliff:g id="APPLICATION">%2$s</xliff:g>-თან, რომელსაც შეუძლია თქვენი ქსელის აქტივობის, მათ შორის, ელფოსტის, აპებისა და ვებ-საიტების მონიტორინგი.\n\nდამატებითი ინფორმაციისათვის, დაუკავშირდით თქვენს ადმინისტრატორს."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"მოწყობილობის დარჩება ჩაკეტილი, სანამ ხელით არ გახსნით"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"შეტყობინებების უფრო სწრაფად მიღება"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"იხილეთ განბლოკვამდე"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"გავრცობა"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"ჩაკეცვა"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"ეკრანი ჩამაგრებულია"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"ამით ის ხედში ჩამაგრების მოხსნამდე დარჩება. ჩამაგრების მოსახსნელად, ხანგრძლივად დააჭირეთ „უკან“-ს."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"გასაგებია"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"არა, გმადლობთ"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"დაიმალოს <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"ის კვლავ გამოჩნდება, როდესაც პარამეტრებში ჩართავთ"</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"დამალვა"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> სურს იყოს ხმოვან დიალოგში."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"უფლების მიცემა"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"უარყოფა"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ხმოვან დიალოგშია"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"შეეხეთ ორიგინალის აღსადგენად."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"თქვენ სამსახურის პროფილს იყენებთ"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"დარეკვა"</item>
- <item msgid="5997713001067658559">"სისტემა"</item>
- <item msgid="7858983209929864160">"ზარი"</item>
- <item msgid="1850038478268896762">"მედია"</item>
- <item msgid="8265110906352372092">"მაღვიძარა"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"მარტივი წვდომა"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"დარეკვა"</string>
+ <string name="stream_system" msgid="7493299064422163147">"სისტემა"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"დარეკვა"</string>
+ <string name="stream_music" msgid="9086982948697544342">"მედია"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"მაღვიძარა"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"შეტყობინება"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"ტონალური აკრეფა"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"მარტივი წვდომა"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. შეეხეთ დადუმების გასაუქმებლად."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. შეეხეთ ვიბრაციაზე დასაყენებლად. შეიძლება დადუმდეს მარტივი წვდომის სერვისებიც."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. შეეხეთ დასადუმებლად. შეიძლება დადუმდეს მარტივი წვდომის სერვისებიც."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"სწრაფი პარამეტრები"</string>
<string name="status_bar" msgid="4877645476959324760">"სტატუსის ზოლი"</string>
<string name="overview" msgid="4018602013895926956">"მიმოხილვა"</string>
- <string name="demo_mode" msgid="2389163018533514619">"დემო-რეჟიმი"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"სისტემის UI-ს დემო-რეჟიმი"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"დემო-რეჟიმის ჩართვა"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"დემო-რეჟიმის ჩვენება"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"ეთერნეტი"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"ჩართული"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"გამორთული"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"შეტყობინებების მართვის საშუალებების მეშვეობით, შეგიძლიათ განსაზღვროთ აპის შეტყობინებების მნიშვნელობის დონე 0-დან 5-მდე დიაპაზონში. \n\n"<b>"დონე 5"</b>" \n— შეტყობინებათა სიის თავში ჩვენება \n— სრულეკრანიანი რეჟიმის შეფერხების დაშვება \n— ეკრანზე ყოველთვის გამოჩენა \n\n"<b>"დონე 4"</b>" \n— სრულეკრანიანი რეჟიმის შეფერხების აღკვეთა \n— ეკრანზე ყოველთვის გამოჩენა \n\n"<b>"დონე 3"</b>" \n— სრულეკრანიანი რეჟიმის შეფერხების აღკვეთა \n— ეკრანზე გამოჩენის აღკვეთა \n\n"<b>"დონე 2"</b>" \n— სრულეკრანიანი რეჟიმის შეფერხების აღკვეთა \n— ეკრანზე გამოჩენის აღკვეთა \n— ხმისა და ვიბრაციის აღკვეთა \n\n"<b>"დონე 1"</b>" \n— სრულეკრანიანი რეჟიმის შეფერხების აღკვეთა \n— ეკრანზე გამოჩენის აღკვეთა \n— ხმისა და ვიბრაციის აღკვეთა \n— ჩაკეტილი ეკრანიდან და სტატუსის ზოლიდან დამალვა \n— შეტყობინებათა სიის ბოლოში ჩვენება \n\n"<b>"დონე 0"</b>" \n— აპის ყველა შეტყობინების დაბლოკვა"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"მნიშვნელოვნობა: ავტომატური"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"მნიშვნელოვნობა: დონე 0"</string>
- <string name="min_importance" msgid="560779348928574878">"მნიშვნელოვნობა: დონე 1"</string>
- <string name="low_importance" msgid="7571498511534140">"მნიშვნელოვნობა: დონე 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"მნიშვნელოვნობა: დონე 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"მნიშვნელოვნობა: დონე 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"მნიშვნელოვნობა: დონე 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"თითოეული შეტყობინების მნიშვნელობის დონე აპის მიერ განისაზღვრება."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"ამ აპისთვის შეტყობინებების ჩვენების აღკვეთა."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"სრულეკრანიანი რეჟიმის შეფერხების, ეკრანზე გამოჩენის, ხმისა და ვიბრაციის გარეშე. ჩაკეტილი ეკრანიდან და სტატუსის ზოლიდან დამალვა."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"სრულეკრანიანი რეჟიმის შეფერხების, ეკრანზე გამოჩენის, ხმისა და ვიბრაციის გარეშე."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"სრულეკრანიანი რეჟიმის შეფერხებისა და ეკრანზე გამოჩენის გარეშე."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"ეკრანზე ყოველთვის გამოჩენა, სრულეკრანიანი რეჟიმის შეფერხების გარეშე."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"ეკრანზე ყოველთვის გამოჩენა, სრულეკრანიანი რეჟიმის შეფერხების დაშვებით."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"დამატებითი პარამეტრები"</string>
<string name="notification_done" msgid="5279426047273930175">"მზადაა"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> შეტყობინებების მართვის საშუალებები"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"პარამეტრების მიმდევრობის რედაქტირება."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"გვერდი <xliff:g id="ID_1">%1$d</xliff:g> / <xliff:g id="ID_2">%2$d</xliff:g>-დან"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"გაშლა"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"ჩაკეცვა"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"დახურვა"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"ტელეფონი ცხელდება"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"ზოგიერთი ფუნქცია შეზღუდული იქნება, სანამ ტელეფონი გაგრილდება"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"თქვენი ტელეფონი გაგრილებას ავტომატურად შეეცდება. შეგიძლიათ გააგრძელოთ მისით სარგებლობა, თუმცა ტელეფონმა შეიძლება უფრო ნელა იმუშაოს.\n\nგაგრილების შემდგომ ის ჩვეულებრივად იმუშავებს."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ka-rGE/strings_car.xml b/packages/SystemUI/res/values-ka/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-ka-rGE/strings_car.xml
rename to packages/SystemUI/res/values-ka/strings_car.xml
diff --git a/packages/SystemUI/res/values-ka-rGE/strings_tv.xml b/packages/SystemUI/res/values-ka/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-ka-rGE/strings_tv.xml
rename to packages/SystemUI/res/values-ka/strings_tv.xml
diff --git a/packages/SystemUI/res/values-kk-rKZ-land/strings.xml b/packages/SystemUI/res/values-kk-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-kk-rKZ-land/strings.xml
rename to packages/SystemUI/res/values-kk-land/strings.xml
diff --git a/packages/SystemUI/res/values-kk-rKZ/config.xml b/packages/SystemUI/res/values-kk/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-kk-rKZ/config.xml
rename to packages/SystemUI/res/values-kk/config.xml
diff --git a/packages/SystemUI/res/values-kk-rKZ/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
similarity index 92%
rename from packages/SystemUI/res/values-kk-rKZ/strings.xml
rename to packages/SystemUI/res/values-kk/strings.xml
index 0f9699a..f5bf5f5 100644
--- a/packages/SystemUI/res/values-kk-rKZ/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Батарея зарядталуда, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> пайыз."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Жүйе параметрлері."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Хабарлар."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Хабарландырулардың қосымша контейнері"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Хабарларды өшіру."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS қосылған."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS қыземтін шығару."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Бекіту экраны."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Параметрлер"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Шолу."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Жабу"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi өшірілді."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Барлығын тазалау"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Қазір бастау"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Хабарландырулар жоқ"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Құрылғы бақылануы мүмкін"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Профиль бақылануы мүмкін"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Желі бақылауда болуы мүмкін"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Желі бақылауда болуы мүмкін"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Құрылғыны бақылау"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Профильді бақылау"</string>
<string name="monitoring_title" msgid="169206259253048106">"Желіні бақылау"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN (Виртуалды жеке желі)"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Желі журналын жүргізу"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN функциясын өшіру"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN желісін ажырату"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Құрылғыңызды басқаратын:<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nСіздің әкімшіңіз параметрлерді, корпоративтік мүмкіндікті, қолданбаларды, құрылғыңызбен байланысты деректерді және құрылғыңыздың орналасуы туралы ақпаратты қадағалай алады. Қосымша ақпарат алу үшін әкімшіге хабарласыңыз."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Құрылғыңызды <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> басқарады."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> құрылғыны <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> қолданбасымен басқарады."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Әкімші параметрлерді, корпоративтік кіру құқығын, қолданбаларды, құрылғыға қатысты деректерді, құрылғының орналасқан жер ақпаратын бақылай және басқара алады."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Толығырақ"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Желідегі әрекеттерді, соның ішінде электрондық хабарларды, қолданбаларды және вебсайттарды бақылайтын <xliff:g id="VPN_APP">%1$s</xliff:g> қолданбасына қосылдыңыз."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN параметрлерін ашу"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Әкімші құрылғыдағы трафикті қадағалау үшін желі журналын жүргізуді қосып қойған.\n\nТолығырақ ақпарат алу үшін әкімшімен хабарласыңыз."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Қолданбаға VPN байланысын орнату рұқсатын бердіңіз.\n\nБұл қолданба құрылғыңызды және желідегі белсенділігіңізді, соның ішінде электрондық пошталарды, қолданбаларды және веб-сайттарды бақылай алады."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Құрылғыңызды басқаратын:<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nСіздің әкімшіңіз параметрлерді, корпоративтік мүмкіндікті, қолданбаларды, құрылғыңызбен байланысты деректерді және құрылғыңыздың орналасуы туралы ақпаратты қадағалай алады.\n\nСіз электрондық пошта, қолданбалар және сайттарды қосқандағы желілік әрекеттеріңізді бақылай алатын VPN желісіне қосылдыңыз.\n\nҚосымша ақпарат алу үшін әкімшіге хабарласыңыз."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Жұмыс профиліңізді <xliff:g id="ORGANIZATION">%1$s</xliff:g> басқарады.\n\nӘкімші желідегі белсенділігіңізді, соның ішінде электрондық пошталарды, қолданбаларды және веб-сайттарды бақылай алады.\n\nҚосымша ақпарат алу үшін әкімшіге хабарласыңыз.\n\nСондай-ақ сіз желідегі белсенділігіңізді бақылай алатын VPN желісіне қосылғансыз."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Сіз желідегі белсенділігіңізді, соның ішінде электрондық пошталарды, қолданбаларды және веб-сайттарды бақылай алатын <xliff:g id="APPLICATION">%1$s</xliff:g> қолданбасына қосылғансыз."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Жеке желідегі әрекеттеріңізді, соның ішінде электрондық пошта хабарларын, қолданбаларды және вебсайттарды бақылай алатын <xliff:g id="APPLICATION">%1$s</xliff:g> қолданбасына қосылғансыз."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Жұмыс профиліңізді <xliff:g id="ORGANIZATION">%1$s</xliff:g> басқарады. Ол жұмыс кезінде желідегі белсенділігіңізді, соның ішінде электрондық пошталарды, қолданбаларды және веб-сайттарды бақылай алатын <xliff:g id="APPLICATION">%2$s</xliff:g> қолданбасына қосылған.\n\nҚосымша ақпарат алу үшін әкімшіге хабарласыңыз."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Жұмыс профиліңізді <xliff:g id="ORGANIZATION">%1$s</xliff:g> басқарады. Ол желідегі белсенділігіңізді, соның ішінде электрондық пошталарды, қолданбаларды және веб-сайттарды бақылай алатын <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> қолданбасына қосылған.\n\nСондай-ақ сіз желідегі жеке белсенділігіңізді бақылай алатын <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> қолданбасына қосылғансыз."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Құрылғыңызды <xliff:g id="ORGANIZATION">%1$s</xliff:g> басқарады.\n\nӘкімші параметрлерді, корпоративтік рұқсатты, қолданбаларды, құрылғыңызбен байланысты деректерді және құрылғының орны туралы ақпаратты бақылай және басқара алады.\n\nСіз желідегі белсенділігіңізді, соның ішінде электрондық пошталарды, қолданбаларды және евб-сайттарды бақылай алатын <xliff:g id="APPLICATION">%2$s</xliff:g> қолданбасына қосылғансыз.\n\nҚосымша ақпарат алу үшін әкімшіге хабарласыңыз."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Қолмен бекітпесін ашқанша құрылғы бекітілген күйде қалады"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Хабарландыруларды тезірек алу"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Бекітпесін ашу алдында оларды көру"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Жаю"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Жию"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Экран түйрелді"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Бұл оны босатылғанға дейін көрсетіп тұрады. Босату үшін \"Кері\" түймесін басып тұрыңыз."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Түсіндім"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Жоқ, рақмет"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> жасыру керек пе?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ол сіз оны параметрлерде келесі қосқанда қайта пайда болады."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Жасыру"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> көлем диалогтық терезесі болғысы келеді."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Рұқсат беру"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Өшіру"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> — көлем диалогтық терезесі"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Бастапқы қалпына келтіру үшін түртіңіз."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Сіз жұмыс профиліңізді пайдаланып жатырсыз"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Қоңырау шалу"</item>
- <item msgid="5997713001067658559">"Жүйе"</item>
- <item msgid="7858983209929864160">"Шылдырлау"</item>
- <item msgid="1850038478268896762">"Мультимeдиа"</item>
- <item msgid="8265110906352372092">"Дабыл"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Арнайы мүмкіндіктер"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Қоңырау шалу"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Жүйе"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Шылдырлау"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Мультимедиа"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Дабыл"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Хабарландыру"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Қос үнді көп жиілік"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Арнайы мүмкіндіктер"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Дыбысын қосу үшін түртіңіз."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Діріл режимін орнату үшін түртіңіз. Арнайы мүмкіндік қызметтерінің дыбысы өшуі мүмкін."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Дыбысын өшіру үшін түртіңіз. Арнайы мүмкіндік қызметтерінің дыбысы өшуі мүмкін."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Жылдам параметрлер"</string>
<string name="status_bar" msgid="4877645476959324760">"Күйін көрсету жолағы"</string>
<string name="overview" msgid="4018602013895926956">"Шолу"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Демо режимі"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Жүйе интерфейсінің демо режимі"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Демо режимін қосу"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Демо режимін көрсету"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Қосулы"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Өшірулі"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Қуат хабарландыруының басқару элементтерімен қолданбаның хабарландырулары үшін 0-ден бастап 5-ке дейін маңыздылық деңгейін орнатуға болады. \n\n"<b>"5-деңгей"</b>" \n- Хабарландыру тізімінің ең басында көрсету \n- Толық экранға ашылуын рұқсат ету \n- Әрдайым қалқымалы хабарландыру түрінде көрсету \n\n"<b>"4-деңгей"</b>" \n- Толық экранға шығармау \n- Әрдайым қалқымалы хабарландыру түрінде көрсету \n\n"<b>"3-деңгей"</b>" \n- Толық экранға шығармау \n- Ешқашан қалқымалы хабарландыру түрінде көрсетпеу \n\n"<b>"2-деңгей"</b>" \n- Толық экранға шығармау \n- Ешқашан қалқымалы хабарландыру түрінде көрсетпеу \n- Ешқашан дыбыс және діріл шығармау \n\n"<b>"1-деңгей"</b>" \n- Толық экранға шығармау \n- Ешқашан қалқымалы хабарландыру түрінде көрсетпеу \n- Ешқашан дыбыс немесе діріл шығармау \n- Құлыпталған экраннан және күйін көрсету жолағынан жасыру \n- Хабарландыру тізімінің ең астында көрсету \n\n"<b>"0-деңгей"</b>" \n- Қолданбадағы барлық хабарландыруларға тыйым салу"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Маңыздылығы: Автоматты"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Маңыздылығы: 0-деңгей"</string>
- <string name="min_importance" msgid="560779348928574878">"Маңыздылығы: 1-деңгей"</string>
- <string name="low_importance" msgid="7571498511534140">"Маңыздылығы: 2-деңгей"</string>
- <string name="default_importance" msgid="7609889614553354702">"Маңыздылығы: 3-деңгей"</string>
- <string name="high_importance" msgid="3441537905162782568">"Маңыздылығы: 4-деңгей"</string>
- <string name="max_importance" msgid="4880179829869865275">"Маңыздылығы: 5-деңгей"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Қолданба әрбір хабарландырудың маңыздылығын анықтайды."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Осы қолданбадан келген хабарландыруларды ешқашан көрсетпеу"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Экранды толық алатын, қалқымалы хабарландыруларды көрсетпеу, дыбыс және діріл шығармау. Құлыпталған экраннан және күйін көрсету жолағынан жасыру."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Экранды толық алатын, қалқымалы хабарландыруларды көрсетпеу, дыбыс және діріл шығармау."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Экранды толық алатын немесе қалқымалы хабарландыруларды көрсетпеу."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Әрдайым қалқымалы хабарландыруларды көрсету, бірақ толық экранға шығармау."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Әрдайым қалқымалы және экранды толық алатын хабарландыруларға рұқсат ету."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Қосымша параметрлер"</string>
<string name="notification_done" msgid="5279426047273930175">"Дайын"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> хабарландыруларды басқару элементтері"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Параметрлер тәртібін өзгерту."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_2">%2$d</xliff:g> ішінен <xliff:g id="ID_1">%1$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Жаю"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Кішірейту"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Қабылдамау"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Телефон қызуда"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Телефон толық суығанға дейін, кейбір функциялардың жұмысы шектеледі"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Телефон автоматты түрде суи бастайды. Оны пайдалана бере аласыз, бірақ ол баяуырақ жұмыс істеуі мүмкін.\n\nТелефон суығаннан кейін, оның жұмысы қалпына келеді."</string>
</resources>
diff --git a/packages/SystemUI/res/values-kk-rKZ/strings_car.xml b/packages/SystemUI/res/values-kk/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-kk-rKZ/strings_car.xml
rename to packages/SystemUI/res/values-kk/strings_car.xml
diff --git a/packages/SystemUI/res/values-kk-rKZ/strings_tv.xml b/packages/SystemUI/res/values-kk/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-kk-rKZ/strings_tv.xml
rename to packages/SystemUI/res/values-kk/strings_tv.xml
diff --git a/packages/SystemUI/res/values-km-rKH-land/strings.xml b/packages/SystemUI/res/values-km-rKH-land/strings.xml
deleted file mode 100644
index f148cc3..0000000
--- a/packages/SystemUI/res/values-km-rKH-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"ឥឡូវអេក្រង់ជាប់សោក្នុងទិសផ្ដេក។"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-km-rKH/config.xml b/packages/SystemUI/res/values-km/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-km-rKH/config.xml
rename to packages/SystemUI/res/values-km/config.xml
diff --git a/packages/SystemUI/res/values-km-rKH/strings.xml b/packages/SystemUI/res/values-km/strings.xml
similarity index 92%
rename from packages/SystemUI/res/values-km-rKH/strings.xml
rename to packages/SystemUI/res/values-km/strings.xml
index 4ad9ac8..e160283 100644
--- a/packages/SystemUI/res/values-km-rKH/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"កំពុងសាកថ្ម <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> ភាគរយ"</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"ការកំណត់ប្រព័ន្ធ។"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"ការជូនដំណឹង។"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"អង្គផ្ទុកបន្ថែមសម្រាប់ការជូនដំណឹង"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"សម្អាតការជូនដំណឹង។"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"បានបើក GPS ។"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"ទទួល GPS ។"</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ចាក់សោអេក្រង់។"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"ការកំណត់"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"ទិដ្ឋភាព។"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"បិទ"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"បានបិទវ៉ាយហ្វាយ។"</string>
@@ -351,7 +354,7 @@
<string name="notification_tap_again" msgid="7590196980943943842">"ប៉ះម្ដងទៀត ដើម្បីបើក"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"អូសឡើងលើ ដើម្បីដោះសោ"</string>
<string name="do_disclosure_generic" msgid="8498005633306135779">"ឧបករណ៍នេះស្ថិតក្រោមការគ្រប់គ្រង"</string>
- <string name="do_disclosure_with_name" msgid="5640615509915445501">"ឧបករណ៍នេះត្រូវបានគ្រប់គ្រងដោយ <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
+ <string name="do_disclosure_with_name" msgid="5640615509915445501">"ឧបករណ៍នេះស្ថិតក្រោមការគ្រប់គ្រងរបស់ <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
<string name="phone_hint" msgid="4872890986869209950">"អូសចេញពីរូបតំណាងដើម្បីប្រើទូរស័ព្ទ"</string>
<string name="voice_hint" msgid="8939888732119726665">"អូសចេញពីរូបតំណាងដើម្បីប្រើជំនួយសំឡេង"</string>
<string name="camera_hint" msgid="7939688436797157483">"អូសចេញពីរូបតំណាងដើម្បីប្រើកាមេរ៉ា"</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"សម្អាតទាំងអស់"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"ចាប់ផ្ដើមឥឡូវ"</string>
<string name="empty_shade_text" msgid="708135716272867002">"គ្មានការជូនដំណឹង"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"ឧបករណ៍អាចត្រូវបានត្រួតពិនិត្យ"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"ប្រវត្តិរូបអាចត្រូវបានតាមដាន"</string>
<string name="vpn_footer" msgid="2388611096129106812">"បណ្ដាញអាចត្រូវបានត្រួតពិនិត្យ"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"បណ្ដាញអាចត្រូវបានត្រួតពិនិត្យ"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"ការត្រួតពិនិត្យឧបករណ៍"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"តាមដានប្រវត្ថិរូប"</string>
<string name="monitoring_title" msgid="169206259253048106">"ការត្រួតពិនិត្យបណ្ដាញ"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"ការធ្វើកំណត់ហេតុបណ្តាញ"</string>
<string name="disable_vpn" msgid="4435534311510272506">"បិទ VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"ផ្ដាច់ VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"ឧបករណ៍របស់អ្នកត្រូវបានគ្រប់គ្រងដោយ៖ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nអ្នកគ្រប់គ្រងរបស់អ្នកអាចឃ្លាំមើល និងគ្រប់គ្រងការកំណត់ ការចូលដំណើរការជាក្រុម កម្មវិធី ទិន្នន័យដែលជាប់ទាក់ទងនឹងឧបករណ៍របស់អ្នក និងព័ត៌មានទីតាំងនៃឧបករណ៍របស់អ្នក។ សម្រាប់ព័ត៌មានបន្ថែម សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក។"</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"ឧបករណ៍របស់អ្នកគ្រប់គ្រងដោយ <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ។"</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ប្រើប្រាស់ <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ដើម្បីគ្រប់គ្រងឧបករណ៍របស់អ្នក។"</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"អ្នកគ្រប់គ្រងរបស់អ្នកអាចតាមដាន និងគ្រប់គ្រងការកំណត់ ការចូលលក្ខណៈក្រុមហ៊ុន កម្មវិធី ទិន្នន័យពាក់ព័ន្ធនឹងឧបករណ៍របស់អ្នក និងព័ត៌មានទីតាំងឧបករណ៍របស់អ្នក។"</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"ស្វែងយល់បន្ថែម"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"អ្នកបានភ្ជាប់ទៅ <xliff:g id="VPN_APP">%1$s</xliff:g> ដែលអាចតាមដានសកម្មភាពក្នុងបណ្តាញរបស់អ្នក រួមទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រផងដែរ។"</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"បើកការកំណត់ VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"អ្នកគ្រប់គ្រងរបស់អ្នកបានបើកការធ្វើកំណត់ហេតុបណ្តាញ ដែលវានឹងតាមដានចរាចរណ៍បណ្តាញនៅលើឧបករណ៍របស់អ្នក។\n\nសម្រាប់ព័ត៌មានបន្ថែម សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក។"</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"អ្នកបានអនុញ្ញាតឲ្យកម្មវិធីដំឡើងការតភ្ជាប់ VPN។\n\nកម្មវិធីនេះអាចឃ្លាំមើលឧបករណ៍ និងសកម្មភាពបណ្តាញរបស់អ្នក រាប់បញ្ចូលទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រ។"</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"ឧបករណ៍របស់អ្នកត្រូវបានគ្រប់គ្រងដោយ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nអ្នកគ្រប់គ្រងរបស់អ្នកអាចឃ្លាំមើល និងគ្រប់គ្រងការកំណត់ ការចូលដំណើរការជាក្រុម កម្មវិធី ទិន្នន័យដែលជាប់ទាក់ទងនឹងឧបករណ៍របស់អ្នក និងព័ត៌មានទីតាំងនៃឧបករណ៍របស់អ្នក។\n\nអ្នកត្រូវបានភ្ជាប់ជាមួយ VPN ដែលវាអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រួមបញ្ចូលទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រ។\n\nសម្រាប់ព័ត៌មានបន្ថែម សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក។"</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"ប្រវត្តិការងាររបស់អ្នកត្រូវបានគ្រប់គ្រងដោយ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nអ្នកគ្រប់គ្រងរបស់អ្នកមានលទ្ធភាពអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រួមបញ្ចូលទាំងអ៊ីមែល កម្មវិធី គេហទំព័រ។\n\nសម្រាប់ព័ត៌មានបន្ថែម សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក។\n\nអ្នកក៏ត្រូវបានភ្ជាប់ជាមួួយ VPN ផងដែរ ដែលវាអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក។"</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"អ្នកត្រូវបានតភ្ជាប់ទៅ <xliff:g id="APPLICATION">%1$s</xliff:g> ដែលអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រាប់បញ្ចូលទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រ។"</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"អ្នកត្រូវបានភ្ជាប់ទៅ <xliff:g id="APPLICATION">%1$s</xliff:g> ដែលអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រាប់បញ្ចូលទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រ។"</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"ប្រវត្តិរូបការងាររបស់អ្នកត្រូវបានគ្រប់គ្រងដោយ <xliff:g id="ORGANIZATION">%1$s</xliff:g>។ វាត្រូវបានតភ្ជាប់ទៅនឹង <xliff:g id="APPLICATION">%2$s</xliff:g> ដែលអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រាប់បញ្ចូលទាំងអ៊ីមែល កម្មវិធី គេហទំព័រ។\n\nសម្រាប់ព័ត៌មានបន្ថែម សូមទាក់ទងអ្នកគ្រប់គ្រប់របស់អ្នក។"</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"ប្រវត្តិរូបការងាររបស់អ្នកត្រូវបានគ្រប់គ្រងដោយ <xliff:g id="ORGANIZATION">%1$s</xliff:g>។ វាត្រូវបានតភ្ជាប់ទៅនឹង <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> ដែលអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រាប់បញ្ចូលទាំងអ៊ីមែល កម្មវិធី គេហទំព័រ។\n\nអ្នកក៏ត្រូវបានតភ្ជាប់ផងដែរទៅនឹង <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> ដែលអាចឃ្លាំមើលសកម្មភាពបណ្តាញផ្ទាល់ខ្លួនរបស់អ្នក។"</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"ឧបករណ៍របស់អ្នកត្រូវបានគ្រប់គ្រងដោយ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nអ្នកគ្រប់គ្រងរបស់អ្នកអាចឃ្លាំមើល និងគ្រប់គ្រងការកំណត់ ការចូលប្រើជាក្រុម កម្មវិធី ទិន្នន័យដែលជាប់ទាក់ទងនឹងឧបករណ៍របស់អ្នក និងព័ត៌មានទីតាំងនៃឧបករណ៍របស់អ្នក។\n\nអ្នកត្រូវបានភ្ជាប់ជាមួយ <xliff:g id="APPLICATION">%2$s</xliff:g> ដែលវាអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រួមបញ្ចូលទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រ។\n\nសម្រាប់ព័ត៌មានបន្ថែម សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក។"</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"ឧបករណ៍នឹងចាក់សោរហូតដល់អ្នកដោះសោដោយដៃ"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"ទទួលបានការជូនដំណឹងកាន់តែលឿន"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"ឃើញពួកវាមុនពេលដោះសោ"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"ពង្រីក"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"បង្រួម"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"អេក្រង់ត្រូវបានភ្ជាប់"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"វានឹងផ្អាករហូតដល់អ្នកផ្តាច់។ ប៉ះ និងសង្កត់គ្រាប់ចុចថយក្រោយដើម្បីផ្តាច់។"</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"យល់ហើយ"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"ទេ អរគុណ"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"លាក់ <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"វានឹងបង្ហាញពេលក្រោយ ពេលដែលអ្នកបើកក្នុងការកំណត់។"</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"លាក់"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ចង់ក្លាយជាប្រអប់សម្លេង។"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"អនុញ្ញាត"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"បដិសេធ"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> គឺជាប្រអប់សម្លេង"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"ប៉ះដើម្បីស្តារច្បាប់ដើម"</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"អ្នកកំពុងប្រើប្រវត្តិរូបការងាររបស់អ្នក"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"ហៅ"</item>
- <item msgid="5997713001067658559">"ប្រព័ន្ធ"</item>
- <item msgid="7858983209929864160">"រោទ៍"</item>
- <item msgid="1850038478268896762">"មេឌៀ"</item>
- <item msgid="8265110906352372092">"ម៉ោងរោទ៍"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"ប៊្លូធូស"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"ភាពងាយស្រួល"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"ហៅ"</string>
+ <string name="stream_system" msgid="7493299064422163147">"ប្រព័ន្ធ"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"រោទ៍"</string>
+ <string name="stream_music" msgid="9086982948697544342">"មេឌៀ"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"ម៉ោងរោទ៍"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"ការជូនដំណឹង"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"ប៊្លូធូស"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"ហ្វ្រេកង់ពហុសំឡេងទ្វេ"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"ភាពងាយស្រួល"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s។ ប៉ះដើម្បីបើកសំឡេង។"</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s។ ប៉ះដើម្បីកំណត់ឲ្យញ័រ។ សេវាកម្មលទ្ធភាពប្រើប្រាស់អាចនឹងត្រូវបានបិទសំឡេង។"</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s។ ប៉ះដើម្បីបិទសំឡេង។ សេវាកម្មលទ្ធភាពប្រើប្រាស់អាចនឹងត្រូវបានបិទសំឡេង។"</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"ការកំណត់រហ័ស"</string>
<string name="status_bar" msgid="4877645476959324760">"របារស្ថានភាព"</string>
<string name="overview" msgid="4018602013895926956">"ទិដ្ឋភាព"</string>
- <string name="demo_mode" msgid="2389163018533514619">"របៀបសាកល្បង"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"មុខងារសាកល្បង UI ប្រព័ន្ធ"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"បើករបៀបសាកល្បង"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"បង្ហាញរបៀបសាកល្បង"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"អ៊ីសឺរណិត"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"បើក"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"បិទ"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"ជាមួយអង្គគ្រប់គ្រងការជូនដំណឹងថាមពល អ្នកអាចកំណត់កម្រិតសំខាន់ពី 0 ទៅ 5 សម្រាប់ការជូនដំណឹងរបស់កម្មវិធី។ \n\n"<b>"កម្រិត 5"</b>" \n- បង្ហាញនៅផ្នែកខាងលើបញ្ជីជូនដំណឹង \n- អនុញ្ញាតការរំខានលើអេក្រង់ពេញ \n- លោតឡើងជានិច្ច \n\n"<b>"កម្រិត 4"</b>" \n- រារាំងការរំខានលើអេក្រង់ពេញ \n- លោតឡើងជានិច្ច \n\n"<b>"កម្រិត 3"</b>" \n- រារាំងការរំខានលើអេក្រង់ពេញ \n- លោតឡើងជានិច្ច \n\n"<b>"កម្រិត 2"</b>" \n- រារាំងការរំខានលើអេក្រង់ពេញ \n- លោតឡើងជានិច្ច \n- មិនបន្លឺសំឡេង ឬញ័រ \n\n"<b>"កម្រិត 1"</b>" \n- រារាំងការរំខានលើអេក្រង់ពេញ \n- លោតឡើងជានិច្ច \n- មិនបន្លឺសំឡេង ឬញ័រ \n- លាក់ពីអេក្រង់ចាក់សោ និងរបារស្ថានភាព \n- បង្ហាញនៅផ្នែកខាងក្រោមបញ្ជីជូនដំណឹង \n\n"<b>"កម្រិត 0"</b>" \n- រារាំងការជូនដំណឹងទាំងអស់ពីកម្មវិធី"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"សារៈសំខាន់៖ ស្វ័យប្រវត្តិ"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"សារៈសំខាន់៖ កម្រិត 0"</string>
- <string name="min_importance" msgid="560779348928574878">"សារៈសំខាន់៖ កម្រិត 1"</string>
- <string name="low_importance" msgid="7571498511534140">"សារៈសំខាន់៖ កម្រិត 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"សារៈសំខាន់៖ កម្រិត 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"សារៈសំខាន់៖ កម្រិត 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"សារៈសំខាន់៖ កម្រិត 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"កម្មវិធីកំណត់កម្រិតសំខាន់សម្រាប់ការជូនដំណឹងនីមួយៗ។"</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"កុំបង្ហាញការជូនដំណឹងសម្រាប់កម្មវិធីនេះ"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"គ្មានការរំខានលើអេក្រង់ពេញ ការលោតឡើង សំឡេង ឬញ័រទេ។ លាក់ពីអេក្រង់ចាក់សោ និងរបារស្ថានភាព។"</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"គ្មានការរំខានលើអេក្រង់ពេញ ការលោតឡើង សំឡេង ឬញ័រទេ។"</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"គ្មានការរំខាន ឬការលោតឡើងលើអេក្រង់ពេញទេ។"</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"លោតឡើងជានិច្ច។ គ្មានការរំខានលើអេក្រង់ពេញទេ។"</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"លោតឡើងជានិច្ច និងអនុញ្ញាតការរំខានលើអេក្រង់ពេញ។"</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"ការកំណត់ច្រើនទៀត"</string>
<string name="notification_done" msgid="5279426047273930175">"រួចរាល់"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"អង្គគ្រប់គ្រងការជូនដំណឹង <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"កែលំដាប់ការកំណត់"</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"ទំព័រ <xliff:g id="ID_1">%1$d</xliff:g> នៃ <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"ពង្រីក"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"បង្រួម"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"បដិសេធ"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"ទូរសព្ទនេះកំពុងកើនកម្តៅ"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"មុខងារមួយចំនួននឹងមិនអាចប្រើបានពេញលេញនោះទេ ខណៈពេលដែលទូរសព្ទកំពុងបញ្ចុះកម្តៅ"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"ទូរសព្ទរបស់អ្នកនឹងព្យាយាមបញ្ចុះកម្តៅដោយស្វ័យប្រវត្តិ។ អ្នកនៅតែអាចប្រើទូរសព្ទរបស់អ្នកបានដដែល ប៉ុន្តែវានឹងដំណើរការយឺតជាងមុន។\n\nបន្ទាប់ពីទូរសព្ទរបស់អ្នកត្រជាក់ជាងមុនហើយ វានឹងដំណើរការដូចធម្មតា។"</string>
</resources>
diff --git a/packages/SystemUI/res/values-km-rKH/strings_car.xml b/packages/SystemUI/res/values-km/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-km-rKH/strings_car.xml
rename to packages/SystemUI/res/values-km/strings_car.xml
diff --git a/packages/SystemUI/res/values-km-rKH/strings_tv.xml b/packages/SystemUI/res/values-km/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-km-rKH/strings_tv.xml
rename to packages/SystemUI/res/values-km/strings_tv.xml
diff --git a/packages/SystemUI/res/values-kn-rIN-land/strings.xml b/packages/SystemUI/res/values-kn-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-kn-rIN-land/strings.xml
rename to packages/SystemUI/res/values-kn-land/strings.xml
diff --git a/packages/SystemUI/res/values-kn-rKA-land/strings.xml b/packages/SystemUI/res/values-kn-rKA-land/strings.xml
deleted file mode 100644
index 640389f..0000000
--- a/packages/SystemUI/res/values-kn-rKA-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"ಪರದೆಯು ಇದೀಗ ಲ್ಯಾಂಡ್ಸ್ಕೇಪ್ ಒರಿಯಂಟೇಶನ್ನಲ್ಲಿ ಲಾಕ್ ಆಗಿದೆ."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-kn-rIN/config.xml b/packages/SystemUI/res/values-kn/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-kn-rIN/config.xml
rename to packages/SystemUI/res/values-kn/config.xml
diff --git a/packages/SystemUI/res/values-kn-rIN/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
similarity index 92%
rename from packages/SystemUI/res/values-kn-rIN/strings.xml
rename to packages/SystemUI/res/values-kn/strings.xml
index 3a29a6f..4073cc4 100644
--- a/packages/SystemUI/res/values-kn-rIN/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"ಬ್ಯಾಟರಿ ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> ಪ್ರತಿಶತ."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"ಸಿಸ್ಟಂ ಸೆಟ್ಟಿಂಗ್ಗಳು."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"ಅಧಿಸೂಚನೆಗಳು."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"ಅಧಿಸೂಚನೆಯ ಓವರ್ಫ್ಲೋ ಕಂಟೇನರ್"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"ಅಧಿಸೂಚನೆ ತೆರವುಗೊಳಿಸು."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ಸಕ್ರಿಯವಾಗಿದೆ."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS ಸ್ವಾಧೀನ."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ಲಾಕ್ ಪರದೆ."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"ಸಮಗ್ರ ನೋಟ."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"ಮುಚ್ಚು"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"ವೈಫೈ ಆಫ್ ಮಾಡಲಾಗಿದೆ."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"ಎಲ್ಲವನ್ನೂ ತೆರವುಗೊಳಿಸು"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"ಈಗ ಪ್ರಾರಂಭಿಸಿ"</string>
<string name="empty_shade_text" msgid="708135716272867002">"ಯಾವುದೇ ಅಧಿಸೂಚನೆಗಳಿಲ್ಲ"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"ಸಾಧನವನ್ನು ಪರಿವೀಕ್ಷಿಸಬಹುದಾಗಿದೆ"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"ಪ್ರೊಫೈಲ್ ಅನ್ನು ಪರಿವೀಕ್ಷಿಸಬಹುದಾಗಿದೆ"</string>
<string name="vpn_footer" msgid="2388611096129106812">"ನೆಟ್ವರ್ಕ್ ಅನ್ನು ವೀಕ್ಷಿಸಬಹುದಾಗಿ"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"ನೆಟ್ವರ್ಕ್ ಅನ್ನು ವೀಕ್ಷಿಸಬಹುದಾಗಿರುತ್ತದೆ"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"ಸಾಧನ ಪರಿವೀಕ್ಷಣೆ"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"ಪ್ರೊಫೈಲ್ ಮೇಲ್ವಿಚಾರಣೆ"</string>
<string name="monitoring_title" msgid="169206259253048106">"ನೆಟ್ವರ್ಕ್ ಪರಿವೀಕ್ಷಣೆ"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"ನೆಟ್ವರ್ಕ್ ಲಾಗಿಂಗ್"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN ಸಂಪರ್ಕಕಡಿತಗೊಳಿಸಿ"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"ನಿಮ್ಮ ಸಾಧನವನ್ನು <xliff:g id="ORGANIZATION">%1$s</xliff:g> ಅವರು ನಿರ್ವಹಿಸುತ್ತಿದ್ದಾರೆ.\n\nನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸೆಟ್ಟಿಂಗ್ಗಳು, ಕಾರ್ಪೊರೇಟ್ ಪ್ರವೇಶ, ಅಪ್ಲಿಕೇಶನ್ಗಳು ಹಾಗೂ ನಿಮ್ಮ ಸಾಧನದೊಂದಿಗೆ ಸಂಬಂಧಿಸಿದ ಡೇಟಾ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳ ಮಾಹಿತಿಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುವ ಮತ್ತು ನಿರ್ವಹಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಹೊಂದಿದ್ದಾರೆ."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"ನಿಮ್ಮ ಸಾಧನವನ್ನು <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ನಿಂದ ನಿರ್ವಹಿಸಲಾಗಿದೆ."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"ನಿಮ್ಮ ಸಾಧನವನ್ನು ನಿರ್ವಹಿಸಲು <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ಅನ್ನು ಬಳಸುತ್ತದೆ."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸೆಟ್ಟಿಂಗ್ಗಳು, ಕಾರ್ಪೊರೇಟ್ ಪ್ರವೇಶ, ಅಪ್ಲಿಕೇಶನ್ಗಳು, ನಿಮ್ಮ ಸಾಧನಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಡೇಟಾ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳ ಮಾಹಿತಿಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಮತ್ತು ನಿರ್ವಹಿಸಬಹುದು."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"ನೀವು ಇಮೇಲ್ಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ, <xliff:g id="VPN_APP">%1$s</xliff:g> ಗೆ ನೀವು ಸಂಪರ್ಕಗೊಂಡಿರುವಿರಿ."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಿರಿ"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಟ್ರಾಫಿಕ್ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಲು ನೆಟ್ವರ್ಕ್ ಲಾಗಿನ್ ಮಾಡುವಿಕೆಯನ್ನು ಆನ್ ಮಾಡಿದ್ದಾರೆ.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗೆ ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"ನೀವು VPN ಸಂಪರ್ಕ ಹೊಂದಿಸಲು ಅಪ್ಲಿಕೇಶನ್ಗೆ ಅನುಮತಿ ನೀಡಿರುವಿರಿ.\n\nಈ ಅಪ್ಲಿಕೇಶನ್ ಇಮೇಲ್ಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"ನಿಮ್ಮ ಸಾಧನವನ್ನು <xliff:g id="ORGANIZATION">%1$s</xliff:g> ಅವರು ನಿರ್ವಹಿಸುತ್ತಿದ್ದಾರೆ.\n\nನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸೆಟ್ಟಿಂಗ್ಗಳು, ಕಾರ್ಪೊರೇಟ್ ಪ್ರವೇಶ, ಅಪ್ಲಿಕೇಶನ್ಗಳು ಹಾಗೂ ನಿಮ್ಮ ಸಾಧನದೊಂದಿಗೆ ಸಂಬಂಧಿಸಿದ ಡೇಟಾ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳ ಮಾಹಿತಿಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಮತ್ತು ನಿರ್ವಹಿಸಬಹುದು.\n\nನೀವು VPN ಗೆ ಸಂಪರ್ಕವನ್ನು ಹೊಂದಿರುವಿರಿ, ಅದು ಇಮೇಲ್ಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು, ಮತ್ತು ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯನ್ನು ನಿರ್ವಹಿಸಬಹುದು.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"ನಿಮ್ಮ ಪ್ರೊಫೈಲ್ ಅನ್ನು <xliff:g id="ORGANIZATION">%1$s</xliff:g> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ.\n\nನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಇಮೇಲ್ಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಹೊಂದಿದ್ದಾರೆ.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.\n\nನಿಮ್ಮ ವೈಯಕ್ತಿಕ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ VPN ಗೆ ಕೂಡಾ ನೀವು ಸಂಪರ್ಕಗೊಂಡಿರುವಿರಿ."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"ನೀವು ಇಮೇಲ್ಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ <xliff:g id="APPLICATION">%1$s</xliff:g> ಗೆ ಸಂಪರ್ಕಗೊಂಡಿರುವಿರಿ."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"ನೀವು ಇಮೇಲ್ಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು, ಮತ್ತು ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ <xliff:g id="APPLICATION">%1$s</xliff:g> ಗೆ ಸಂಪರ್ಕಗೊಂಡಿರುವಿರಿ."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"ನಿಮ್ಮ ಕೆಲಸದ ಪ್ರೊಫೈಲ್ ಅನ್ನು <xliff:g id="ORGANIZATION">%1$s</xliff:g> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ. ಇದು ಇಮೇಲ್ಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು, ಮತ್ತು ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ಕೆಲಸದ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ <xliff:g id="APPLICATION">%2$s</xliff:g> ಗೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"ನಿಮ್ಮ ಕೆಲಸದ ಪ್ರೊಫೈಲ್ ಅನ್ನು <xliff:g id="ORGANIZATION">%1$s</xliff:g> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ. ಇದು ಇಮೇಲ್ಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು, ಮತ್ತು ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ಕೆಲಸದ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> ಗೆ ಸಂಪರ್ಕಿತಗೊಂಡಿದೆ.\n\nನೀವು ಕೂಡಾ ವೈಯಕ್ತಿಕ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> ಗೆ ಸಂಪರ್ಕಿತಗೊಂಡಿರುವಿರಿ."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"ನಿಮ್ಮ ಸಾಧನವನ್ನು <xliff:g id="ORGANIZATION">%1$s</xliff:g> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ.\n\nನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸೆಟ್ಟಿಂಗ್ಗಳು, ಕಾರ್ಪೊರೇಟ್ ಪ್ರವೇಶ, ಅಪ್ಲಿಕೇಶನ್ಗಳು ಹಾಗೂ ನಿಮ್ಮ ಸಾಧನದೊಂದಿಗೆ ಸಂಬಂಧಿಸಿದ ಡೇಟಾ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳ ಮಾಹಿತಿಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಮತ್ತು ನಿರ್ವಹಿಸಬಹುದು.\n\nಇಮೇಲ್ಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ <xliff:g id="APPLICATION">%2$s</xliff:g> ಗೆ ಸಂಪರ್ಕಿತಗೊಂಡಿರುವಿರಿ.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"ನೀವಾಗಿಯೇ ಅನ್ಲಾಕ್ ಮಾಡುವವರೆಗೆ ಸಾಧನವು ಲಾಕ್ ಆಗಿಯೇ ಇರುತ್ತದೆ"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"ವೇಗವಾಗಿ ಅಧಿಸೂಚನೆಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಿ"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"ನೀವು ಅನ್ಲಾಕ್ ಮಾಡುವ ಮೊದಲೇ ಅವುಗಳನ್ನು ನೋಡಿ"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"ವಿಸ್ತರಿಸು"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"ಸಂಕುಚಿಸು"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"ಪರದೆಯನ್ನು ಪಿನ್ ಮಾಡಲಾಗಿದೆ"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"ನೀವು ಅನ್ಪಿನ್ ಮಾಡುವವರೆಗೆ ಅದನ್ನು ವೀಕ್ಷಣೆಯಲ್ಲಿಡುತ್ತದೆ. ಅನ್ಪಿನ್ ಮಾಡಲು ಹಿಂದೆ ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹಿಡಿದುಕೊಳ್ಳಿ."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"ತಿಳಿಯಿತು"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"ಧನ್ಯವಾದಗಳು"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> ಮರೆಮಾಡುವುದೇ?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"ನೀವು ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ಅದನ್ನು ಆನ್ ಮಾಡಿದಾಗ ಅದು ಮರುಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"ಮರೆಮಾಡಿ"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ವಾಲ್ಯೂಮ್ ಸಂವಾದವಾಗಲು ಬಯಸುತ್ತದೆ."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"ಅನುಮತಿಸು"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"ನಿರಾಕರಿಸು"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ವಾಲ್ಯೂಮ್ ಸಂವಾದವಾಗಿದೆ"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"ಮೂಲಕ್ಕೆ ಮರುಸ್ಥಾಪಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"ನಿಮ್ಮ ಕೆಲಸದ ಪ್ರೊಫೈಲ್ ಅನ್ನು ನೀವು ಬಳಸುತ್ತಿರುವಿರಿ"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"ಕರೆಮಾಡಿ"</item>
- <item msgid="5997713001067658559">"ಸಿಸ್ಟಂ"</item>
- <item msgid="7858983209929864160">"ಉಂಗುರ"</item>
- <item msgid="1850038478268896762">"ಮಾಧ್ಯಮ"</item>
- <item msgid="8265110906352372092">"ಅಲಾರಮ್"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"ಬ್ಲೂಟೂತ್"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"ಪ್ರವೇಶಿಸುವಿಕೆ"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"ಕರೆಮಾಡಿ"</string>
+ <string name="stream_system" msgid="7493299064422163147">"ಸಿಸ್ಟಮ್"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"ರಿಂಗ್"</string>
+ <string name="stream_music" msgid="9086982948697544342">"ಮಾಧ್ಯಮ"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"ಅಲಾರಮ್"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"ಅಧಿಸೂಚನೆ"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"ಬ್ಲೂಟೂತ್"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"ಡ್ಯುಯಲ್ ಬಹು ಟೋನ್ ಆವರ್ತನೆ"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"ಪ್ರವೇಶಿಸುವಿಕೆ"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. ಅನ್ಮ್ಯೂಟ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. ಕಂಪನಕ್ಕೆ ಹೊಂದಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ. ಪ್ರವೇಶಿಸುವಿಕೆ ಸೇವೆಗಳನ್ನು ಮ್ಯೂಟ್ ಮಾಡಬಹುದು."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. ಮ್ಯೂಟ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ. ಪ್ರವೇಶಿಸುವಿಕೆ ಸೇವೆಗಳನ್ನು ಮ್ಯೂಟ್ ಮಾಡಬಹುದು."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="status_bar" msgid="4877645476959324760">"ಸ್ಥಿತಿ ಪಟ್ಟಿ"</string>
<string name="overview" msgid="4018602013895926956">"ಸಮಗ್ರ ನೋಟ"</string>
- <string name="demo_mode" msgid="2389163018533514619">"ಡೆಮೊ ಮೋಡ್"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"ಸಿಸ್ಟಂ UI ಡೆಮೋ ಮೋಡ್"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"ಡೆಮೊ ಮೋಡ್ ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"ಡೆಮೊ ಮೋಡ್ ತೋರಿಸು"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"ಇಥರ್ನೆಟ್"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"ಆನ್"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"ಆಫ್"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"ಪವರ್ ಅಧಿಸೂಚನೆ ನಿಯಂತ್ರಣಗಳ ಮೂಲಕ, ನೀವು ಅಪ್ಲಿಕೇಶನ್ಗಳ ಅಧಿಸೂಚನೆಗಳನ್ನು 0 ರಿಂದ 5 ರವರೆಗಿನ ಹಂತಗಳ ಪ್ರಾಮುಖ್ಯತೆಯನ್ನು ಹೊಂದಿಸಬಹುದು. \n\n"<b>"ಹಂತ 5"</b>" \n- ಮೇಲಿನ ಅಧಿಸೂಚನೆ ಪಟ್ಟಿಯನ್ನು ತೋರಿಸಿ \n- ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆಯನ್ನು ಅನುಮತಿಸಿ \n- ಯಾವಾಗಲು ಇಣುಕು ನೋಟ \n\n"<b>"ಹಂತ 4"</b>" \n- ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆಯನ್ನು ತಡೆಯಿರಿ \n- ಯಾವಾಗಲು ಇಣುಕು ನೋಟ\n\n"<b>"ಹಂತ 3"</b>" \n- ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆಯನ್ನು ತಡೆಯಿರಿ \n- ಎಂದಿಗೂ ಇಣುಕು ನೋಟ ಬೇಡ \n\n"<b>"ಹಂತ 2"</b>" \n- ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆಯನ್ನು ತಡೆಯಿರಿ \n- ಎಂದಿಗೂ ಇಣುಕು ನೋಟ ಬೇಡ \n- ಶಬ್ದ ಮತ್ತು ವೈಬ್ರೇಷನ್ ಎಂದಿಗೂ ಮಾಡಬೇಡಿ \n\n"<b>"ಹಂತ 1"</b>" \n- ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆಯನ್ನು ತಡೆಯಿರಿ \n- ಎಂದಿಗೂ ಇಣುಕು ನೋಟ ಬೇಡ \n- ಶಬ್ದ ಮತ್ತು ವೈಬ್ರೇಷನ್ ಎಂದಿಗೂ ಮಾಡಬೇಡಿ \n- ಸ್ಥಿತಿ ಪಟ್ಟಿ ಮತ್ತು ಲಾಕ್ ಪರದೆಯಿಂದ ಮರೆಮಾಡಿ \n- ಕೆಳಗಿನ ಅಧಿಸೂಚನೆ ಪಟ್ಟಿಯನ್ನು ತೋರಿಸಿ \n\n"<b>"ಹಂತ 0"</b>" \n- ಅಪ್ಲಿಕೇಶನ್ನಿಂದ ಎಲ್ಲಾ ಅಧಿಸೂಚನೆಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"ಪ್ರಾಮುಖ್ಯತೆ: ಸ್ವಯಂಚಾಲಿತ"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"ಪ್ರಾಮುಖ್ಯತೆ: ಹಂತ 0"</string>
- <string name="min_importance" msgid="560779348928574878">"ಪ್ರಾಮುಖ್ಯತೆ: ಹಂತ 1"</string>
- <string name="low_importance" msgid="7571498511534140">"ಪ್ರಾಮುಖ್ಯತೆ: ಹಂತ 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"ಪ್ರಾಮುಖ್ಯತೆ: ಹಂತ 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"ಪ್ರಾಮುಖ್ಯತೆ: ಹಂತ 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"ಪ್ರಾಮುಖ್ಯತೆ: ಹಂತ 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"ಪ್ರತಿ ಅಧಿಸೂಚನೆಯ ಪ್ರಾಮುಖ್ಯತೆಯನ್ನು ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಧರಿಸುತ್ತದೆ."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"ಈ ಅಪ್ಲಿಕೇಶನ್ನಿಂದ ಅಧಿಸೂಚನೆಗಳನ್ನು ಎಂದಿಗೂ ತೋರಿಸಬೇಡ."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆ, ಇಣುಕು ನೋಟ, ಶಬ್ದ, ಅಥವಾ ವೈಬ್ರೇಷನ್ ಇಲ್ಲ. ಲಾಕ್ ಪರದೆ ಮತ್ತು ಸ್ಥಿತಿ ಪಟ್ಟಿಯಿಂದ ಮರೆಮಾಡಿ."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆ, ಇಣುಕು ನೋಟ, ಐಶಬ್ದ ಅಥವಾ ವೈಬ್ರೇಷನ್ ಇಲ್ಲ."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"ಯಾವುದೇ ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆ ಇಲ್ಲ ಅಥವಾ ಇಣುಕು ನೋಟವಿಲ್ಲ."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"ಯಾವಾಗಲು ಇಣುಕು ನೋಟ. ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆ ಇಲ್ಲ."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"ಯಾವಾಗಲು ಇಣುಕು ನೋಟ ಮತ್ತು ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆ ಅನುಮತಿಸಿ."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"ಹೆಚ್ಚಿನ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="notification_done" msgid="5279426047273930175">"ಮುಗಿದಿದೆ"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಅಧಿಸೂಚನೆ ನಿಯಂತ್ರಣಗಳು"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"ಸೆಟ್ಟಿಂಗ್ಗಳ ಕ್ರಮವನ್ನು ಎಡಿಟ್ ಮಾಡಿ."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_2">%2$d</xliff:g> ರಲ್ಲಿ <xliff:g id="ID_1">%1$d</xliff:g> ಪುಟ"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"ವಿಸ್ತೃತಗೊಳಿಸು"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"ಕುಗ್ಗಿಸಿ"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"ವಜಾಗೊಳಿಸಿ"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"ಫೋನ್ ಬಿಸಿಯಾಗುತ್ತಿದೆ"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"ಫೋನ್ ತಣ್ಣಗಾಗುವವರೆಗೂ ಕೆಲವು ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಸೀಮಿತಗೊಳಿಸುತ್ತದೆ"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"ನಿಮ್ಮ ಫೋನ್ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತಣ್ಣಗಾಗಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ. ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ನೀವು ಈಗಲೂ ಬಳಸಬಹುದಾಗಿರುತ್ತದೆ, ಆದರೆ ಇದು ನಿಧಾನವಾಗಿರಬಹುದು.\n\nಒಮ್ಮೆ ನಿಮ್ಮ ಫೋನ್ ತಣ್ಣಗಾದ ನಂತರ ಇದು ಸಾಮಾನ್ಯ ರೀತಿಯಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ."</string>
</resources>
diff --git a/packages/SystemUI/res/values-kn-rIN/strings_car.xml b/packages/SystemUI/res/values-kn/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-kn-rIN/strings_car.xml
rename to packages/SystemUI/res/values-kn/strings_car.xml
diff --git a/packages/SystemUI/res/values-kn-rIN/strings_tv.xml b/packages/SystemUI/res/values-kn/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-kn-rIN/strings_tv.xml
rename to packages/SystemUI/res/values-kn/strings_tv.xml
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index cff469c..abea176 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -165,6 +165,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"시스템 설정"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"알림"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"알림 오버플로우 컨테이너"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"알림 지우기"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS가 사용 설정되었습니다."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS를 가져오는 중입니다."</string>
@@ -186,6 +187,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"화면을 잠급니다."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"설정"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"최근 사용"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"닫기"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi가 사용 중지되었습니다."</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"모두 지우기"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"시작하기"</string>
<string name="empty_shade_text" msgid="708135716272867002">"알림 없음"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"기기가 모니터링될 수 있음"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"프로필이 모니터링될 수 있음"</string>
<string name="vpn_footer" msgid="2388611096129106812">"네트워크가 모니터링될 수 있음"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"네트워크가 모니터링될 수 있음"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"기기 모니터링"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"프로필 모니터링"</string>
<string name="monitoring_title" msgid="169206259253048106">"네트워크 모니터링"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"네트워크 로깅"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN 사용 중지"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN 연결 해제"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"이 기기는 <xliff:g id="ORGANIZATION">%1$s</xliff:g>에서 관리합니다.\n\n관리자는 설정, 기업 액세스, 앱, 기기와 관련된 데이터, 기기의 위치 정보를 모니터링하고 관리할 수 있습니다. 자세한 내용은 관리자에게 문의하세요."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>에서 관리하는 기기입니다."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>이(가) <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>을(를) 사용하여 내 기기를 관리합니다."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"관리자는 설정, 기업 액세스, 앱, 기기 관련 데이터 및 기기의 위치 정보를 모니터링하고 관리할 수 있습니다."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"자세히 알아보기"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"<xliff:g id="VPN_APP">%1$s</xliff:g>에 연결되었습니다. 이 앱은 이메일, 앱, 웹사이트와 같은 내 네트워크 활동을 모니터링할 수 있습니다."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"공개 VPN 설정"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"관리자가 기기 트래픽을 모니터링하는 네트워크 로깅을 사용 설정했습니다.\n\n자세한 정보는 관리자에게 문의하세요."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"VPN 연결을 설정할 수 있는 권한을 앱에 부여했습니다.\n\n이 앱에서 이메일, 앱, 웹사이트와 같은 내 네트워크 활동 및 기기를 모니터링할 수 있습니다."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"이 기기는 <xliff:g id="ORGANIZATION">%1$s</xliff:g>에서 관리합니다.\n\n관리자는 설정, 기업 액세스, 앱, 기기와 관련된 데이터, 기기의 위치 정보를 모니터링하고 관리할 수 있습니다.\n\nVPN에 연결되어 있으므로 VPN 업체에서 이메일, 앱, 웹사이트를 비롯한 내 네트워크 활동을 모니터링할 수 있습니다.\n\n자세한 내용은 관리자에게 문의하세요."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"직장 프로필은 <xliff:g id="ORGANIZATION">%1$s</xliff:g>에서 관리합니다.\n\n관리자는 이메일, 앱, 웹사이트와 같은 네트워크 활동을 모니터링할 수 있습니다.\n\n자세한 내용은 관리자에게 문의하세요.\n\n또한 VPN에 연결되어 있으며 여기에서 내 네트워크 활동을 모니터링할 수 있습니다."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"<xliff:g id="APPLICATION">%1$s</xliff:g>에 연결되었습니다. 이 앱은 이메일, 앱, 웹사이트와 같은 내 네트워크 활동을 모니터링할 수 있습니다."</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"<xliff:g id="APPLICATION">%1$s</xliff:g>에 연결되었습니다. 이 앱은 이메일, 앱, 웹사이트와 같은 내 개인 네트워크 활동을 모니터링할 수 있습니다."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"직장 프로필은 <xliff:g id="ORGANIZATION">%1$s</xliff:g>에서 관리합니다. 이는 <xliff:g id="APPLICATION">%2$s</xliff:g>에 연결되어 있으며 여기에서 이메일, 앱, 웹사이트와 같은 직장 네트워크 활동을 모니터링할 수 있습니다.\n\n자세한 내용은 관리자에게 문의하세요."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"직장 프로필은 <xliff:g id="ORGANIZATION">%1$s</xliff:g>에서 관리합니다. 이는 <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>에 연결되어 있으며 여기에서 이메일, 앱, 웹사이트와 같은 직장 네트워크 활동을 모니터링할 수 있습니다.\n\n또한 <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>에 연결되어 있으며, 여기에서 내 개인 네트워크 활동을 모니터링할 수 있습니다."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"<xliff:g id="ORGANIZATION">%1$s</xliff:g>에서 기기를 관리합니다.\n\n관리자는 설정, 기업 액세스, 앱, 기기와 연결된 데이터, 기기의 위치 정보를 모니터링하고 관리할 수 있습니다.\n\n<xliff:g id="APPLICATION">%2$s</xliff:g>에 연결되어 있으며 여기에서 이메일, 앱, 웹사이트와 같은 내 네트워크 활동을 모니터링할 수 있습니다.\n\n자세한 내용은 관리자에게 문의하세요."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"수동으로 잠금 해제할 때까지 기기가 잠금 상태로 유지됩니다."</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"알림을 더욱 빠르게 받기"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"잠금 해제하기 전에 알림을 봅니다."</string>
@@ -432,31 +442,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"펼치기"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"접기"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"화면 고정됨"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"고정 해제될 때까지 계속 볼 수 있습니다. 고정 해제하려면 길게 터치하세요."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"확인"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"거부"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g>을(를) 숨기시겠습니까?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"다음번에 설정에서 사용 설정하면 다시 표시됩니다."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"숨기기"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g>이(가) 볼륨 대화가 되려고 합니다."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"허용"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"거부"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g>은(는) 볼륨 대화입니다."</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"원본을 복원하려면 탭하세요."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"직장 프로필을 사용하고 있습니다."</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"통화"</item>
- <item msgid="5997713001067658559">"시스템"</item>
- <item msgid="7858983209929864160">"벨 울리기"</item>
- <item msgid="1850038478268896762">"미디어"</item>
- <item msgid="8265110906352372092">"알람"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"블루투스"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"접근성"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"전화걸기"</string>
+ <string name="stream_system" msgid="7493299064422163147">"시스템"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"벨소리"</string>
+ <string name="stream_music" msgid="9086982948697544342">"미디어"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"알람"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"알림"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"블루투스"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"듀얼 멀티 톤 주파수"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"접근성"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. 탭하여 음소거를 해제하세요."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. 탭하여 진동으로 설정하세요. 접근성 서비스가 음소거될 수 있습니다."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. 탭하여 음소거로 설정하세요. 접근성 서비스가 음소거될 수 있습니다."</string>
@@ -468,7 +472,7 @@
<string name="quick_settings" msgid="10042998191725428">"빠른 설정"</string>
<string name="status_bar" msgid="4877645476959324760">"상태 표시줄"</string>
<string name="overview" msgid="4018602013895926956">"최근 사용"</string>
- <string name="demo_mode" msgid="2389163018533514619">"데모 모드"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"시스템 UI 데모 모드"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"데모 모드 사용"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"데모 모드 표시"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"이더넷"</string>
@@ -508,20 +512,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"사용"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"사용 안함"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"전원 알림 컨트롤을 사용하면 앱 알림 관련 중요도를 0부터 5까지로 설정할 수 있습니다. \n\n"<b>"레벨 5"</b>" \n- 알림 목록 상단에 표시 \n- 전체 화면일 경우 알림 표시 허용 \n- 항상 엿보기 표시 \n\n"<b>"레벨 4"</b>" \n- 전체 화면에 알림 표시 금지 \n- 항상 엿보기 표시 \n\n"<b>"레벨 3"</b>" \n- 전체 화면에 알림 표시 금지 \n- 엿보기 표시 안함 \n\n"<b>"레벨 2"</b>" \n- 전체 화면에 알림 표시 금지 \n- 엿보기 표시 안함 \n- 소리나 진동으로 알리지 않음 \n\n"<b>"레벨 1"</b>" \n- 전체 화면에 알림 표시 금지 \n- 엿보기 표시 안함 \n- 소리나 진동으로 알리지 않음 \n- 잠금 화면 및 상태 표시줄에서 숨김 \n- 알림 목록 하단에 표시 \n\n"<b>"레벨 0"</b>" \n- 앱의 모든 알림 차단"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"중요도: 자동"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"중요: 레벨 0"</string>
- <string name="min_importance" msgid="560779348928574878">"중요: 레벨 1"</string>
- <string name="low_importance" msgid="7571498511534140">"중요: 레벨 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"중요: 레벨 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"중요: 레벨 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"중요: 레벨 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"앱에서 각 알림의 중요도를 결정합니다."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"이 앱의 알림 표시 안함"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"전체 화면일 때 알림, 엿보기, 소리, 진동을 금지합니다. 잠금 화면 및 상태 표시줄에서 숨깁니다."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"전체 화면일 때 알림, 엿보기, 소리, 진동을 금지합니다."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"전체 화면일 때 알림 표시 및 엿보기를 금지합니다."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"항상 엿보기를 표시하고 전체 화면일 때 알림을 차단합니다."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"항상 엿보기를 표시하고 전체 화면일 때 알림을 표시합니다."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"설정 더보기"</string>
<string name="notification_done" msgid="5279426047273930175">"완료"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> 알림 관리"</string>
@@ -654,4 +666,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"설정 순서 수정"</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_2">%2$d</xliff:g>페이지 중 <xliff:g id="ID_1">%1$d</xliff:g>페이지"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"펼치기"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"최소화"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"닫기"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"휴대전화 온도가 높음"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"휴대전화 온도를 낮추는 동안 일부 기능이 제한됩니다."</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"휴대전화 온도를 자동으로 낮추려고 시도합니다. 휴대전화를 계속 사용할 수는 있지만 작동이 느려질 수도 있습니다.\n\n휴대전화 온도가 낮아지면 정상적으로 작동됩니다."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ky-rKG-land/strings.xml b/packages/SystemUI/res/values-ky-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-ky-rKG-land/strings.xml
rename to packages/SystemUI/res/values-ky-land/strings.xml
diff --git a/packages/SystemUI/res/values-ky-rKG/config.xml b/packages/SystemUI/res/values-ky/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-ky-rKG/config.xml
rename to packages/SystemUI/res/values-ky/config.xml
diff --git a/packages/SystemUI/res/values-ky-rKG/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
similarity index 92%
rename from packages/SystemUI/res/values-ky-rKG/strings.xml
rename to packages/SystemUI/res/values-ky/strings.xml
index a0675c0..804511a 100644
--- a/packages/SystemUI/res/values-ky-rKG/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Батарея кубатталууда, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> пайыз."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Система тууралоолору."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Эскертмелер."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Эскертмелер контейнери"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Эскертмелерди тазалоо."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS жандырылган."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS байланышууда."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Кулпуланган экран."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Жөндөөлөр"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Көз жүгүртүү."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Жабуу"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi өчүрүлдү."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Бардыгын тазалап салуу"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Азыр баштоо"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Эскертмелер жок"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Түзмөктү көзөмөлдөсө болот"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Профилди көзөмөлдөсө болот"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Тармак көзөмөлдөнүшү мүмкүн"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Тармак көзөмөлдөнүшү мүмкүн"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Түзмөккө көз салуу"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Профилди көзөмөлдөө"</string>
<string name="monitoring_title" msgid="169206259253048106">"Тармакка көз салуу"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Тармактын таржымалы алынууда"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN\'ди өчүрүү"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN\'ди ажыратуу"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Түзмөгүңүздү <xliff:g id="ORGANIZATION">%1$s</xliff:g> башкарат.\n\nАдминистраторуңуз жөндөөлөрдү, корпоративдик мүмкүнчүлүктү, колдонмолорду, түзмөгүңүзгө байланыштуу дайындарды жана түзмөгүңүздүн жайгашкан жери тууралуу маалыматты көзөмөлдөп жана башкара алат. Көбүрөөк маалымат үчүн, администраторуңузга кайрылыңыз."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Түзмөгүңүз <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> тарабынан башкарылат."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"Түзмөгүңүздү башкаруу үчүн <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> уюму <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> колдонмосун колдонот."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Администраторуңуз жөндөөлөрдү, корпоративдик кирүү мүмкүнчүлүгүн, колдонмолорду, уруксаттарды жана ушул түзмөкө байланыштуу дайындарды, ошондой эле түзмөгүңүздүн жайгашкан жери тууралуу маалыматты көзөмөлдөп жана башкара алат."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Кеңири маалымат"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Электрондук почта, колдонмолор жана вебсайттар сыяктуу тармактагы аракеттериңизди тескей турган <xliff:g id="VPN_APP">%1$s</xliff:g> колдонмосуна туташып турасыз."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN жөндөөлөрүн ачуу"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Администраторуңуз тармактын таржымалын алууну иштетти, андыктан түзмөгүңүздөгү трафик көзөмөлгө алынды.\n\nКеңири маалымат алуу үчүн администраторуңузга кайрылыңыз."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Колдонмого VPN туташуусун орнотууга уруксат бердиңиз.\n\nБул колдонмо түзмөгүңүздү жана электрондук почталар, колдонмолор жана вебсайттар сыяктуу тармактагы аракеттериңизди көзөмөлдөй алат."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Түзмөгүңүздү <xliff:g id="ORGANIZATION">%1$s</xliff:g> башкарат.\n\nАдминистраторуңуз жөндөөлөрдү, корпоративдик мүмкүнчүлүктү, колдонмолорду, түзмөгүңүзгө байланыштуу дайындарды жана түзмөгүңүздүн жайгашкан жери тууралуу маалыматты көзөмөлдөп жана башкара алат.\n\nСиз тармактагы жеке аракетиңизди көзөмөлдөй турган VPN\'ге туташкансыз.\n\nКөбүрөөк маалымат үчүн, администраторуңузга кайрылыңыз."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Жумуш профилиңизди <xliff:g id="ORGANIZATION">%1$s</xliff:g> башкарат.\n\nАдминистраторуңуз электрондук почталар, колдонмолор жана вебсайттар сыяктуу тармактагы аракеттериңизди тескей алат.\n\nКөбүрөөк маалымат алуу үчүн, администраторуңузга кайрылыңыз.\n\nМындан тышкары, тармактагы аракеттериңизди тескей турган VPN\'ге да туташып турасыз."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Электрондук почта, колдонмолор жана вебсайттар сыяктуу тармактык аракеттерди көзөмөлдөй турган <xliff:g id="APPLICATION">%1$s</xliff:g> колдонмосуна туташып турасыз."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Электрондук почта, колдонмолор жана вебсайттар сыяктуу тармактагы жеке аракеттериңизди тескей турган <xliff:g id="APPLICATION">%1$s</xliff:g> колдонмосуна туташып турасыз."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Жумуш профилиңизди <xliff:g id="ORGANIZATION">%1$s</xliff:g> башкарат. Ал электрондук почта, колдонмолор жана вебсайттар сыяктуу жумуш тармагыңыздагы аракеттерди көзөмөлдөй турган <xliff:g id="APPLICATION">%2$s</xliff:g> менен туташкан.\n\nКөбүрөөк маалымат алуу үчүн администраторуңузга кайрылыңыз."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Жумуш профилиңизди <xliff:g id="ORGANIZATION">%1$s</xliff:g> башкарат. Ал электрондук почта, колдонмолор жана вебсайттар сыяктуу жумуш тармагыңыздагы аракеттерди көзөмөлдөй турган <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> менен туташкан.\n\nМындан тышкары, тармактагы жеке аракеттериңизди көзөмөлдөгөн <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> колдонмосуна туташып турасыз."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Түзмөгүңүздү <xliff:g id="ORGANIZATION">%1$s</xliff:g> башкарат.\nАдминистраторуңуз түзмөгүңүздөгү жөндөөлөрдү, корпоративдик мүмкүнчүлүктү, колдонмолорду, дайындарды, ошону менен катар жайгашкан жер дайындарын башкарып, тийиштүү маалыматты карай алат.\n\nСиз электрондук почталар, колдонмолор жана вебсайттар сыяктуу тармактагы аракеттериңизди тармактагы аракетиңизди тескей турган APPLICATION колдонмосуна туташып турасыз.\n<xliff:g id="APPLICATION">%2$s</xliff:g>Көбүрөөк маалымат алуу үчүн, администраторуңузга кайрылыңыз.\n\n"</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Түзмөктүн кулпусу кол менен ачылмайынча кулпуланган бойдон алат"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Эскертмелерди тезирээк алуу"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Аларды кулпудан чыгараардан мурун көрүңүз"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Жайып көрсөтүү"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Жыйнап коюу"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Экран кадалган"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Ал бошотулмайынча көрүнө берет. Бошотуу үчүн, \"Артка\" баскычын басып, кармап туруңуз."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Түшүндүм"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Жок, рахмат"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> жашырылсынбы?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Бул кийинки жолу жөндөөлөрдөн күйгүзүлгөндө кайра көрүнөт."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Жашыруу"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> үндү катуулатуу диалогу болгусу келет."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Уруксат берүү"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Жок"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> үндү катуулатуу диалогу"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Үндүн баштапкы деңгээлин калыбына келтирүү үчүн таптап коюңуз."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Жумуш профилиңизди колдонуп жатасыз"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Чалуу"</item>
- <item msgid="5997713001067658559">"Тутум"</item>
- <item msgid="7858983209929864160">"Шыңгыратуу"</item>
- <item msgid="1850038478268896762">"Мультимедия"</item>
- <item msgid="8265110906352372092">"Ойготкуч"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Атайын мүмкүнчүлүктөр"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Чалуу"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Тутум"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Шыңгыратуу"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Мультимедия"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Ойготкуч"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Эскертме"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Көп тондуу жыштык"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Атайын мүмкүнчүлүктөр"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Үнүн чыгаруу үчүн таптап коюңуз."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Дирилдөөгө коюу үчүн таптап коюңуз. Атайын мүмкүнчүлүктөр кызматынын үнүн өчүрүп койсо болот."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Үнүн өчүрүү үчүн таптап коюңуз. Атайын мүмкүнчүлүктөр кызматынын үнүн өчүрүп койсо болот."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Ыкчам жөндөөлөр"</string>
<string name="status_bar" msgid="4877645476959324760">"Абал тилкеси"</string>
<string name="overview" msgid="4018602013895926956">"Көз жүгүртүү"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Демо режими"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Тутум интерфейсинин демо режими"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Демо режимин иштетүү"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Демо режимин көрсөтүү"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Күйүк"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Өчүк"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Бул функциянын жардамы менен ар бир колдонмо үчүн эскертменин маанилүүлүк деңгээлин 0дон 5ке чейин койсоңуз болот. \n\n"<b>"5-деңгээл"</b>" \n- Эскертмелер тизмесинин башында көрсөтүлсүн \n- Эскертмелер толук экранда көрсөтүлсүн \n- Калкып чыгуучу эскертмелерге уруксат берилсин \n\n"<b>"4-деңгээл"</b>" \n- Эскертмелер толук экранда көрсөтүлбөсүн \n- Калкып чыгуучу эскертмелерге уруксат берилсин \n\n"<b>"3-деңгээл"</b>" \n- Эскертмелер толук экранда көрсөтүлбөсүн \n- Калкып чыгуучу эскертмелерге тыюу салынсын \n\n"<b>"2-деңгээл"</b>" \n- Эскертмелер толук экранда көрсөтүлбөсүн \n- Калкып чыгуучу эскертмелерге тыюу салынсын \n- Эч качан добуш чыгып же дирилдебесин \n\n"<b>"1-деңгээл"</b>" \n- Эскертмелер толук экранда көрсөтүлбөсүн \n- Калкып чыгуучу эскертмелерге тыюу салынсын \n- Эч качан добуш чыгып же дирилдебесин \n- Кулпуланган экрандан жана абал тилкесинен жашырылсын \n- Эскертмелер тизмесинин аягында көрсөтүлсүн \n\n"<b>"0-деңгээл"</b>" \n- Колдонмодон алынган бардык эскертмелер бөгөттөлсүн"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Маанилүүлүгү: Автоматтык түрдө"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Маанилүүлүгү: 0-деңгээл"</string>
- <string name="min_importance" msgid="560779348928574878">"Маанилүүлүгү: 1-деңгээл"</string>
- <string name="low_importance" msgid="7571498511534140">"Маанилүүлүгү: 2-деңгээл"</string>
- <string name="default_importance" msgid="7609889614553354702">"Маанилүүлүгү: 3-деңгээл"</string>
- <string name="high_importance" msgid="3441537905162782568">"Маанилүүлүгү: 4-деңгээл"</string>
- <string name="max_importance" msgid="4880179829869865275">"Маанилүүлүгү: 5-деңгээл"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Колдонмо ар бир эскертменин маанилүүлүгүн белгилейт."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Бул колдонмодон эскертмелер эч качан көрсөтүлбөсүн."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Үнсүз жана дирилдебесин. Калкып чыгуучу жана толук экранда көрсөтүлүүчү эскертмелер бөгөттөлсүн. Кулпуланган экрандан жана абал тилкесинен жашырылсын."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Үнсүз жана дирилдебесин. Калкып чыгуучу жана толук экранда көрсөтүлүүчү эскертмелер бөгөттөлсүн."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Калкып чыгуучу же толук экранда көрсөтүлүүчү эскертмелер бөгөттөлсүн."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Калкып чыкма эскертме көрсөтүлүп, толук экранда көрсөтүлбөсүн."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Калкып чыгуучу жана толук экранда көрсөтүлүүчү эскертмелерге уруксат берилсин."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Дагы жөндөөлөр"</string>
<string name="notification_done" msgid="5279426047273930175">"Бүттү"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> эскертмесин башкаруу каражаттары"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Жөндөөлөрдүн иретин өзгөртүү."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_2">%2$d</xliff:g> ичинен <xliff:g id="ID_1">%1$d</xliff:g>-бет"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Жайып көрсөтүү"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Кичирейтүү"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Этибарга албоо"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Телефонуңуз ысып баратат"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Телефон сууганча айрым элементтердин иши чектелген"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Телефонуңуз автоматтык түрдө сууйт. Аны колдоно берсеңиз болот, бирок ал жайыраак иштеп калат.\n\nТелефонуңуз суугандан кийин адаттагыдай эле иштеп баштайт."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ky-rKG/strings_car.xml b/packages/SystemUI/res/values-ky/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-ky-rKG/strings_car.xml
rename to packages/SystemUI/res/values-ky/strings_car.xml
diff --git a/packages/SystemUI/res/values-ky-rKG/strings_tv.xml b/packages/SystemUI/res/values-ky/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-ky-rKG/strings_tv.xml
rename to packages/SystemUI/res/values-ky/strings_tv.xml
diff --git a/packages/SystemUI/res/values-lo-rLA-land/strings.xml b/packages/SystemUI/res/values-lo-rLA-land/strings.xml
deleted file mode 100644
index a838a15..0000000
--- a/packages/SystemUI/res/values-lo-rLA-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"ໜ້າຈໍຕອນນີ້ຖືກລັອກໄວ້ໃນແບບລວງນອນ."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-lo-rLA/config.xml b/packages/SystemUI/res/values-lo/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-lo-rLA/config.xml
rename to packages/SystemUI/res/values-lo/config.xml
diff --git a/packages/SystemUI/res/values-lo-rLA/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
similarity index 91%
rename from packages/SystemUI/res/values-lo-rLA/strings.xml
rename to packages/SystemUI/res/values-lo/strings.xml
index 2056194..7eefe2e 100644
--- a/packages/SystemUI/res/values-lo-rLA/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"ກຳລັງສາກແບັດເຕີຣີ, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> ເປີເຊັນ."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"ການຕັ້ງຄ່າລະບົບ."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"ການແຈ້ງເຕືອນ."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"ຕົວບັນຈຸການລົ້ມການແຈ້ງເຕືອນ"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"ລຶບລ້າງການແຈ້ງເຕືອນ."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ເປີດແລ້ວ."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"ກຳລັງຊອກຫາ GPS."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ລັອກໜ້າຈໍ."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"ການຕັ້ງຄ່າ"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"ພາບຮວມ."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"ປິດ"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"ປິດ Wi-Fi ແລ້ວ."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"ລຶບລ້າງທັງໝົດ"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"ເລີ່ມດຽວນີ້"</string>
<string name="empty_shade_text" msgid="708135716272867002">"ບໍ່ມີການແຈ້ງເຕືອນ"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"ອຸປະກອນອາດມີການເຝົ້າຕິດຕາມ"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"ໂປຣໄຟລ໌ອາດຖືກເຝົ້າຕິດຕາມຢູ່"</string>
<string name="vpn_footer" msgid="2388611096129106812">"ເຄືອຂ່າຍອາດມີການເຝົ້າຕິດຕາມ"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"ການນຳໃຊ້ເຄືອຂ່າຍອາດມີການກວດສອບຕິດຕາມ"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"ການກວດສອບຕິດຕາມອຸປະກອນ"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"ການຕິດຕາມໂປຣໄຟລ໌"</string>
<string name="monitoring_title" msgid="169206259253048106">"ການກວດສອບຕິດຕາມເຄືອຂ່າຍ"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"ການບັນທຶກເຄືອຂ່າຍ"</string>
<string name="disable_vpn" msgid="4435534311510272506">"ປິດການໃຊ້ VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"ຕັດການເຊື່ອມຕໍ່ VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"ອຸປະກອນຂອງທ່ານຖືກຄຸ້ມຄອງໂດຍ <xliff:g id="ORGANIZATION">%1$s</xliff:g> . \n\n ຜູ້ຄວບຄຸມຂອງທ່ານສາມາດຕິດຕາມກວດກາ ແລະການຄຸ້ມຄອງການຕັ້ງຄ່າ, ແອັບການເຂົ້າຫາບໍລິສັດ, ຂໍ້ມູນທີ່ກ່ຽວຂ້ອງກັບອຸປະກອນຂອງທ່ານ, ແລະຂໍ້ມູນທີ່ຕັ້ງຂອງອຸປະກອນຂອງທ່ານ. ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ, ຕິດຕໍ່ຜູ້ຄວບຄຸມຂອງທ່ານ."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"ອຸປະກອນຂອງທ່ານແມ່ນຈັດການໂດຍ <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ໃຊ້ <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ເພື່ອຈັດການອຸປະກອນຂອງທ່ານ."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານສາມາດຕິດຕາມ ແລະ ຈັດການການຕັ້ງຄ່າ, ການເຂົ້າເຖິງອົງກອນ, ແອັບ, ຂໍ້ມູນທີ່ເຊື່ອມໂຍງກັບອຸປະກອນຂອງທ່ານແລະ ຂໍ້ມູນສະຖານທີ່ຂອງອຸປະກອນທ່ານໄດ້."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"ສຶກສາເພີ່ມເຕີມ"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"ທ່ານເຊື່ອມຕໍ່ກັບ <xliff:g id="VPN_APP">%1$s</xliff:g> ແລ້ວ, ເຊິ່ງສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍ, ຮວມທັງອີເມວ, ແອັບ ແລະ ເວັບໄຊຕ່າງໆໄດ້."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"ເປີດການຕັ້ງຄ່າ VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານໄດ້ເປີດໃຊ້ການບັນທຶກເຄືອຂ່າຍໄວ້, ເຊິ່ງຈະກວດສອບທຣາບຟິກໃນອຸປະກອນຂອງທ່ານ.\n\nສຳລັບຂໍ້ມູນເພີ່ມເຕີມໃຫ້ຕິດຕໍ່ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"ທ່ານໄດ້ອະນຸຍາດໃຫ້ແອັບຕັ້ງການເຊື່ອມຕໍ່ VPN.\n\nແອັບນີ້ສາມາດຕິດຕາມການເຄື່ອນໄຫວຂອງອຸປະກອນ ແລະເຄືອຂ່າຍຂອງທ່ານ ເຊິ່ງລວມທັງອີເມວ, ແອັບ ແລະເວັບໄຊທ໌."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"ອຸປະກອນຂອງທ່ານຖືກຄຸ້ມຄອງໂດຍ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nຜູ້ຄວບຄຸມຂອງທ່ານສາມາດຕິດຕາມກວດກາ ແລະການຄຸ້ມຄອງການຕັ້ງຄ່າ, ແອັບການເຂົ້າຫາບໍລິສັດ, ຂໍ້ມູນທີ່ກ່ຽວຂ້ອງກັບອຸປະກອນຂອງທ່ານ, ແລະຂໍ້ມູນທີ່ຕັ້ງຂອງອຸປະກອນຂອງທ່ານ.\n\nທ່ານຍັງເຊື່ອມຕໍ່ກັບ VPN, ເຊິ່ງສາມາດຕິດຕາມກິດຈະກຳເຄືອຂ່າຍຂອງທ່ານ, ລວມທັງອີເມວ, ແອັບ, ແລະເວັບໄຊທ໌.\n\nສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ, ຕິດຕໍ່ຜູ້ຄວບຄຸມຂອງທ່ານ."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"ໂປຣໄຟລ໌ວຽກຂອງທ່ານຖືກຄຸ້ມຄອງໂດຍ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nຜູ້ຄວບຄຸມຂອງທ່ານສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍຂອງທ່ານໄດ້ ລວມທັງອີເມວ, ແອັບ, ແລະເວັບໄຊທ໌.\n\nສຳລັບຂໍ້ມູນເພີ່ມເຕີມ, ຕິດຕໍ່ຜູ້ຄວບຄຸມຂອງທ່ານ.\n\nທ່ານຍັງເຊື່ອມຕໍ່ກັບ VPN, ເຊິ່ງສາມາດຕິດຕາມກິດຈະກຳເຄືອຂ່າຍຂອງທ່ານ."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"ທ່ານເຊື່ອມຕໍ່ກັບ <xliff:g id="APPLICATION">%1$s</xliff:g>, ເຊິ່ງສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍຂອງທ່ານ ລວມທັງອີເມວ, ແອັບ ແລະເວັບໄຊທ໌."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"ທ່ານເຊື່ອມຕໍ່ກັບ <xliff:g id="APPLICATION">%1$s</xliff:g> ແລ້ວ, ເຊິ່ງສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍສ່ວນຕົວຂອງທ່ານ ຮວມທັງອີເມວ, ແອັບ ແລະເວັບໄຊໄດ້."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກຂອງທ່ານຖືກຄວບຄຸມໂດຍ <xliff:g id="ORGANIZATION">%1$s</xliff:g>. ມັນຖືກເຊື່ອມຕໍ່ກັບ <xliff:g id="APPLICATION">%2$s</xliff:g>, ເຊິ່ງສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍບ່ອນເຮັດວຽກຂອງທ່ານ ລວມທັງອີເມວ, ແອັບ ແລະເວັບໄຊທ໌.\n\nສຳລັບຂໍ້ມູນເພີ່ມເຕີມ, ໃຫ້ຕິດຕໍ່ຜູ້ບໍລິຫານຂອງທ່ານ."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກຂອງທ່ານຖືກຈັດການໂດຍ <xliff:g id="ORGANIZATION">%1$s</xliff:g>. ມັນເຊື່ອມຕໍ່ກັບ <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, ເຊິ່ງສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍບ່ອນເຮັດວຽກຂອງທ່ານ ລວມທັງອີເມວ, ແອັບ ແລະເວັບໄຊທ໌.\n\nທ່ານເຊື່ອມຕໍ່ກັບ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, ເຊິ່ງສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍສ່ວນຕົວຂອງທ່ານ."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"ອຸປະກອນຂອງທ່ານຖືກຄຸ້ມຄອງໂດຍ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nຜູ້ຄວບຄຸມຂອງທ່ານສາມາດຕິດຕາມກວດກາ ແລະການຄຸ້ມຄອງການຕັ້ງຄ່າ, ແອັບການເຂົ້າຫາບໍລິສັດ, ຂໍ້ມູນທີ່ກ່ຽວຂ້ອງກັບອຸປະກອນຂອງທ່ານ, ແລະຂໍ້ມູນທີ່ຕັ້ງຂອງອຸປະກອນຂອງທ່ານ.\n\nທ່ານເຊື່ອມຕໍ່ກັບ <xliff:g id="APPLICATION">%2$s</xliff:g> ແລ້ວ, ເຊິ່ງສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍຂອງທ່ານ, ລວມທັງອີເມວ, ແອັບ, ແລະເວັບໄຊທ໌.\n\nສຳລັບຂໍ້ມູນເພີ່ມເຕີມ, ຕິດຕໍ່ຜູ້ຄວບຄຸມຂອງທ່ານ."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Device will stay locked until you manually unlock"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"ຮັບເອົາການແຈ້ງເຕືອນໄວຂຶ້ນ"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"ເບິ່ງພວກມັນກ່ອນທ່ານຈະປົດລັອກ"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"ຂະຫຍາຍ"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"ຫຍໍ້ລົງ"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"ປັກໝຸດໜ້າຈໍແລ້ວ"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"ນີ້ຈະເຮັດໃຫ້ມັນຢູ່ໃນມຸມມອງຈົນກວ່າທ່ານຈະຍົກເລີກປັກໝຸດ. ໃຫ້ແຕະປຸ່ມກັບຄືນຄ້າງໄວ້ເພື່ອຍົກເລີກການປັກໝຸດ."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"ເຂົ້າໃຈແລ້ວ"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"ບໍ່, ຂອບໃຈ"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"ເຊື່ອງ <xliff:g id="TILE_LABEL">%1$s</xliff:g> ຫຼືບໍ່?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"ມັນຈະສະແດງຄືນໃໝ່ເມື່ອທ່ານເປີດນຳໃຊ້ມັນໃນການຕັ້ງຄ່າຄັ້ງຕໍ່ໄປ."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"ເຊື່ອງ"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ຕ້ອງການໃຫ້ເປັນໜ້າຕ່າງລະດັບສຽງ."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"ອະນຸຍາດ"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"ປະຕິເສດ"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ແມ່ນໜ້າຕ່າງລະດັບສຽງ"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"ແຕະເພື່ອກູ້ຕົ້ນສະບັບຄືນມາ."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"ທ່ານກຳລັງໃຊ້ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກຂອງທ່ານ"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"ໂທ"</item>
- <item msgid="5997713001067658559">"ລະບົບ"</item>
- <item msgid="7858983209929864160">"ເຕືອນດ້ວຍສຽງ"</item>
- <item msgid="1850038478268896762">"ມີເດຍ"</item>
- <item msgid="8265110906352372092">"ໂມງປຸກ"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"ການຊ່ວຍເຂົ້າເຖິງ"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"ໂທ"</string>
+ <string name="stream_system" msgid="7493299064422163147">"ລະບົບ"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"ເຕືອນດ້ວຍສຽງ"</string>
+ <string name="stream_music" msgid="9086982948697544342">"ມີເດຍ"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"ໂມງປຸກ"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"ການແຈ້ງເຕືອນ"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"ບຣູທູດ"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Dual multi tone frequency"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"ການຊ່ວຍເຂົ້າເຖິງ"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. ແຕະເພື່ອເຊົາປິດສຽງ."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. ແຕະເພື່ອຕັ້ງເປັນສັ່ນ. ບໍລິການຊ່ວຍເຂົ້າເຖິງອາດຖືກປິດສຽງໄວ້."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. ແຕະເພື່ອປິດສຽງ. ບໍລິການຊ່ວຍເຂົ້າເຖິງອາດຖືກປິດສຽງໄວ້."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"ການຕັ້ງຄ່າດ່ວນ"</string>
<string name="status_bar" msgid="4877645476959324760">"ແຖບສະຖານະ"</string>
<string name="overview" msgid="4018602013895926956">"ພາບຮວມ"</string>
- <string name="demo_mode" msgid="2389163018533514619">"ໂໝດສາທິດ"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"ໂໝດເດໂມສ່ວນຕິດຕໍ່ຜູ້ໃຊ້ລະບົບ"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"ເປີດໃຊ້ໂໝດສາທິດ"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"ສະແດງໂຫມດສາທິດ"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"ອີເທເນັດ"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"ເປີດ"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"ປິດ"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"ດ້ວຍການຄວບຄຸມການແຈ້ງເຕືອນ, ທ່ານສາມາດຕັ້ງລະດັບຄວາມສຳຄັນຈາກ 0 ຮອດ 5 ໃຫ້ກັບການແຈ້ງເຕືອນແອັບໃດໜຶ່ງໄດ້. \n\n"<b>"ລະດັບ 5"</b>" \n- ສະແດງຢູ່ເທິງສຸດຂອງລາຍການແຈ້ງເຕືອນ \n- ອະນຸຍາດໃຫ້ຂັດຈັງຫວະຕອນເປີດເຕັມຈໍ \n- ແນມເບິ່ງທຸກເທື່ອ \n\n"<b>"ລະດັບ 4"</b>" \n- ກັນບໍ່ໃຫ້ຂັດຈັງຫວະຕອນເປີດເຕັມຈໍ \n- ແນມເບິ່ງທຸກເທື່ອ \n\n"<b>"ລະດັບ 3"</b>" \n- ກັນບໍ່ໃຫ້ຂັດຈັງຫວະຕອນເປີດເຕັມຈໍ \n- ບໍ່ແນມເບິ່ງ \n\n"<b>"ລະດັບ 2"</b>" \n- ກັນບໍ່ໃຫ້ຂັດຈັງຫວະຕອນເປີດເຕັມຈໍ \n- ບໍ່ແນມເບິ່ງ \n- ບໍ່ມີສຽງ ແລະ ບໍ່ມີການສັ່ນເຕືອນ \n\n"<b>"ລະດັບ 1"</b>" \n- ກັນບໍ່ໃຫ້ຂັດຈັງຫວະຕອນເປີດເຕັມຈໍ \n- ບໍ່ແນມເບິ່ງ \n- ບໍ່ມີສຽງ ແລະ ບໍ່ມີການສັ່ນເຕືອນ \n- ເຊື່ອງຈາກໜ້າຈໍລັອກ ແລະ ແຖບສະຖານະ \n- ສະແດງຢູ່ລຸ່ມສຸດຂອງລາຍການແຈ້ງເຕືອນ \n\n"<b>"ລະດັບ 0"</b>" \n- ປິດກັ້ນການແຈ້ງເຕືອນທັງໝົດຈາກແອັບ"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"ຄວາມສຳຄັນ: ອັດຕະໂນມັດ"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"ຄວາມສຳຄັນ: ລະດັບ 0"</string>
- <string name="min_importance" msgid="560779348928574878">"ຄວາມສຳຄັນ: ລະດັບ 1"</string>
- <string name="low_importance" msgid="7571498511534140">"ຄວາມສຳຄັນ: ລະດັບ 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"ຄວາມສຳຄັນ: ລະດັບ 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"ຄວາມສຳຄັນ: ລະດັບ 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"ຄວາມສຳຄັນ: ລະດັບ 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"ແອັບຈະກຳນົດຄວາມສຳຄັນຂອງການແຈ້ງເຕືອນແຕ່ລະອັນ."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"ບໍ່ຕ້ອງສະແດງການແຈ້ງເຕືອນຈາກແອັບນີ້."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"ບໍ່ມີການຂັດຈັງຫວະຕອນເປີດເຕັມໜ້າຈໍ, ບໍ່ມີການແນມເບິ່ງ, ສຽງ ຫຼື ການສັ່ນ. ເຊື່ອງຈາກໜ້າຈໍລັອກ ແລະ ແຖບສະຖານະ."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"ບໍ່ມີການຂັດຈັງຫວະຕອນເປີດເຕັມໜ້າຈໍ, ບໍ່ມີການແນມເບິ່ງ, ສຽງ ຫຼື ການສັ່ງ."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"ບໍ່ມີການຂັດຈັງຫວະຕອນເປີດເຕັມໜ້າຈໍ ຫຼື ແນມເບິ່ງ."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"ແນມເບິ່ງທຸກເທື່ອ. ບໍ່ມີການຂັດຈັງຫວະຕອນເປີດເຕັມໜ້າຈໍ."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"ແນມເບິ່ງທຸກເທື່ອ ແລະ ອະນຸຍາດໃຫ້ຂັດຈັງຫວະຕອນເປີດເຕັມໜ້າຈໍໄດ້."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"ການຕັ້ງຄ່າເພີ່ມເຕີມ"</string>
<string name="notification_done" msgid="5279426047273930175">"ສຳເລັດແລ້ວ"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"ການຄວບຄຸມການແຈ້ງເຕືອນ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"ແກ້ໄຂລຳດັບການຕັ້ງຄ່າ."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_1">%1$d</xliff:g> ຈາກທັງໝົດ <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"ຂະຫຍາຍ"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"ຫຍໍ້"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"ປິດໄວ້"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"ໂທລະສັບກຳລັງຮ້ອນຂຶ້ນ"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"ຄຸນສົມບັດບາງຢ່າງຖືກຈຳກັດໄວ້ເນື່ອງໃນເວລາຫຼຸດອຸນຫະພູມຂອງໂທລະສັບ"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"ໂທລະສັບຂອງທ່ານຈະພະຍາຍາມລົດອຸນຫະພູມລົງ. ທ່ານຍັງຄົງສາມາດໃຊ້ໂທລະສັບຂອງທ່ານໄດ້ຢູ່, ແຕ່ມັນຈະເຮັດວຽກຊ້າລົງ.\n\nເມື່ອໂທລະສັບຂອງທ່ານບໍ່ຮ້ອນຫຼາຍແລ້ວ, ມັນຈະກັບມາເຮັດວຽກຕາມປົກກະຕິ."</string>
</resources>
diff --git a/packages/SystemUI/res/values-lo-rLA/strings_car.xml b/packages/SystemUI/res/values-lo/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-lo-rLA/strings_car.xml
rename to packages/SystemUI/res/values-lo/strings_car.xml
diff --git a/packages/SystemUI/res/values-lo-rLA/strings_tv.xml b/packages/SystemUI/res/values-lo/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-lo-rLA/strings_tv.xml
rename to packages/SystemUI/res/values-lo/strings_tv.xml
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 6dfdbe6..649e42a 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -165,6 +165,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Įkraunamas akumuliatorius, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> proc."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Sistemos nustatymai"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Pranešimai."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Pranešimų perpildymo sudėtinis rodinys"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Išvalyti pranešimą."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS įgalintas."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Gaunama GPS."</string>
@@ -186,6 +187,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Užrakinimo ekranas."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Nustatymai"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Apžvalga."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Uždaryti"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"„Wi-Fi“ ryšys išjungtas."</string>
@@ -404,18 +407,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Viską išvalyti"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Pradėti dabar"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Nėra įspėjimų"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Įrenginys gali būti stebimas"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profilis gali būti stebimas"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Tinklas gali būti stebimas"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Tinklas gali būti stebimas"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Įrenginio stebėjimas"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilio stebėjimas"</string>
<string name="monitoring_title" msgid="169206259253048106">"Tinklo stebėjimas"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Tinklo duomenų įrašymas į žurnalą"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Išjungti VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Atjungti VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Jūsų įrenginį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“.\n\nAdministratorius gali stebėti ir tvarkyti nustatymus, įmonės informacijos pasiekiamumo nustatymus, programas, su įrenginiu susietus duomenis ir įrenginio vietovės informaciją. Daugiau informacijos galite gauti susisiekę su administratoriumi."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Įrenginį tvarko „<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>“."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"„<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>“ naudoja „<xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>“ įrenginiui tvarkyti."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administr. gali stebėti ir tvark. nustat., įmonės prieigos par., progr., su įreng. susietus duomenis ir įreng. vietovės inform."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Sužinoti daugiau"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Esate prisijungę prie programos „<xliff:g id="VPN_APP">%1$s</xliff:g>“, kuri gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Atidaryti VPN nustatymus"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administratorius įjungė tinklo duomenų įrašymą į žurnalą. Įjungus šią funkciją stebimas srautas jūsų įrenginyje.\n\nJei reikia daugiau informacijos, susisiekite su administratoriumi."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Suteikėte programai leidimą nustatyti VPN ryšį.\n\nŠi programa gali stebėti įrenginio ir tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Jūsų įrenginį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“.\n\nAdministratorius gali stebėti ir tvarkyti nustatymus, įmonės informacijos pasiekiamumo nustatymus, programas, su įrenginiu susietus duomenis ir įrenginio vietos informaciją.\n\nEsate prisijungę prie VPN, kuris gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines.\n\nDaugiau informacijos galite gauti susisiekę su administratoriumi."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Jūsų darbo profilį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“.\n\nAdministratorius gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines.\n\nDaugiau informacijos galite gauti susisiekę su administratoriumi.\n\nBe to, esate prisijungę prie VPN, kuris gali stebėti tinklo veiklą."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Esate prisijungę prie programos „<xliff:g id="APPLICATION">%1$s</xliff:g>“, kuri gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
@@ -423,7 +434,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Esate prisijungę prie programos „<xliff:g id="APPLICATION">%1$s</xliff:g>“, kuri gali stebėti asmeninio tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Darbo profilį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“. Jis susietas su programa „<xliff:g id="APPLICATION">%2$s</xliff:g>“, kuri gali stebėti darbo profilio tinklo veiklą, įskaitant el. laiškus, programas ir svetaines.\n\nDaugiau informacijos galite gauti susisiekę su administratoriumi."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Darbo profilį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“. Jis susietas su programa „<xliff:g id="APPLICATION_WORK">%2$s</xliff:g>“, kuri gali stebėti darbo profilio tinklo veiklą, įskaitant el. laiškus, programas ir svetaines.\n\nTaip pat esate prisijungę prie programos „<xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>“, kuri gali stebėti asmeninio profilio tinklo veiklą."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Jūsų įrenginį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“.\n\nAdministratorius gali stebėti ir tvarkyti nustatymus, įmonės informacijos pasiekiamumo nustatymus, programas, su įrenginiu susietus duomenis ir įrenginio vietovės informaciją.\n\nEsate prisijungę prie programos „<xliff:g id="APPLICATION">%2$s</xliff:g>“, kuri gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines.\n\nDaugiau informacijos galite gauti susisiekę su administratoriumi."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Įrenginys liks užrakintas, kol neatrakinsite jo neautomatiniu būdu"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Greičiau gaukite pranešimus"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Peržiūrėti prieš atrakinant"</string>
@@ -434,31 +444,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Išskleisti"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Sutraukti"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Ekranas prisegtas"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Tai bus rodoma, kol atsegsite. Palieskite ir palaikykite „Atgal“, kad atsegtumėte."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Supratau"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Ne, ačiū"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Slėpti „<xliff:g id="TILE_LABEL">%1$s</xliff:g>“?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Tai bus vėl parodyta, kai kitą kartą įjungsite tai nustatymuose."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Slėpti"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ nori būti garsumo valdymo dialogo langu."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Leisti"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Atmesti"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ yra garsumo valdymo dialogo langas"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Palieskite, kad atkurtumėte originalą."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Naudojate darbo profilį"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Skambinti"</item>
- <item msgid="5997713001067658559">"Sistema"</item>
- <item msgid="7858983209929864160">"Skambinti"</item>
- <item msgid="1850038478268896762">"Medija"</item>
- <item msgid="8265110906352372092">"Signalas"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Pritaikymas neįgaliesiems"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Skambutis"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistema"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Skambutis"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Medija"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Signalas"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Pranešimas"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Dvigubas kelių tonų dažnis"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Pritaikymas neįgaliesiems"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Palieskite, kad įjungtumėte garsą."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Palieskite, kad nustatytumėte vibravimą. Gali būti nutildytos pritaikymo neįgaliesiems paslaugos."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Palieskite, kad nutildytumėte. Gali būti nutildytos pritaikymo neįgaliesiems paslaugos."</string>
@@ -470,7 +474,7 @@
<string name="quick_settings" msgid="10042998191725428">"Spartieji nustatymai"</string>
<string name="status_bar" msgid="4877645476959324760">"Būsenos juosta"</string>
<string name="overview" msgid="4018602013895926956">"Apžvalga"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Demonstracinis režimas"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Sistemos NS demonstracinis režimas"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Įgalinti demonstracinį režimą"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Rodyti demonstraciniu režimu"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Eternetas"</string>
@@ -510,20 +514,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Įjungta"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Išjungta"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Naudodami pranešimų valdiklius galite nustatyti programos pranešimų svarbos lygį nuo 0 iki 5. \n\n"<b>"5 lygis"</b>" \n– Rodyti pranešimų sąrašo viršuje \n– Leisti pertraukti, kai veikia viso ekrano režimas \n– Visada rodyti pranešimus \n\n"<b>"4 lygis"</b>" \n– Neleisti pertraukti viso ekrano režimo \n– Visada rodyti pranešimus \n\n"<b>"3 lygis"</b>" \n– Neleisti pertraukti viso ekrano režimo \n– Niekada nerodyti pranešimų \n\n"<b>"2 lygis"</b>" \n– Neleisti pertraukti viso ekrano režimo \n– Niekada nerodyti pranešimų \n– Niekada neleisti garso ir nevibruoti \n\n"<b>"1 lygis"</b>" \n– Neleisti pertraukti viso ekrano režimo \n– Niekada nerodyti pranešimų \n– Niekada neleisti garso ir nevibruoti \n– Slėpti užrakinimo ekrane ir būsenos juostoje \n– Rodyti pranešimų sąrašo apačioje \n\n"<b>"0 lygis"</b>" \n– Blokuoti visus programos pranešimus"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Svarba: automatinė"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Svarba: 0 lygis"</string>
- <string name="min_importance" msgid="560779348928574878">"Svarba: 1 lygis"</string>
- <string name="low_importance" msgid="7571498511534140">"Svarba: 2 lygis"</string>
- <string name="default_importance" msgid="7609889614553354702">"Svarba: 3 lygis"</string>
- <string name="high_importance" msgid="3441537905162782568">"Svarba: 4 lygis"</string>
- <string name="max_importance" msgid="4880179829869865275">"Svarba: 5 lygis"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Programa nustato kiekvieno pranešimo svarbą."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Niekada nerodyti iš šios programos gautų pranešimų."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Viso ekrano režimas nepertraukiamas, nerodomi jokie pranešimai, neleidžiami garsai ir nevibruojama. Slėpti nuo užrakinimo ekrano ir būsenos juostos."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Viso ekrano režimas nepertraukiamas, nerodomi jokie pranešimai, neleidžiami garsai ir nevibruojama."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Viso ekrano režimas nepertraukiamas ir jam veikiant nerodomi jokie pranešimai."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Visada rodyti pranešimus. Viso ekrano režimas nepertraukiamas."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Visada rodyti pranešimus ir leisti pertraukti viso ekrano režimą."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Daugiau nustatymų"</string>
<string name="notification_done" msgid="5279426047273930175">"Atlikta"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ pranešimų valdikliai"</string>
@@ -656,4 +668,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Redaguoti nustatymų tvarką."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_1">%1$d</xliff:g> psl. iš <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Išskleisti"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Sumažinti"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Atsisakyti"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Telefonas kaista"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Kai kurios funkcijos gali neveikti, kol telefonas vėsta"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Telefonas automatiškai bandys atvėsti. Telefoną vis tiek galėsite naudoti, tačiau jis gali veikti lėčiau.\n\nKai telefonas atvės, jis veiks įprastai."</string>
</resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 3862a8e..c230313 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -164,6 +164,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Notiek akumulatora uzlāde, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> procenti."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Sistēmas iestatījumi"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Paziņojumi"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Paziņojumu pārpildes konteiners"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Notīrīt paziņojumu"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ir iespējots."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS iegūšana."</string>
@@ -185,6 +186,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Bloķēšanas ekrāns."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Iestatījumi"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Pārskats."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Aizvērt"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi ir izslēgts."</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Dzēst visu"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Sākt tūlīt"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Nav paziņojumu"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Ierīci var pārraudzīt"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profilu var pārraudzīt"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Iespējams, tīklā veiktās darbības tiek pārraudzītas."</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Var tikt pārraudzītas tīklā veiktās darbības."</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Ierīces pārraudzība"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profila pārraudzība"</string>
<string name="monitoring_title" msgid="169206259253048106">"Tīkla pārraudzība"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Tīkla reģistrēšana"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Atspējot VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Atvienot VPN tīklu"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Jūsu ierīci pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJūsu administrators var pārraudzīt un pārvaldīt iestatījumus, korporatīvo piekļuvi, lietotnes un datus, kas ir saistīti ar šo ierīci, kā arī informāciju par jūsu ierīces atrašanās vietu. Lai iegūtu plašāku informāciju, sazinieties ar administratoru."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Jūsu ierīci pārvalda <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> izmanto lietotni <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> jūsu ierīces pārvaldībai."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administrators var pārraudzīt un pārvaldīt iestatījumus, korporatīvo piekļuvi, lietotnes, ierīces datus un informāciju par ierīces atrašanās vietu."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Uzzināt vairāk"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Ir izveidots savienojums ar lietotni <xliff:g id="VPN_APP">%1$s</xliff:g>, kas var pārraudzīt jūsu darbības tīklā, tostarp e-pasta ziņojumus, lietotnes un vietnes."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Atvērt VPN iestatījumus"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administrators ir ieslēdzis tīkla reģistrēšanu, kuru izmanto, lai pārraudzītu datplūsmu jūsu ierīcē.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Jūs piešķīrāt lietotnei atļauju izveidot savienojumu ar VPN tīklu.\n\nŠī lietotne var pārraudzīt jūsu ierīcē un tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Jūsu ierīci pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJūsu administrators var pārraudzīt un pārvaldīt iestatījumus, korporatīvo piekļuvi, lietotnes un datus, kas ir saistīti ar šo ierīci, kā arī informāciju par jūsu ierīces atrašanās vietu.\n\nIerīcē ir izveidots savienojums ar VPN tīklu, kurā var tikt pārraudzītas jūsu tīklā veiktās darbības, tostarp e-pasts, lietotnes un vietnes.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Jūsu darba profilu pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJūsu administrators var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru.\n\nIerīcē ir arī izveidots savienojums ar VPN tīklu, kurā var tikt pārraudzītas jūsu tīklā veiktās darbības."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Ir izveidots savienojums ar lietotni <xliff:g id="APPLICATION">%1$s</xliff:g>, kura var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes."</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Ir izveidots savienojums ar lietotni <xliff:g id="APPLICATION">%1$s</xliff:g>, kas var pārraudzīt jūsu tīklā veiktās privātās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Jūsu darba profilu pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Tas ir saistīts ar lietojumprogrammu <xliff:g id="APPLICATION">%2$s</xliff:g>, kura var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Jūsu darba profilu pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Tas ir saistīts ar lietojumprogrammu <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, kura var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes.\n\nIr piesaistīta arī lietojumprogramma <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, kas var pārraudzīt jūsu tīklā veiktās privātās darbības."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Jūsu ierīci pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJūsu administrators var pārraudzīt un pārvaldīt iestatījumus, korporatīvo piekļuvi, lietotnes un datus, kas ir saistīti ar šo ierīci, kā arī informāciju par jūsu ierīces atrašanās vietu.\n\nIr piesaistīta lietojumprogramma <xliff:g id="APPLICATION">%2$s</xliff:g>, kas var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Ierīce būs bloķēta, līdz to manuāli atbloķēsiet."</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Saņemiet paziņojumus ātrāk"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Skatiet tos pirms atbloķēšanas."</string>
@@ -432,31 +442,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Izvērst"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Sakļaut"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Ekrāns ir piesprausts"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Ekrāns tiek rādīts, kamēr tas nav atsprausts. Lai atspraustu, pieskarieties taustiņam Atpakaļ un turiet to."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Sapratu!"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Nē, paldies"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Vai paslēpt vienumu <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Tas tiks atkārtoti parādīts, kad nākamreiz ieslēgsiet to iestatījumos."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Paslēpt"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> vēlas pārvaldīt skaļuma dialoglodziņu."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Atļaut"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Neatļaut"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ir skaļuma dialoglodziņš"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Pieskarieties, lai atjaunotu sākotnējo saturu."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Jūs izmantojat darba profilu."</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Zvans"</item>
- <item msgid="5997713001067658559">"Sistēma"</item>
- <item msgid="7858983209929864160">"Zvanīt"</item>
- <item msgid="1850038478268896762">"Multivide"</item>
- <item msgid="8265110906352372092">"Signāls"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Pieejamība"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Zvans"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistēma"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Zvans"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Multivide"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Signāls"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Paziņojums"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Divtoņu daudzfrekvenču signalizācija"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Pieejamība"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Pieskarieties, lai ieslēgtu skaņu."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Pieskarieties, lai iestatītu uz vibrozvanu. Var tikt izslēgti pieejamības pakalpojumu signāli."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Pieskarieties, lai izslēgtu skaņu. Var tikt izslēgti pieejamības pakalpojumu signāli."</string>
@@ -468,7 +472,7 @@
<string name="quick_settings" msgid="10042998191725428">"Ātrie iestatījumi"</string>
<string name="status_bar" msgid="4877645476959324760">"Statusa josla"</string>
<string name="overview" msgid="4018602013895926956">"Pārskats"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Demonstrācijas režīms"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Sistēmas lietotāja saskarnes demonstrācijas režīms"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Iespējot demonstrācijas režīmu"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Rādīt demonstrācijas režīmu"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Tīkls Ethernet"</string>
@@ -508,20 +512,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Ieslēgts"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Izslēgts"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Izmantojot barošanas paziņojumu vadīklas, varat lietotnes paziņojumiem iestatīt svarīguma līmeni (no 0 līdz 5). \n\n"<b>"5. līmenis"</b>" \n- Tiek rādīts paziņojumu saraksta augšdaļā \n- Tiek atļauta pilnekrāna režīma pārtraukšana \n- Ieskats vienmēr atļauts \n\n"<b>"4. līmenis"</b>" \n- Tiek novērsta pilnekrāna režīma pārtraukšana \n- Ieskats vienmēr atļauts \n\n"<b>"3. līmenis"</b>" \n- Tiek novērsta pilnekrāna režīma pārtraukšana \n- Ieskats nav atļauts \n\n"<b>"2. līmenis"</b>" \n- Tiek novērsta pilnekrāna režīma pārtraukšana \n- Ieskats nav atļauts \n- Nav atļautas skaņas un vibrosignāls \n\n"<b>"1. līmenis"</b>" \n- Tiek novērsta pilnekrāna režīma pārtraukšana \n- Ieskats nav atļauts \n- Nav atļautas skaņas un vibrosignāls \n- Paziņojumi tiek paslēpti bloķēšanas ekrānā un statusa joslā \n- Paziņojumi tiek rādīti paziņojumu saraksta apakšdaļā \n\n"<b>"0. līmenis"</b>" \n- Visi lietotnes paziņojumi tiek bloķēti"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Svarīgums: automātisks"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Svarīguma līmenis: 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Svarīguma līmenis: 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Svarīguma līmenis: 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Svarīguma līmenis: 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Svarīguma līmenis: 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Svarīguma līmenis: 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Lietotne nosaka katra paziņojuma svarīgumu."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Nekad nerādīt paziņojumus no šīs lietotnes."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Bez pilnekrāna pārtraukšanas, ieskata, skaņas, vibrācijas. Paslēpt bloķēšanas ekrānā, statusa joslā."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Nav pieejama pilnekrāna režīma pārtraukšana, ieskats, skaņa vai vibrosignāls."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Nav pieejama pilnekrāna režīma pārtraukšana vai ieskats."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Vienmēr atļaut ieskatu. Nav pieejama pilnekrāna režīma pārtraukšana."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Vienmēr atļaut ieskatu un atļaut pilnekrāna režīma pārtraukšanu."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Citi iestatījumi"</string>
<string name="notification_done" msgid="5279426047273930175">"Gatavs"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> paziņojumu vadīklas"</string>
@@ -654,4 +666,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Rediģēt iestatījumu secību."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_1">%1$d</xliff:g>. lpp. no <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Izvērst"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizēt"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Noraidīt"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Tālrunis kļūst silts"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Dažas funkcijas ir ierobežotas, kamēr tālrunis mēģina atdzist"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Jūsu tālrunis automātiski mēģinās atdzist. Jūs joprojām varat izmantot tālruni, taču tas, iespējams, darbosies lēnāk.\n\nTiklīdz tālrunis būs atdzisis, tas darbosies normāli."</string>
</resources>
diff --git a/packages/SystemUI/res/values-mk-rMK-land/strings.xml b/packages/SystemUI/res/values-mk-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-mk-rMK-land/strings.xml
rename to packages/SystemUI/res/values-mk-land/strings.xml
diff --git a/packages/SystemUI/res/values-mk-rMK/config.xml b/packages/SystemUI/res/values-mk/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-mk-rMK/config.xml
rename to packages/SystemUI/res/values-mk/config.xml
diff --git a/packages/SystemUI/res/values-mk-rMK/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
similarity index 92%
rename from packages/SystemUI/res/values-mk-rMK/strings.xml
rename to packages/SystemUI/res/values-mk/strings.xml
index 5d28e2b..110812b 100644
--- a/packages/SystemUI/res/values-mk-rMK/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Полнење на батеријата, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> проценти."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Поставки на систем."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Известувања"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Контејнер за прелевање на известувања"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Избриши известување."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS е овозможен."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Се добива GPS..."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Заклучи екран."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Поставки"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Краток преглед."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Затвори"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi е исклученo."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Исчисти сè"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Започни сега"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Нема известувања"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Уредот може да се следи"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Профилот можеби се следи"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Мрежата може да се следи"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Мрежата може да се следи"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Следење на уредот"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Следење профил"</string>
<string name="monitoring_title" msgid="169206259253048106">"Следење на мрежата"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Евиденција на мрежа"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Оневозможи ВПН"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Исклучи ВПН"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Со вашиот уред управува <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nВашиот администратор може да ги следи и да управува со поставките, корпоративните пристапи, апликациите, податоците поврзани со вашиот уред и информациите за локација на уредот. За повеќе информации, контактирајте со администраторот."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> управува со уредов."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ја користи <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> за да управува со вашиот уред."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Админ. може да следи и да управува со: поставки, корпоративен пристап, апликации, податоци за уредот и информации за локација."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Дознајте повеќе"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Поврзани сте на <xliff:g id="VPN_APP">%1$s</xliff:g>, којашто може да ја следи вашата активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-сајтовите."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Отворете „Поставки за VPN“"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Вашиот администратор вклучил евиденција на мрежата, што подразбира следење на сообраќајот на вашиот уред.\n\nЗа повеќе информации, контактирајте со администраторот."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Дозволивте апликацијата да постави поврзување преку ВПН.\n\nАпликацијата може да го следи уредот и активноста на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Со вашиот уред управува <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nВашиот администратор може да ги следи и да управува со поставките, корпоративните пристапи, апликациите, податоците поврзани со вашиот уред и информациите за локација на уредот.\n\nПоврзани сте со VPN што може да ја следи вашата мрежна активност, вклучувајќи е-пошта, апликации и веб-локации.\n\nЗа повеќе информации, контактирајте со администраторот."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> управува со вашиот работен профил.\n\nАдминистратор е во можност да ја следи вашата активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите.\n\nЗа повеќе информации, контактирајте со администраторот.\n\nИсто така, поврзани сте на ВПН, којашто може да ја следи вашата активност на мрежата."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"ВПН"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Поврзани сте на <xliff:g id="APPLICATION">%1$s</xliff:g>, којашто може да ја следи вашата активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Поврзани сте на <xliff:g id="APPLICATION">%1$s</xliff:g>, којашто може да ја следи вашата лична активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> управува со вашиот работен профил. Истиот е поврзан на <xliff:g id="APPLICATION">%2$s</xliff:g>, којашто може да ја следи вашата работна активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите.\n\nЗа повеќе информации, контактирајте со администраторот."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> управува со вашиот работен профил. Истиот е поврзан на <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, којашто може да ја следи вашата работна активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите.\n\nВие исто така сте поврзани на <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, којашто може да ја следи вашата лична активност на мрежата."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> управува со вашиот уред.\n\nВашиот администратор може да ги следи и да управува со параметрите, корпоративниот пристап, апликациите, податоците поврзани со уредот и информациите за локацијата на уредот.\n\nПоврзани сте на <xliff:g id="APPLICATION">%2$s</xliff:g>, којашто може да ја следи вашата активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите.\n\nЗа повеќе информации, контактирајте со администраторот."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Уредот ќе остане заклучен додека рачно не го отклучите"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Добивајте известувања побрзо"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Видете ги пред да отклучите"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Прошири"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Собери"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Екранот е прикачен"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Ќе се гледа сѐ додека не го откачите. Допрете и држете Назад за откачување."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Сфатив"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Не, фала"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Сокриј <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ќе се појави повторно следниот пат кога ќе го вклучите во поставки."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Сокриј"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> сака да биде дијалог за јачина на звук."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Овозможи"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Одбиј"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> е дијалог за јачина на звук"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Допрете за да го вратите оригиналот."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Го користите работниот профил"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Повикај"</item>
- <item msgid="5997713001067658559">"Систем"</item>
- <item msgid="7858983209929864160">"Ѕвони"</item>
- <item msgid="1850038478268896762">"Аудио-визуелни содржини"</item>
- <item msgid="8265110906352372092">"Аларм"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Пристапност"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Повик"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Систем"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Ѕвони"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Аудио-визуелни содржини"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Аларм"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Известување"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Двојна повеќетонска фреквенција"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Пристапност"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Допрете за да вклучите звук."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Допрете за да поставите на вибрации. Можеби ќе се исклучи звукот на услугите за достапност."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Допрете за да исклучите звук. Можеби ќе се исклучи звукот на услугите за достапност."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Брзи поставки"</string>
<string name="status_bar" msgid="4877645476959324760">"Статусна лента"</string>
<string name="overview" msgid="4018602013895926956">"Краток преглед"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Демо-режим"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Демо-режим на кориснички интерфејс на систем"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Овозможи демо-режим"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Прикажи демо-режим"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Етернет"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Вклучено"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Исклучено"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Со контролите за известувањата за напојување, може да поставите ниво на важност од 0 до 5 за известувањата на која било апликација. \n\n"<b>"Ниво 5"</b>" \n- Прикажувај на врвот на списокот со известувања \n- Дозволи прекин во цел екран \n- Секогаш користи појавување \n\n"<b>"Ниво 4"</b>" \n- Спречи прекин во цел екран \n- Секогаш користи појавување \n\n"<b>"Ниво 3"</b>" \n- Спречи прекин во цел екран \n- Без појавување \n\n"<b>"Ниво 2"</b>" \n- Спречи прекин во цел екран \n- Без појавување \n- Без звук и вибрации \n\n"<b>"Ниво 1"</b>" \n- Спречи прекин во цел екран \n- Без појавување \n- Без звук и вибрации \n- Сокриј од заклучен екран и статусна лента \n- Прикажувај на дното на списокот со известувања \n\n"<b>"Ниво 0"</b>" \n- Блокирај ги сите известувања од апликацијата"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Важност: автоматски"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Важност: ниво 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Важност: ниво 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Важност: ниво 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Важност: ниво 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Важност: ниво 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Важност: ниво 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Апликацијата ја одредува важноста за секое известување."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Никогаш не прикажувај известувања од оваа апликација."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Без прекин, појавување, звук или вибрации во цел екран. Сокриј од заклучен екран и статусна лента."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Без прекин, појавување, звук или вибрации во цел екран."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Без прекини и појавувања во цел екран."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Секогаш користи појавување. Без прекини во цел екран."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Секогаш користи појавување и дозволи прекин во цел екран."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Повеќе поставки"</string>
<string name="notification_done" msgid="5279426047273930175">"Готово"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Контроли за известувања на <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Уредете го редоследот на поставките."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Страница <xliff:g id="ID_1">%1$d</xliff:g> од <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Проширете"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Минимизирај"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Отфрли"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Телефонот се загрева"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Некои функции се ограничени додека телефонот се лади"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Телефонот автоматски ќе се обиде да се олади. Вие сепак ќе може да го користите, но тој може да работи побавно.\n\nОткако ќе се олади, ќе работи нормално."</string>
</resources>
diff --git a/packages/SystemUI/res/values-mk-rMK/strings_car.xml b/packages/SystemUI/res/values-mk/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-mk-rMK/strings_car.xml
rename to packages/SystemUI/res/values-mk/strings_car.xml
diff --git a/packages/SystemUI/res/values-mk-rMK/strings_tv.xml b/packages/SystemUI/res/values-mk/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-mk-rMK/strings_tv.xml
rename to packages/SystemUI/res/values-mk/strings_tv.xml
diff --git a/packages/SystemUI/res/values-ml-rIN-land/strings.xml b/packages/SystemUI/res/values-ml-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-ml-rIN-land/strings.xml
rename to packages/SystemUI/res/values-ml-land/strings.xml
diff --git a/packages/SystemUI/res/values-ml-rKL-land/strings.xml b/packages/SystemUI/res/values-ml-rKL-land/strings.xml
deleted file mode 100644
index 97338ee..0000000
--- a/packages/SystemUI/res/values-ml-rKL-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"ലാൻഡ്സ്കേപ്പ് ഓറിയന്റേഷനിൽ സ്ക്രീൻ ലോക്കുചെയ്തു."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ml-rIN/config.xml b/packages/SystemUI/res/values-ml/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-ml-rIN/config.xml
rename to packages/SystemUI/res/values-ml/config.xml
diff --git a/packages/SystemUI/res/values-ml-rIN/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
similarity index 91%
rename from packages/SystemUI/res/values-ml-rIN/strings.xml
rename to packages/SystemUI/res/values-ml/strings.xml
index f24b1e6..4c4a99b 100644
--- a/packages/SystemUI/res/values-ml-rIN/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"ബാറ്ററി ചാർജുചെയ്യുന്നു, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> ശതമാനം."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"സിസ്റ്റം ക്രമീകരണങ്ങൾ."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"അറിയിപ്പുകൾ."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"അറിയിപ്പ് ഓവർഫ്ലോ കണ്ടെയിനർ"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"വിവരം മായ്ക്കുക."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS പ്രവർത്തനക്ഷമമായി."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS നേടുന്നു."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ലോക്ക് സ്ക്രീൻ."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"ക്രമീകരണം"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"കാഴ്ച."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"അടയ്ക്കുക"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"വൈഫൈ ഓഫാക്കി."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"എല്ലാം മായ്ക്കുക"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"ഇപ്പോൾ ആരംഭിക്കുക"</string>
<string name="empty_shade_text" msgid="708135716272867002">"അറിയിപ്പുകൾ ഒന്നുമില്ല"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"ഉപകരണം നിരീക്ഷിക്കപ്പെടാം"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"പ്രൊഫൈൽ നിരീക്ഷിക്കപ്പെടാം"</string>
<string name="vpn_footer" msgid="2388611096129106812">"നെറ്റ്വർക്ക് നിരീക്ഷിക്കപ്പെടാം"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"നെറ്റ്വർക്ക് നിരീക്ഷിക്കപ്പെടാം"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"ഉപകരണം നിരീക്ഷിക്കൽ"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"പ്രൊഫൈൽ നിരീക്ഷിക്കൽ"</string>
<string name="monitoring_title" msgid="169206259253048106">"നെറ്റ്വർക്ക് നിരീക്ഷിക്കൽ"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"നെറ്റ്വർക്ക് ലോഗിംഗ്"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN പ്രവർത്തനരഹിതമാക്കുക"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN വിച്ഛേദിക്കുക"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"നിങ്ങളുടെ ഉപകരണം നിയന്ത്രിക്കുന്നത് <xliff:g id="ORGANIZATION">%1$s</xliff:g> ആണ്.\n\nനിങ്ങളുടെ അഡ്മിനിസ്ട്രേറ്റർക്ക്, ഉപകരണവുമായി ബന്ധപ്പെട്ട ക്രമീകരണവും കോർപ്പറേറ്റ് ആക്സസ്സും അപ്ലിക്കേഷനുകളും വിവരവും ഒപ്പം ഉപകരണത്തിന്റെ ലൊക്കേഷൻ വിവരവും നിരീക്ഷിച്ച് നിയന്ത്രിക്കാനാകും. കൂടുതൽ വിവരങ്ങൾക്ക്, അഡ്മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"നിങ്ങളുടെ ഉപകരണം മാനേജുചെയ്യുന്നത് <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ആണ്."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"നിങ്ങളുടെ ഉപകരണം മാനേജുചെയ്യാൻ <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ഉപയോഗിക്കുന്നത് <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ആണ്."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"ഈ ഉപകരണവുമായി ബന്ധപ്പെട്ട ക്രമീകരണം, കോർപ്പറേറ്റ് ആക്സസ്സ്, ആപ്സ്, വിവരങ്ങൾ എന്നിവയും ഉപകരണത്തിന്റെ ലൊക്കേഷൻ വിവരവും നിരീക്ഷിക്കാനും മാനേജുചെയ്യാനും അഡ്മിനിസ്ട്രേറ്റർക്ക് കഴിയും."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" 5"</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"കൂടുതലറിയുക"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"നിങ്ങൾ <xliff:g id="VPN_APP">%1$s</xliff:g> ആപ്പിലേക്ക് കണക്റ്റുചെയ്തിരിക്കുന്നു, ഇമെയിലുകൾ, ആപ്സ്, വെബ്സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നിങ്ങളുടെ നെറ്റ്വർക്ക് ആക്റ്റിവിറ്റി നിരീക്ഷിക്കാൻ ഈ ആപ്പിന് കഴിയും."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" 5"</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN ക്രമീകരണം തുറക്കുക"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"നിങ്ങളുടെ അഡ്മിൻ, ഉപകരണത്തിലെ ട്രാഫിക്ക് നിരീക്ഷിക്കുന്ന നെറ്റ്വർക്ക് ലോഗിംഗ് ഓണാക്കിയിട്ടുണ്ട്.\n\nകൂടുതൽ വിവരങ്ങൾക്ക് നിങ്ങളുടെ അഡ്മിനെ ബന്ധപ്പെടുക."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"VPN കണക്ഷൻ സജ്ജീകരിക്കാൻ നിങ്ങൾ ഒരു ആപ്പിന് അനുമതി നൽകി.\n\nഈ ആപ്പിന് നിങ്ങളുടെ ഇമെയിലുകളും ആപ്സും വെബ്സൈറ്റുകളും ഉൾപ്പെടെ, ഉപകരണവും നെറ്റ്വർക്ക് പ്രവർത്തനവും നിരീക്ഷിക്കാൻ കഴിയും."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"നിങ്ങളുടെ ഉപകരണം നിയന്ത്രിക്കുന്നത് <xliff:g id="ORGANIZATION">%1$s</xliff:g> ആണ്.\n\nനിങ്ങളുടെ അഡ്മിനിസ്ട്രേറ്റർക്ക്, ഉപകരണവുമായി ബന്ധപ്പെട്ട ക്രമീകരണവും കോർപ്പറേറ്റ് ആക്സസ്സും അപ്ലിക്കേഷനുകളും വിവരവും ഒപ്പം ഉപകരണത്തിന്റെ ലൊക്കേഷൻ വിവരവും നിരീക്ഷിച്ച് നിയന്ത്രിക്കാനാകും.\n\nഇമെയിലുകളും അപ്ലിക്കേഷനുകളും വെബ്സൈറ്റുകളും ഉൾപ്പെടെയുള്ള നെറ്റ്വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകുന്ന ഒരു VPN-ലേക്കും നിങ്ങൾ കണക്റ്റുചെയ്തിരിക്കുന്നു.\n\nകൂടുതൽ വിവരങ്ങൾക്ക്, അഡ്മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈൽ നിയന്ത്രിക്കുന്നത് <xliff:g id="ORGANIZATION">%1$s</xliff:g> ആണ്.\n\nനിങ്ങളുടെ അഡ്മിനിസ്ട്രേറ്റർക്ക് ഇമെയിലുകളും അപ്ലിക്കേഷനുകളും സുരക്ഷിത വെബ്സൈറ്റുകളും ഉൾപ്പെടെയുള്ള നെറ്റ്വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാൻ കഴിയും.\n\nകൂടുതൽ വിവരങ്ങൾക്ക്, അഡ്മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക.\n\nനിങ്ങളുടെ നെറ്റ്വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകുന്ന ഒരു VPN-ലേക്കും നിങ്ങൾ കണക്റ്റുചെയ്തിരിക്കുന്നു."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"നിങ്ങൾ <xliff:g id="APPLICATION">%1$s</xliff:g> എന്നതിലേക്ക് കണക്റ്റുചെയ്തിരിക്കുന്നു, അതിന് ഇമെയിലുകൾ, ആപ്സ്, വെബ്സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നിങ്ങളുടെ നെറ്റ്വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകും."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"നിങ്ങൾ <xliff:g id="APPLICATION">%1$s</xliff:g> ആപ്പിലേക്ക് കണക്റ്റുചെയ്തിരിക്കുന്നു, ഇമെയിലുകൾ, ആപ്സ്, വെബ്സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നെറ്റ്വർക്ക് ആക്റ്റിവിറ്റി നിരീക്ഷിക്കാൻ ഈ ആപ്പിന് കഴിയും."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈൽ നിയന്ത്രിക്കുന്നത് <xliff:g id="ORGANIZATION">%1$s</xliff:g> ആണ്. നിങ്ങൾ <xliff:g id="APPLICATION">%2$s</xliff:g> എന്നതിലേക്ക് കണക്റ്റുചെയ്തിരിക്കുന്നു, അതിന് ഇമെയിലുകൾ, ആപ്സ്, വെബ്സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നിങ്ങളുടെ ഔദ്യോഗിക നെറ്റ്വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകും.\n\nകൂടുതൽ വിവരങ്ങൾക്ക്, നിങ്ങളുടെ അഡ്മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈൽ നിയന്ത്രിക്കുന്നത് <xliff:g id="ORGANIZATION">%1$s</xliff:g> ആണ്. നിങ്ങൾ <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> എന്നതിലേക്ക് കണക്റ്റുചെയ്തിരിക്കുന്നു, അതിന് ഇമെയിലുകൾ, ആപ്സ്, വെബ്സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നിങ്ങളുടെ ഔദ്യോഗിക നെറ്റ്വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകും.\n\nനിങ്ങൾ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> എന്നതിലേക്കും കണക്റ്റുചെയ്തിരിക്കുന്നു, അതിന് നിങ്ങളുടെ സ്വകാര്യ നെറ്റ്വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകും."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"നിങ്ങളുടെ ഉപകരണം നിയന്ത്രിക്കുന്നത് <xliff:g id="ORGANIZATION">%1$s</xliff:g> ആണ്.\n\nനിങ്ങളുടെ അഡ്മിനിസ്ട്രേറ്റർക്ക്, ഉപകരണവുമായി ബന്ധപ്പെട്ട ക്രമീകരണവും കോർപ്പറേറ്റ് ആക്സസ്സും അപ്ലിക്കേഷനുകളും വിവരവും ഒപ്പം ഉപകരണത്തിന്റെ ലൊക്കേഷൻ വിവരവും നിരീക്ഷിച്ച് നിയന്ത്രിക്കാനാകും.\n\nഇമെയിലുകളും അപ്ലിക്കേഷനുകളും വെബ്സൈറ്റുകളും ഉൾപ്പെടെയുള്ള നെറ്റ്വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകുന്ന ഒരു <xliff:g id="APPLICATION">%2$s</xliff:g> എന്നതിലേക്കും നിങ്ങൾ കണക്റ്റുചെയ്തിരിക്കുന്നു.\n\nകൂടുതൽ വിവരങ്ങൾക്ക്, അഡ്മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"നിങ്ങൾ സ്വമേധയാ അൺലോക്കുചെയ്യുന്നതുവരെ ഉപകരണം ലോക്കുചെയ്തതായി തുടരും"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"അറിയിപ്പുകൾ വേഗത്തിൽ സ്വീകരിക്കുക"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"അൺലോക്കുചെയ്യുന്നതിന് മുമ്പ് അവ കാണുക"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"വികസിപ്പിക്കുക"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"ചുരുക്കുക"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"സ്ക്രീൻ പിൻ ചെയ്തു"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"നിങ്ങൾ അൺപിൻ ചെയ്യുന്നതുവരെ ഇത് കാണുന്ന വിധത്തിൽ നിലനിർത്തും. അൺപിൻ ചെയ്യുന്നതിന് \'മടങ്ങുക\' സ്പർശിച്ചുപിടിക്കുക."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"മനസ്സിലായി"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"വേണ്ട, നന്ദി"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> എന്നത് മറയ്ക്കണോ?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"അടുത്ത തവണ നിങ്ങൾ അത് ക്രമീകരണങ്ങളിൽ ഓണാക്കുമ്പോൾ അത് വീണ്ടും ദൃശ്യമാകും."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"മറയ്ക്കുക"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g>, വോളിയം ഡയലോഗ് ആകാൻ താൽപ്പര്യപ്പെടുന്നു."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"അനുവദിക്കുക"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"നിരസിക്കുക"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g>, വോളിയം ഡയലോഗാണ്"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"ഒറിജിനൽ പുനഃസ്ഥാപിക്കാൻ ടാപ്പുചെയ്യുക."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"നിങ്ങൾ ഉപയോഗിക്കുന്നത് ഔദ്യോഗിക പ്രൊഫൈലാണ്"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"വിളിക്കുക"</item>
- <item msgid="5997713001067658559">"സിസ്റ്റം"</item>
- <item msgid="7858983209929864160">"റിംഗുചെയ്യുക"</item>
- <item msgid="1850038478268896762">"മീഡിയ"</item>
- <item msgid="8265110906352372092">"അലാറം"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"ബ്ലൂടൂത്ത്"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"പ്രവേശനക്ഷമത"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"കോള് ചെയ്യുക"</string>
+ <string name="stream_system" msgid="7493299064422163147">"സിസ്റ്റം"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"റിംഗുചെയ്യുക"</string>
+ <string name="stream_music" msgid="9086982948697544342">"മീഡിയ"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"അലാറം"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"അറിയിപ്പ്"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"ബ്ലൂടൂത്ത്"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"ഡ്യുവൽ മൾട്ടി റ്റോൺ ഫ്രീക്വൻസി"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"പ്രവേശനക്ഷമത"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. അൺമ്യൂട്ടുചെയ്യുന്നതിന് ടാപ്പുചെയ്യുക."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. വൈബ്രേറ്റിലേക്ക് സജ്ജമാക്കുന്നതിന് ടാപ്പുചെയ്യുക. പ്രവേശനക്ഷമതാ സേവനങ്ങൾ മ്യൂട്ടുചെയ്യപ്പെട്ടേക്കാം."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. മ്യൂട്ടുചെയ്യുന്നതിന് ടാപ്പുചെയ്യുക. പ്രവേശനക്ഷമതാ സേവനങ്ങൾ മ്യൂട്ടുചെയ്യപ്പെട്ടേക്കാം."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"ദ്രുത ക്രമീകരണം"</string>
<string name="status_bar" msgid="4877645476959324760">"സ്റ്റാറ്റസ് ബാർ"</string>
<string name="overview" msgid="4018602013895926956">"ചുരുക്കവിവരണം"</string>
- <string name="demo_mode" msgid="2389163018533514619">"ഡെമോ മോഡ്"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"സിസ്റ്റം UI ഡെമോ മോഡ്"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"ഡെമോ മോഡ് പ്രവർത്തനക്ഷമമാക്കുക"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"ഡെമോ മോഡ് കാണിക്കുക"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"ഇതർനെറ്റ്"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"ഓൺ"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"ഓഫ്"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"പവർ അറിയിപ്പ് നിയന്ത്രണം ഉപയോഗിച്ച്, ഒരു ആപ്പിനായുള്ള അറിയിപ്പുകൾക്ക് 0 മുതൽ 5 വരെയുള്ള പ്രാധാന്യ ലെവലുകളിലൊന്ന് നിങ്ങൾക്ക് സജ്ജമാക്കാവുന്നതാണ്. \n\n"<b>"ലെവൽ 5"</b>" \n- അറിയിപ്പ് ലിസ്റ്റിന്റെ മുകളിൽ കാണിക്കുക \n- മുഴുവൻ സ്ക്രീൻ തടസ്സം അനുവദിക്കുക \n- എല്ലായ്പ്പോഴും ദൃശ്യമാക്കുക \n\n"<b>"ലെവൽ 4"</b>" \n- മുഴുവൻ സ്ക്രീൻ തടസ്സം തടയുക \n- എല്ലായ്പ്പോഴും ദൃശ്യമാക്കുക \n\n"<b>"ലെവൽ 3"</b>" \n- മുഴുവൻ സ്ക്രീൻ തടസ്സം തടയുക \n- ഒരിക്കലും സൃശ്യമാക്കരുത് \n\n"<b>"ലെവൽ 2"</b>" \n- മുഴുവൻ സ്ക്രീൻ തടസ്സം തടയുക \n- ഒരിക്കലും ദൃശ്യമാക്കരുത് \n- ഒരിക്കലും ശബ്ദവും വൈബ്രേഷനും ഉണ്ടാക്കരുത് \n\n"<b>"ലെവൽ 1"</b>" \n- മുഴുവൻ സ്ക്രീൻ തടസ്സം തടയുക \n- ഒരിക്കലും ദൃശ്യമാക്കരുത് \n- ഒരിക്കലും ശബ്ദവും വൈബ്രേഷനും ഉണ്ടാക്കരുത് \n- ലോക്ക് സ്ക്രീനിൽ നിന്നും സ്റ്റാറ്റസ് ബാറിൽ നിന്നും മറയ്ക്കുക \n- അറിയിപ്പ് ലിസ്റ്റിന്റെ അടിയിൽ കാണിക്കുക \n\n"<b>"ലെവൽ 0"</b>" \n- ആപ്പിൽ നിന്നുള്ള എല്ലാ അറിയിപ്പുകളും ബ്ലോക്കുചെയ്യുക"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"പ്രാധാന്യം: സ്വയമേവയുള്ളത്"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"പ്രാധാന്യം: ലെവൽ 0"</string>
- <string name="min_importance" msgid="560779348928574878">"പ്രാധാന്യം: ലെവൽ 1"</string>
- <string name="low_importance" msgid="7571498511534140">"പ്രാധാന്യം: ലെവൽ 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"പ്രാധാന്യം: ലെവൽ 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"പ്രാധാന്യം: ലെവൽ 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"പ്രാധാന്യം: ലെവൽ 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"ഓരോ അറിയിപ്പിനുമുള്ള പ്രാധാന്യം നിർണ്ണയിക്കുന്നത് ആപ്പാണ്."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"ഈ ആപ്പിൽ നിന്നുള്ള അറിയിപ്പ് കാണിക്കരുത്."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"എല്ലായ്പ്പോഴും ദൃശ്യമാക്കുക, മുഴുവൻ സ്ക്രീൻ തടസ്സം അനുവദിക്കുക. ലോക്ക് സ്ക്രീനിൽ നിന്നും സ്റ്റാറ്റസ് ബാറിൽ നിന്നും മറയ്ക്കുക."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"മുഴുവൻ സ്ക്രീൻ തടസ്സമോ ദൃശ്യമാക്കലോ ശബ്ദമോ വൈബ്രേഷനോ ഇല്ല."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"മുഴുവൻ സ്ക്രീൻ തടസ്സമോ ദൃശ്യമാകലോ ഇല്ല."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"എല്ലായ്പ്പോഴും ദൃശ്യമാക്കുക. മുഴുവൻ സ്ക്രീൻ തടസ്സമില്ല."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"എല്ലായ്പ്പോഴും ദൃശ്യമാക്കുക, മുഴുവൻ സ്ക്രീൻ തടസ്സം അനുവദിക്കുക."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"കൂടുതൽ ക്രമീകരണം"</string>
<string name="notification_done" msgid="5279426047273930175">"പൂർത്തിയായി"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> അറിയിപ്പ് നിയന്ത്രണങ്ങൾ"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"ക്രമീകരണ ക്രമം എഡിറ്റുചെയ്യുക."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"പേജ് <xliff:g id="ID_1">%1$d</xliff:g> / <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"വികസിപ്പിക്കുക"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"ചെറുതാക്കുക"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"നിരസിക്കുക"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"ഫോൺ ചൂടായിക്കൊണ്ടിരിക്കുന്നു"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"ഫോൺ തണുത്തുകൊണ്ടിരിക്കുമ്പോൾ ചില ഫീച്ചറുകൾ പരിമിതപ്പെടുത്തപ്പെടും"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"നിങ്ങളുടെ ഫോൺ സ്വയമേവ തണുക്കാൻ ശ്രമിക്കും. നിങ്ങൾക്ക് അപ്പോഴും ഫോൺ ഉപയോഗിക്കാമെങ്കിലും പ്രവർത്തനം മന്ദഗതിയിലായിരിക്കും.\n\nതണുത്തുകഴിഞ്ഞാൽ, ഫോൺ സാധാരണ ഗതിയിൽ പ്രവർത്തിക്കും."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ml-rIN/strings_car.xml b/packages/SystemUI/res/values-ml/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-ml-rIN/strings_car.xml
rename to packages/SystemUI/res/values-ml/strings_car.xml
diff --git a/packages/SystemUI/res/values-ml-rIN/strings_tv.xml b/packages/SystemUI/res/values-ml/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-ml-rIN/strings_tv.xml
rename to packages/SystemUI/res/values-ml/strings_tv.xml
diff --git a/packages/SystemUI/res/values-mn-rMN-land/strings.xml b/packages/SystemUI/res/values-mn-rMN-land/strings.xml
deleted file mode 100644
index ec4616f..0000000
--- a/packages/SystemUI/res/values-mn-rMN-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"Дэлгэц хэвтээ чиглэлд түгжигдсэн."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-mn-rMN/config.xml b/packages/SystemUI/res/values-mn/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-mn-rMN/config.xml
rename to packages/SystemUI/res/values-mn/config.xml
diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
similarity index 92%
rename from packages/SystemUI/res/values-mn-rMN/strings.xml
rename to packages/SystemUI/res/values-mn/strings.xml
index e285a42..0433950 100644
--- a/packages/SystemUI/res/values-mn-rMN/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -161,6 +161,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Тэжээлийг цэнэглэж байна, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> хувь."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Системийн тохиргоо."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Мэдэгдэл."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Илүү гарсан мэдэгдлийг агуулагч"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Мэдэгдлийг цэвэрлэх."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS идэвхтэй."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS хайж байна."</string>
@@ -182,6 +183,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Дэлгэц түгжих."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Тохиргоо"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Тойм"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Хаах"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi унтраасан."</string>
@@ -398,18 +401,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Бүгдийг арилгах"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Одоо эхлүүлэх"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Мэдэгдэл байхгүй"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Төхөөрөмжийг хянах боломжтой"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Профайлыг хянаж байж болзошгүй"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Сүлжээ хянагдаж байж болзошгүй"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Сүлжээг хянаж байж болзошгүй"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Төхөөрөмжийн хяналт"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Профайл хяналт"</string>
<string name="monitoring_title" msgid="169206259253048106">"Сүлжээний хяналт"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Сүлжээний лог"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN идэвхгүйжүүлэх"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN таслах"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Таны төхөөрөмж удирдагч <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nТаны админ таны төхөөрөмжтэй холбоотой тохиргоо, байгууллагын хандалт, мэдээлэл болон байршлын мэдээллийг удирдан, хяналт тавих боломжтой."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Таны төхөөрөмжийг <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> удирддаг."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> таны төхөөрөмжийг удирдахын тулд <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>-г ашигладаг."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Таны админ тохиргоо, байгууллагын хандалт, апп, төхөөрөмжтэй холбоотой өгөгдөл болон төхөөрөмжийн байршлын мэдээллийг хянах, удирдах боломжтой."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Дэлгэрэнгүй үзэх"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Таны имэйл, апп, вэб хуудас зэрэг сүлжээний үйл ажиллагааг хянах боломжтой <xliff:g id="VPN_APP">%1$s</xliff:g>-д холбогдсон байна."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN тохиргоог нээх"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Таны админ төхөөрөмжийн ачааллыг хянадаг сүлжээний логийг асаасан байна.\n\nДэлгэрэнгүй мэдээлэл авахын тулд админтайгаа холбогдоно уу."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Та апп-д VPN холболт хийхийг зөвшөөрсөн байна.\n\nЭнэхүү апп нь таны имэйл, апп, вэбсайт зэрэг төхөөрөмж болон сүлжээний үйл ажиллагааг хянах боломжтой."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Таны төхөөрөмжийн удирдагч <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nТаны админ таны төхөөрөмжтэй холбоотой тохиргоо, байгууллагын хандалт, мэдээлэл болон байршлын мэдээллийг удирдан, хяналт тавих боломжтой.\n\nТа таны имэйл, апп, вэб сайтын үйл ажиллагааг хянах VPN-д холбогдсон байна.\n\nДэлгэрэнгүй мэдээлэл авахыг хүсвэл админтайгаа холбогдоно уу."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Таны ажлын профайлыг <xliff:g id="ORGANIZATION">%1$s</xliff:g> удирддаг.\n\nАдмин нь таны имэйл,апп болон вэбсайт зэрэг сүлжээний үйл ажиллагааг хянадаг. \n\n Дэлгэрэнгүй мэдээлэл авахыг хүсвэл админтайгаа холбогдоно уу. \n\nМөн та VPN-д холбогдсон бөгөөд ингэснээр өөрийн сүлжээний үйл ажиллагааг хянах боломжтой байна."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Та <xliff:g id="APPLICATION">%1$s</xliff:g>-д холбогдсон бөгөөд энэ нь таны имэйл, апп, вэбсайт зэрэг сүлжээний үйл ажиллагааг хянах боломжтой."</string>
@@ -417,7 +428,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Та имэйл, апп, вэб хуудас зэрэг хувийн сүлжээнийхээ үйл ажиллагааг хянах боломжтой <xliff:g id="APPLICATION">%1$s</xliff:g>-д холбогдсон байна."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Таны ажлын профайлыг <xliff:g id="ORGANIZATION">%1$s</xliff:g> удирддаг. Энэ нь <xliff:g id="APPLICATION">%2$s</xliff:g>-тэй холбогдсон бөгөөд таны имэйл, апп, вэбсайт зэрэг сүлжээний үйл ажиллагааг хянах боломжтой.\n\nДэлгэрэнгүй мэдээлэл авахыг хүсвэл админтайгаа холбогдоно уу."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Таны ажлын профайлыг <xliff:g id="ORGANIZATION">%1$s</xliff:g> удирддаг. Энэ нь <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>-тай холбогдсон бөгөөд таны имэйл, апп, вэбсайт зэрэг ажлын сүлжээний үйл ажиллагааг хянах боломжтой.\n\nМөн та <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>-д холбогдсон бөгөөд энэ нь таны сүлжээний хувийн үйл ажиллагааг хянаж чадна."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Таны төхөөрөмжийг <xliff:g id="ORGANIZATION">%1$s</xliff:g> удирддаг.\n\n Танай админ төхөөрөмж, төхөөрөмжийн байршилтай холбоотой өгөгдлийг холбох, тохиргоог өөрчлөх болон хяналт тавих боломжтой.\n\nТа <xliff:g id="APPLICATION">%2$s</xliff:g>-тай холбогдсон бөгөөд ингэснээр таны имэйл,апп, аюулгүй вэбсайт зэрэг сүлжээний үйл ажиллагаагаа хянах боломжтой.\n\n Дэлгэрэнгүй мэдээлэл авахыг хүсвэл админтайгаа холбогдоно уу."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Таныг гараар онгойлгох хүртэл төхөөрөмж түгжээтэй байх болно"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Мэдэгдлийг хурдан авах"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Түгжээг тайлахын өмнө үзнэ үү"</string>
@@ -428,31 +438,23 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Дэлгэх"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Хураах"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Дэлгэц эхэнд байрлуулагдсан"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Таныг эхэнд нээхийг болиулах хүртэл харагдах болно. Эхэнд нээхийг болиулахын тулд Буцах товчлуурыг дараад, хүлээнэ үү."</string>
+ <string name="screen_pinning_description" msgid="8909878447196419623">"Таныг тогтоосныг болиулах хүртэл үүнийг харуулна. Тогтоосныг болиулахын тулд Буцах, Тоймыг дараад хүлээнэ үү."</string>
+ <string name="screen_pinning_description_accessible" msgid="426190689254018656">"Таныг тогтоосныг болиулах хүртэл харагдах болно. Тогтоосныг болиулахын тулд Буцах товчлуурыг дараад, хүлээнэ үү."</string>
<string name="screen_pinning_positive" msgid="3783985798366751226">"Ойлголоо"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Үгүй"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g>-ийг нуух уу?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Тохируулгын хэсэгт үүнийг асаахад энэ дахин харагдана."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Нуух"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> нь дууны диалог болохыг хүсч байна."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Зөвшөөрөх"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Татгалзах"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> нь дууны диалог юм."</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Эх хувилбарыг сэргээхийн тулд дарна уу."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Та өөрийн ажлын профайлыг ашиглаж байна"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Дуудлага"</item>
- <item msgid="5997713001067658559">"Систем"</item>
- <item msgid="7858983209929864160">"Хонх дуугаргах"</item>
- <item msgid="1850038478268896762">"Медиа"</item>
- <item msgid="8265110906352372092">"Сэрүүлэг"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Хүртээмж"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Залгах"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Систем"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Хонх"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Медиа"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Сэрүүлэг"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Мэдэгдэл"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Олон дууны давтамж"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Хүртээмж"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Дууг нь нээхийн тулд товшино уу."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Чичиргээнд тохируулахын тулд товшино уу. Хүртээмжийн үйлчилгээний дууг хаасан."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Дууг нь хаахын тулд товшино уу. Хүртээмжийн үйлчилгээний дууг хаасан."</string>
@@ -466,7 +468,7 @@
<string name="quick_settings" msgid="10042998191725428">"Түргэвчилсэн Tохиргоо"</string>
<string name="status_bar" msgid="4877645476959324760">"Статус самбар"</string>
<string name="overview" msgid="4018602013895926956">"Тойм"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Демо горим"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Системийн UI демо горим"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Демо горимыг идэвхжүүлэх"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Демо горимыг харуулах"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Этернет"</string>
@@ -506,20 +508,17 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Идэвхтэй"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Идэвхгүй"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Тэжээлийн мэдэгдлийн удирдлагын тусламжтайгаар та апп-н мэдэгдэлд 0-5 хүртэлх ач холбогдлын түвшин тогтоох боломжтой. \n\n"<b>"5-р түвшин"</b>" \n- Мэдэгдлийн жагсаалтын хамгийн дээр харуулна \n- Бүтэн дэлгэцэд саад болно \n- Дэлгэцэд тогтмол гарч ирнэ \n\n"<b>"4-р түвшин"</b>" \n- Бүтэн дэлгэцэд саад болохоос сэргийлнэ \n- Дэлгэцэд тогтмол гарч ирнэ \n\n"<b>"3-р түвшин"</b>" \n- Бүтэн дэлгэцэд саад болохоос сэргийлнэ \n- Дэлгэцэд хэзээ ч гарч ирэхгүй \n\n"<b>"2-р түвшин"</b>" \n- Бүтэн дэлгэцэд саад болохоос сэргийлнэ \n- Дэлгэцэд хэзээ ч гарч ирэхгүй \n- Дуу болон чичиргээ хэзээ ч гаргахгүй \n\n"<b>"1-р түвшин"</b>" \n- Бүтэн дэлгэцэд саад болохоос сэргийлнэ \n- Дэлгэцэд хэзээ ч гарч ирэхгүй \n- Дуу болон чичиргээ хэзээ ч гаргахгүй \n- Түгжигдсэн дэлгэц болон статусын самбараас нууна \n- Мэдэгдлийн жагсаалтын доор харуулна \n\n"<b>"0-р түвшин"</b>" \n- Энэ апп-н бүх мэдэгдлийг блоклоно"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Ач холбогдол: Автомат"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Ач холбогдол: 0-р түвшин"</string>
- <string name="min_importance" msgid="560779348928574878">"Ач холбогдол: 1-р түвшин"</string>
- <string name="low_importance" msgid="7571498511534140">"Ач холбогдол: 2-р түвшин"</string>
- <string name="default_importance" msgid="7609889614553354702">"Ач холбогдол: 3-р түвшин"</string>
- <string name="high_importance" msgid="3441537905162782568">"Ач холбогдол: 4-р түвшин"</string>
- <string name="max_importance" msgid="4880179829869865275">"Ач холбогдол: 5-р түвшин"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Апп нь мэдэгдэл бүрийн ач холбогдлыг тодорхойлдог."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Энэ апп-н мэдэгдлийг хэзээ ч бүү харуул."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Бүтэн дэлгэцэд саадгүй, гарч ирэхгүй, дуугүй, чичиргээгүй. Түгжигдсэн дэлгэц, статусын хэсгээс нуух."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Бүтэн дэлгэцэд саад болохгүй, дэлгэцэд гарч ирэхгүй, дуугүй болон чичиргээгүй."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Бүтэн дэлгэцэд саад болохгүй бөгөөд дэлгэцэд гарч ирэхгүй."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Дэлгэцэд тогтмол гарч ирнэ. Бүтэн дэлгэцэд саад болохгүй."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Дэлгэцэд тогтмол гарч ирэх бөгөөд бүтэн дэлгэцэд саад болно."</string>
+ <string name="notification_header_default_channel" msgid="7506845022070889909">"Мэдэгдэл"</string>
+ <string name="notification_channel_disabled" msgid="5805874247999578073">"Ta цаашид мэдэгдэл авахгүй."</string>
+ <string name="notification_importance_header_app" msgid="3572576545406258751">"<xliff:g id="APP">%s</xliff:g> мэдэгдэл"</string>
+ <string name="min_importance" msgid="7559703098688382595">"Бага"</string>
+ <string name="low_importance" msgid="6891335321576225228">"Дунд"</string>
+ <string name="default_importance" msgid="6400766013567512061">"Өндөр"</string>
+ <string name="high_importance" msgid="730741630855788381">"Яаралтай"</string>
+ <string name="notification_importance_min" msgid="3237794091374404537">"Дуугүй, эсвэл үзэхэд саадгүй"</string>
+ <string name="notification_importance_low" msgid="8929105501798019743">"Чимээгүй харуулах"</string>
+ <string name="notification_importance_default" msgid="9025125660733917469">"Дуу гаргах"</string>
+ <string name="notification_importance_high" msgid="3316555356062640222">"Дуу гаргаж, дэлгэцэд гэнэт гаргах"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Бусад тохиргоо"</string>
<string name="notification_done" msgid="5279426047273930175">"Дууссан"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> мэдэгдлийн хяналт"</string>
@@ -652,4 +651,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Тохиргооны дарааллыг өөрчилнө үү."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_2">%2$d</xliff:g>-н <xliff:g id="ID_1">%1$d</xliff:g>-р хуудас"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Дэлгэх"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Багасгах"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Хаах"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Утас халж эхэлж байна"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Таны утас хөрж байх зуур зарим онцлогийг хязгаарласан"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Таны утас автоматаар хөрөх болно. Та утсаа ашиглаж болох хэдий ч удаан ажиллаж болзошгүй.\n\nТаны утас хөрсний дараагаар хэвийн ажиллана."</string>
</resources>
diff --git a/packages/SystemUI/res/values-mn-rMN/strings_car.xml b/packages/SystemUI/res/values-mn/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-mn-rMN/strings_car.xml
rename to packages/SystemUI/res/values-mn/strings_car.xml
diff --git a/packages/SystemUI/res/values-mn-rMN/strings_tv.xml b/packages/SystemUI/res/values-mn/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-mn-rMN/strings_tv.xml
rename to packages/SystemUI/res/values-mn/strings_tv.xml
diff --git a/packages/SystemUI/res/values-mr-rIN-land/strings.xml b/packages/SystemUI/res/values-mr-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-mr-rIN-land/strings.xml
rename to packages/SystemUI/res/values-mr-land/strings.xml
diff --git a/packages/SystemUI/res/values-mr-rMH-land/strings.xml b/packages/SystemUI/res/values-mr-rMH-land/strings.xml
deleted file mode 100644
index fd3ba77..0000000
--- a/packages/SystemUI/res/values-mr-rMH-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"स्क्रीन आता भूदृश्य अभिमुखतेत लॉक केली आहे."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-mr-rIN/config.xml b/packages/SystemUI/res/values-mr/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-mr-rIN/config.xml
rename to packages/SystemUI/res/values-mr/config.xml
diff --git a/packages/SystemUI/res/values-mr-rIN/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
similarity index 91%
rename from packages/SystemUI/res/values-mr-rIN/strings.xml
rename to packages/SystemUI/res/values-mr/strings.xml
index f94e859..fef7d65 100644
--- a/packages/SystemUI/res/values-mr-rIN/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"बॅटरी चार्ज होत आहे, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> टक्के."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"सिस्टम सेटिंग्ज."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"सूचना."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"सूचना ओव्हरफ्लो कंटेनर"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"सूचना साफ करा."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS सक्षम केले."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS प्राप्त करीत आहे."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"लॉक स्क्रीन."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"सेटिंग्ज"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"विहंगावलोकन."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"बंद करा"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi बंद झाले."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"सर्व साफ करा"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"आता प्रारंभ करा"</string>
<string name="empty_shade_text" msgid="708135716272867002">"सूचना नाहीत"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"डिव्हाइसचे परीक्षण केले जाऊ शकते"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"प्रोफाईलचे परीक्षण केले जाऊ शकते"</string>
<string name="vpn_footer" msgid="2388611096129106812">"नेटवर्कचे परीक्षण केले जाऊ शकते"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"नेटवर्कचे परीक्षण केले जाऊ शकते"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"डिव्हाइस परीक्षण"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"प्रोफाईल परीक्षण"</string>
<string name="monitoring_title" msgid="169206259253048106">"नेटवर्क परीक्षण"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"नेटवर्क लॉगिंग"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN अक्षम करा"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN डिस्कनेक्ट करा"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"आपले डिव्हाइस <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केलेले आहे.\n\nआपला प्रशासक आपल्या डिव्हाइसशी संबंधित सेटिंग्ज, कॉर्पोरेट प्रवेश, अॅप्स, डेटा आणि आपल्या डिव्हाइसच्या स्थान माहितीचे परीक्षण करू शकतो. अधिक माहितीसाठी, आपल्या प्रशासकाशी संपर्क साधा."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"आपले डिव्हाइस <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ने व्यवस्थापित केले आहे."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"आपले डिव्हाइस व्यवस्थापित करण्यासाठी <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> वापरते."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"आपला प्रशासक सेटिंग्ज, कॉर्पोरेट प्रवेश, अॅप्स, आपल्या डिव्हाइसशी संबद्ध डेटा आणि आपल्या डिव्हाइसच्या स्थान माहितीचे परीक्षण करू आणि ते व्यवस्थापित करू शकतो."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"अधिक जाणून घ्या"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"आपण <xliff:g id="VPN_APP">%1$s</xliff:g> शी कनेक्ट केले आहे, जो ईमेल, अॅप्स आणि वेबसाइटसह आपल्या नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN सेटिंग्ज उघडा"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"आपल्या प्रशासकाने नेटवर्क लॉगिंग चालू केले आहे, जे आपल्या डिव्हाइस वरील रहदारीचे परीक्षण करते.\n\nअधिक माहितीसाठी आपल्या प्रशासकाशी संपर्क साधा."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"आपण VPN कनेक्शन सेट करण्यासाठी अॅपला परवानगी दिली.\n\nहा अॅप ईमेल, अॅप्स आणि वेबसाइटसह, आपल्या डिव्हाइस आणि नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"आपले डिव्हाइस <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केलेले आहे.\n\nआपला प्रशासक आपल्या डिव्हाइसशी संबंधित सेटिंग्ज, कॉर्पोरेट प्रवेश, अॅप्स, डेटा आणि आपल्या डिव्हाइसच्या स्थान माहितीचे परीक्षण करू शकतो. अधिक माहितीसाठी, आपल्या प्रशासकाशी संपर्क साधा.\n\nआपण एका VPN शी देखील कनेक्ट केलेले आहे जो आपल्या ईमेल, अॅप्स आणि वेबसाइटसह आपल्या वैयक्तिक नेटवर्क क्रियाकलापाचे देखील परीक्षण करू शकतो.\n\nअधिक माहितीसाठी, आपल्या प्रशासकाशी संपर्क साधा."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"आपले कार्य प्रोफाईल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केले आहे.\n\nआपला प्रशासक ईमेल, अॅप्स आणि वेबसाइटसह आपल्या नेटवर्क क्रियाकलापाचे परीक्षण करण्यास सक्षम आहे.\n\nअधिक माहितीसाठी, आपल्या प्रशासकाशी संपर्क साधा.\n\nआपण एका VPN शी देखील कनेक्ट केले आहे, जो आपल्या नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"आपण <xliff:g id="APPLICATION">%1$s</xliff:g> शी कनेक्ट केले आहे, जो ईमेल, अॅप्स आणि वेबसाइटसह आपल्या नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"आपण <xliff:g id="APPLICATION">%1$s</xliff:g> शी कनेक्ट केले आहे, जो ईमेल, अॅप्स आणि वेबसाइटसह आपल्या वैयक्तिक नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"आपले कार्य प्रोफाईल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केले आहे. ते <xliff:g id="APPLICATION">%2$s</xliff:g> शी कनेक्ट केले आहे, जो ईमेल, अॅप्स आणि वेबसाइटसह आपल्या कार्य नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो.\n\nअधिक माहितीसाठी, आपल्या प्रशासकाशी संपर्क साधा."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"आपले कार्य प्रोफाईल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केले आहे. ते <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> शी कनेक्ट केले आहे, जे ईमेल, अॅप्स आणि वेबसाइटसह आपल्या कार्य नेटवर्क क्रियाकलापाचे परीक्षण करू शकते.\n\nआपण <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> शी देखील कनेक्ट केले आहे, जे आपल्या वैयक्तिक नेटवर्क क्रियाकलापाचे परीक्षण करू शकते."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"आपले डिव्हाइस <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केले आहे.\n\nआपला प्रशासक आपल्या डिव्हाइसशी संबद्ध सेटिंग्ज, कॉर्पोरेट प्रवेश, अॅप्स, डेटा आणि आपल्या डिव्हाइसच्या स्थान माहितीचे परीक्षण करू शकतो आणि व्यवस्थापित करू शकतो.\n\nआपण <xliff:g id="APPLICATION">%2$s</xliff:g> शी कनेक्ट केले आहे, जो ईमेल, अॅप्स आणि वेबसाइटसह आपल्या नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो.\n\nअधिक माहितीसाठी, आपल्या प्रशासकाशी संपर्क साधा."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"आपण व्यक्तिचलितपणे अनलॉक करेपर्यंत डिव्हाइस लॉक केलेले राहील"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"सूचना अधिक जलद मिळवा"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"आपण अनलॉक करण्यापूर्वी त्यांना पहा"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"विस्तृत करा"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"संकुचित करा"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"स्क्रीन पिन केलेली आहे"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"आपण अनपिन करेपर्यंत हे त्यास दृश्यामध्ये ठेवते. अनपिन करण्यासाठी स्पर्श करा आणि परत धरून ठेवा."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"समजले"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"नाही धन्यवाद"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> लपवायचे?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"आपण सेटिंग्जमध्ये ते पुढील वेळी चालू कराल तेव्हा ते पुन्हा दिसेल."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"लपवा"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> हा व्हॉल्यूम संवाद होऊ इच्छितो."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"अनुमती द्या"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"नकार द्या"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> हा व्हॉल्यूम संवाद आहे"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"मूळ पुनर्संचयित करण्यासाठी टॅप करा."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"आपण आपले कार्य प्रोफाईल वापरत आहात"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"कॉल करा"</item>
- <item msgid="5997713001067658559">"सिस्टीम"</item>
- <item msgid="7858983209929864160">"रिंग करा"</item>
- <item msgid="1850038478268896762">"मीडिया"</item>
- <item msgid="8265110906352372092">"अलार्म"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"ब्लूटुथ"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"प्रवेशयोग्यता"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"कॉल करा"</string>
+ <string name="stream_system" msgid="7493299064422163147">"सिस्टीम"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"रिंग करा"</string>
+ <string name="stream_music" msgid="9086982948697544342">"मीडिया"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"अलार्म"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"सूचना"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"ब्लूटुथ"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"दुहेरी एकाधिक टोन वारंंवारता"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"प्रवेशयोग्यता"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. सशब्द करण्यासाठी टॅप करा."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. कंपन सेट करण्यासाठी टॅप करा. प्रवेशयोग्यता सेवा नि:शब्द केल्या जाऊ शकतात."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. नि:शब्द करण्यासाठी टॅप करा. प्रवेशक्षमता सेवा नि:शब्द केल्या जाऊ शकतात."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"द्रुत सेटिंग्ज"</string>
<string name="status_bar" msgid="4877645476959324760">"स्टेटस बार"</string>
<string name="overview" msgid="4018602013895926956">"विहंगावलोकन"</string>
- <string name="demo_mode" msgid="2389163018533514619">"डेमो मोड"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"सिस्टीम UI डेमो मोड"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"डेमो मोड सक्षम करा"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"डेमो मोड दर्शवा"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"इथरनेट"</string>
@@ -483,8 +487,8 @@
<string name="accessibility_status_bar_hotspot" msgid="4099381329956402865">"हॉटस्पॉट"</string>
<string name="accessibility_managed_profile" msgid="6613641363112584120">"कार्य प्रोफाईल"</string>
<string name="tuner_warning_title" msgid="7094689930793031682">"सर्वांसाठी नाही तर काहींसाठी मजेदार असू शकते"</string>
- <string name="tuner_warning" msgid="8730648121973575701">"सिस्टीम UI ट्यूनर आपल्याला Android वापरकर्ता इंटरफेस ट्विक आणि सानुकूल करण्याचे अनेक प्रकार देते. ही प्रयोगात्मक वैशिष्ट्ये बदलू शकतात, खंडित होऊ शकतात किंवा भविष्यातील रिलीझ मध्ये कदाचित दिसणार नाहीत. सावधगिरी बाळगून पुढे सुरु ठेवा."</string>
- <string name="tuner_persistent_warning" msgid="8597333795565621795">"ही प्रयोगात्मक वैशिष्ट्ये बदलू शकतात, खंडित होऊ शकतात किंवा भविष्यातील रिलीझ मध्ये कदाचित दिसणार नाहीत."</string>
+ <string name="tuner_warning" msgid="8730648121973575701">"सिस्टीम UI ट्यूनर आपल्याला Android वापरकर्ता इंटरफेस ट्विक आणि सानुकूल करण्याचे अनेक प्रकार देते. ही प्रयोगात्मक वैशिष्ट्ये बदलू शकतात, खंडित होऊ शकतात किंवा भविष्यातील रिलीज मध्ये कदाचित दिसणार नाहीत. सावधगिरी बाळगून पुढे सुरु ठेवा."</string>
+ <string name="tuner_persistent_warning" msgid="8597333795565621795">"ही प्रयोगात्मक वैशिष्ट्ये बदलू शकतात, खंडित होऊ शकतात किंवा भविष्यातील रिलीज मध्ये कदाचित दिसणार नाहीत."</string>
<string name="got_it" msgid="2239653834387972602">"समजले"</string>
<string name="tuner_toast" msgid="603429811084428439">"अभिनंदन! सिस्टीम UI ट्यूनर सेटिंग्जमध्ये जोडले गेले आहे"</string>
<string name="remove_from_settings" msgid="8389591916603406378">"सेटिंग्ज मधून काढा"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"चालू"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"बंद"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"उर्जा सूचना नियंत्रणांसह, आपण अॅपच्या सूचनांसाठी महत्त्व स्तर 0 ते 5 पर्यंत सेट करू शकता. \n\n"<b>"स्तर 5"</b>" \n- सूचना सूचीच्या शीर्षस्थानी दर्शवा \n- पूर्ण स्क्रीन व्यत्ययास अनुमती द्या \n- नेहमी डोकावून पहा \n\n"<b>"स्तर 4"</b>" \n- पूर्ण स्क्रीन व्यत्ययास प्रतिबंधित करा \n- नेहमी डोकावून पहा \n\n"<b>"स्तर 3"</b>" \n- पूर्ण स्क्रीन व्यत्ययास प्रतिबंधित करा \n- कधीही डोकावून पाहू नका \n\n"<b>"स्तर 2"</b>" \n- पूर्ण स्क्रीन व्यत्ययास प्रतिबंधित करा \n- कधीही डोकावून पाहू नका \n- कधीही ध्वनी किंवा कंपन करू नका \n\n"<b>"स्तर 1"</b>" \n- पूर्ण स्क्रीन व्यत्ययास प्रतिबंधित करा \n- कधीही डोकावून पाहू नका \n- कधीही ध्वनी किंवा कंपन करू नका \n- लॉक स्क्रीन आणि स्टेटस बार मधून लपवा \n- सूचना सूचीच्या तळाशी दर्शवा \n\n"<b>"स्तर 0"</b>" \n- अॅपमधील सर्व सूचना अवरोधित करा"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"महत्त्व: स्वयंचलित"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"महत्त्व: स्तर 0"</string>
- <string name="min_importance" msgid="560779348928574878">"महत्त्व: स्तर 1"</string>
- <string name="low_importance" msgid="7571498511534140">"महत्त्व: स्तर 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"महत्त्व: स्तर 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"महत्त्व: स्तर 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"महत्त्व: स्तर 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"अॅप प्रत्येक सूचनेसाठी महत्त्व निर्धारित करतो."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"या अॅपमधील सूचना कधीही दर्शवू नका."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"पूर्ण स्क्रीन व्यत्यय, डोकावून पाहणे, ध्वनी किंवा कंपन नाही. लॉक स्क्रीन आणि स्टेटस बार मधून लपवा."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"पूर्ण स्क्रीन व्यत्यय, डोकावून पाहणे, ध्वनी किंवा कंपन नाही."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"पूर्ण स्क्रीन व्यत्यय किंवा डोकावणे नाही."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"नेहमी डोकावून पहा. पूर्ण स्क्रीन व्यत्यय नाही."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"नेहमी डोकावून पहा आणि पूर्ण स्क्रीन व्यत्ययास परवानगी द्या."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"अधिक सेटिंग्ज"</string>
<string name="notification_done" msgid="5279426047273930175">"पूर्ण झाले"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> सूचना नियंत्रणे"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"सेटिंग्जचा क्रम संपादित करा."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"पृष्ठ <xliff:g id="ID_2">%2$d</xliff:g> पैकी <xliff:g id="ID_1">%1$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"विस्तृत करा"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"लहान करा"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"डिसमिस करा"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"फोन ऊष्ण होत आहे"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"फोन थंड होत असताना काही वैशिष्ट्ये मर्यादित असतात"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"आपला फोन स्वयंचलितपणे थंड होईल. आपण अद्यापही आपला फोन वापरू शकता परंतु तो कदाचित धीमेपणे कार्य करेल.\n\nआपला फोन एकदा थंड झाला की, तो सामान्यपणे कार्य करेल."</string>
</resources>
diff --git a/packages/SystemUI/res/values-mr-rIN/strings_car.xml b/packages/SystemUI/res/values-mr/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-mr-rIN/strings_car.xml
rename to packages/SystemUI/res/values-mr/strings_car.xml
diff --git a/packages/SystemUI/res/values-mr-rIN/strings_tv.xml b/packages/SystemUI/res/values-mr/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-mr-rIN/strings_tv.xml
rename to packages/SystemUI/res/values-mr/strings_tv.xml
diff --git a/packages/SystemUI/res/values-ms-rMY-land/strings.xml b/packages/SystemUI/res/values-ms-rMY-land/strings.xml
deleted file mode 100644
index 175b0fa..0000000
--- a/packages/SystemUI/res/values-ms-rMY-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"Skrin kini dikunci dalam orientasi landskap."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ms-rMY/config.xml b/packages/SystemUI/res/values-ms/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-ms-rMY/config.xml
rename to packages/SystemUI/res/values-ms/config.xml
diff --git a/packages/SystemUI/res/values-ms-rMY/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
similarity index 93%
rename from packages/SystemUI/res/values-ms-rMY/strings.xml
rename to packages/SystemUI/res/values-ms/strings.xml
index 0c5924d..d6c90a9 100644
--- a/packages/SystemUI/res/values-ms-rMY/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Bateri mengecas, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> peratus."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Tetapan sistem."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Pemberitahuan."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Bekas limpahan pemberitahuan"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Padamkan pemberitahuan."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS didayakan."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS sedang mendapatkan."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Kunci skrin."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Tetapan"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Ikhtisar."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Tutup"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi dimatikan."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Kosongkan semua"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Mulakan sekarang"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Tiada pemberitahuan"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Peranti mungkin dipantau"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil mungkin dipantau"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Rangkaian mungkin dipantau"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Rangkaian mungkin dipantau"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Pemantauan peranti"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Pemantauan profil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Pemantauan rangkaian"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Pengelogan Rangkaian"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Lumpuhkan VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Putuskan sambungan VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Peranti anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nPentadbir anda boleh memantau dan mengurus tetapan, akses korporat, apl, data yang dikaitkan dengan peranti serta maklumat lokasi peranti anda. Untuk mendapatkan maklumat lanjut, sila hubungi pentadbir anda."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Peranti anda diurus oleh <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> menggunakan <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> untuk mengurus peranti anda."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Pentadbir anda boleh memantau dan mengurus tetapan, akses korporat, apl, data yang dikaitkan dengan peranti dan maklumat lokasi peranti anda."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Ketahui lebih lanjut"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Anda disambungkan ke <xliff:g id="VPN_APP">%1$s</xliff:g>, yang boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Buka Tetapan VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Pentadbir anda telah menghidupkan pengelogan rangkaian yang memantau trafik pada peranti anda.\n\nUntuk mendapatkan maklumat lanjut, hubungi pentadbir anda."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Anda memberikan kebenaran kepada apl untuk menyediakan sambungan VPN.\n\nApl ini boleh memantau aktiviti peranti dan rangkaian anda, termasuk e-mel, apl dan tapak web."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Peranti anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nPentadbir anda boleh memantau dan mengurus tetapan, akses korporat, apl, data yang dikaitkan dengan peranti serta maklumat lokasi peranti anda.\n\nAnda disambungkan ke VPN, yang boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web.\n\nUntuk mendapatkan maklumat lanjut, sila hubungi pentadbir anda."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Profil kerja anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nPentadbir anda boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web.\n\nUntuk mendapatkan maklumat lanjut, hubungi pentadbir anda.\n\nAnda turut disambungkan ke VPN, yang boleh memantau aktiviti rangkaian anda."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Anda disambungkan ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Anda disambungkan ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang boleh memantau aktiviti rangkaian peribadi anda, termasuk e-mel, apl dan tapak web."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Profil kerja anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Profil ini disambungkan ke <xliff:g id="APPLICATION">%2$s</xliff:g>, yang boleh memantau aktiviti rangkaian kerja anda, termasuk e-mel, apl dan tapak web.\n\nUntuk mendapatkan maklumat lanjut, sila hubungi pentadbir anda."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Profil kerja anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Profil disambungkan ke <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, yang boleh memantau aktiviti rangkaian kerja anda, termasuk e-mel, apl dan tapak web.\n\nAnda turut disambungkan ke <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, yang boleh memantau aktiviti rangkaian peribadi anda."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Peranti anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nPentadbir anda boleh memantau dan mengurus tetapan, akses korporat, apl, data yang dikaitkan dengan peranti anda serta maklumat lokasi peranti anda.\n\nAnda disambungkan ke <xliff:g id="APPLICATION">%2$s</xliff:g>, yang boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web.\n\nUntuk mendapatkan maklumat lanjut, hubungi pentadbir anda."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Peranti akan kekal terkunci sehingga anda membuka kunci secara manual"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Dapatkan pemberitahuan lebih cepat"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Lihat sebelum anda membuka kunci"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Kembangkan"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Runtuhkan"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Skrin telah disemat"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Tindakan ini memastikan skrin kelihatan sehingga anda menyahsemat. Sentuh & tahan Kembali untuk menyahsemat."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Faham"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Tidak"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Sembunyikan <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Mesej itu akan terpapar semula pada kali seterusnya anda menghidupkan apl dalam tetapan."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Sembunyikan"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> mahu menjadi dialog kelantangan."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Benarkan"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Tolak"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ialah dialog kelantangan"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Ketik untuk memulihkan yang asal."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Anda sedang menggunakan profil kerja"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Panggil"</item>
- <item msgid="5997713001067658559">"Sistem"</item>
- <item msgid="7858983209929864160">"Dering"</item>
- <item msgid="1850038478268896762">"Media"</item>
- <item msgid="8265110906352372092">"Penggera"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Kebolehaksesan"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Panggil"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistem"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Dering"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Media"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Penggera"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Pemberitahuan"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Multifrekuensi dwinada"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Kebolehaksesan"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Ketik untuk menyahredam."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Ketik untuk menetapkan pada getar. Perkhidmatan kebolehaksesan mungkin diredamkan."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Ketik untuk meredam. Perkhidmatan kebolehaksesan mungkin diredamkan."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Tetapan Pantas"</string>
<string name="status_bar" msgid="4877645476959324760">"Bar status"</string>
<string name="overview" msgid="4018602013895926956">"Ikhtisar"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Mod tunjuk cara"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Mod tunjuk cara UI sistem"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Dayakan mod tunjuk cara"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Tunjukkan mod tunjuk cara"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Hidup"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Mati"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Dengan kawalan pemberitahuan berkuasa, anda boleh menetapkan tahap kepentingan dari 0 hingga 5 untuk pemberitahuan apl. \n\n"<b>"Tahap 5"</b>" \n- Tunjukkan pada bahagian atas senarai pemberitahuan \n- Benarkan gangguan skrin penuh \n- Sentiasa intai \n\n"<b>"Tahap 4"</b>" \n- Halang gangguan skrin penuh \n- Sentiasa intai \n\n"<b>"Tahap 3"</b>" \n- Halang gangguan skrin penuh \n- Jangan intai \n\n"<b>"Tahap 2"</b>" \n- Halang gangguan skrin penuh \n- Jangan intai \n- Jangan berbunyi dan bergetar \n\n"<b>"Tahap 1"</b>" \n- Halang gangguan skrin penuh \n- Jangan intai \n- Jangan berbunyi atau bergetar \n- Sembunyikan daripada skrin kunci dan bar status \n- Tunjukkan di bahagian bawah senarai pemberitahuan \n\n"<b>"Tahap 0"</b>" \n- Sekat semua pemberitahuan daripada apl"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Kepentingan: Automatik"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Kepentingan: Tahap 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Kepentingan: Tahap 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Kepentingan: Tahap 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Kepentingan: Tahap 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Kepentingan: Tahap 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Kepentingan: Tahap 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Apl menentukan kepentingan setiap pemberitahuan."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Jangan sekali-kali tunjukkan pemberitahuan daripada apl ini."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Tiada gangguan skrin penuh, intaian, bunyi, getaran. Sembunyikan daripada skrin kunci & bar status."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Tiada gangguan skrin penuh, intaian, bunyi atau getaran."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Tiada gangguan skrin penuh atau intaian."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Sentiasa intai. Tiada gangguan skrin penuh."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Sentiasa intai dan benarkan gangguan skrin penuh."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Lagi tetapan"</string>
<string name="notification_done" msgid="5279426047273930175">"Selesai"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Kawalan pemberitahuan <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Edit susunan tetapan."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Halaman <xliff:g id="ID_1">%1$d</xliff:g> daripada <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Kembangkan"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimumkan"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Ketepikan"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Telefon semakin panas"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Sesetengah ciri adalah terhad semasa telefon menyejuk"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Telefon anda akan cuba menyejuk secara automatik. Anda masih dapat menggunakan telefon itu tetapi telefon tersebut mungkin berjalan lebih perlahan.\n\nSetelah telefon anda sejuk, telefon itu akan berjalan seperti biasa."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ms-rMY/strings_car.xml b/packages/SystemUI/res/values-ms/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-ms-rMY/strings_car.xml
rename to packages/SystemUI/res/values-ms/strings_car.xml
diff --git a/packages/SystemUI/res/values-ms-rMY/strings_tv.xml b/packages/SystemUI/res/values-ms/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-ms-rMY/strings_tv.xml
rename to packages/SystemUI/res/values-ms/strings_tv.xml
diff --git a/packages/SystemUI/res/values-my-rMM-land/strings.xml b/packages/SystemUI/res/values-my-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-my-rMM-land/strings.xml
rename to packages/SystemUI/res/values-my-land/strings.xml
diff --git a/packages/SystemUI/res/values-my-rMM/config.xml b/packages/SystemUI/res/values-my/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-my-rMM/config.xml
rename to packages/SystemUI/res/values-my/config.xml
diff --git a/packages/SystemUI/res/values-my-rMM/strings.xml b/packages/SystemUI/res/values-my/strings.xml
similarity index 91%
rename from packages/SystemUI/res/values-my-rMM/strings.xml
rename to packages/SystemUI/res/values-my/strings.xml
index af68511..17eeacf 100644
--- a/packages/SystemUI/res/values-my-rMM/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"ဘက်ထရီအားသွင်းနေသည်၊ <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> ရာခိုင်နှုန်း။"</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"စနစ်အပြင်အဆင်များ"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"အကြောင်းကြားချက်များ။"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"အကြောင်းကြားချက် ကွန်တိန်နာ"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"သတိပေးချက်အား ဖယ်ရှားခြင်း။"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPSသုံးစွဲနိုင်သည်"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS ဖမ်းယူနေသည်။"</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"မျက်နှာပြင် သော့ပိတ်ရန်"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"ဆက်တင်များ"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"ခြုံကြည့်မှု။"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"ပိတ်ရန်"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>။"</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"ကြိုးမဲ့ ပိတ်ထား။"</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"အားလုံး ဖယ်ရှားရန်"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"ယခု စတင်ပါ"</string>
<string name="empty_shade_text" msgid="708135716272867002">"အကြောင်းကြားချက်များ မရှိ"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"ကိရိယာကို စောင့်ကြပ် နိုင်ပါသည်"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"ပရိုဖိုင်ကို စောင့်ကြပ်နိုင်သည်"</string>
<string name="vpn_footer" msgid="2388611096129106812">"ကွန်ရက်ကို ကို စောင့်ကြပ် နိုင်ပါသည်"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"ကွန်ရက်ကို စောင့်ကြည့်စစ်ဆေးမှု ရှိနိုင်ပါသည်"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"ကိရိယာကို စောင့်ကြပ်ခြင်း"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"ပရိုဖိုင် စောင့်ကြပ်မှု"</string>
<string name="monitoring_title" msgid="169206259253048106">"ကွန်ရက်ကို စောင့်ကြပ်ခြင်း"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"ကွန်ရက်မှတ်တမ်းတင်ခြင်း"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN ကို ပိတ်ထားရန်"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN ကို အဆက်ဖြတ်ရန်"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"သင့်စက်ကိရိယာကို<xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nမှစီမံခန့်ခွဲထားပါသည်။သင့်စီမံခန့်ခွဲသူသည် ကြိုတင်ပြင်ဆင်မှုများ၊စုပေါင်းဝင်ရောက်ခွင့်၊အက်ပလီကေးရှင်းများ၊သင့်စက်ကိရိယာနှင့်ဆက်နွယ်နေသောအချက်အလက်နှင့်သင့်စက်ကိရိယာ ရဲ့နေရာအချက်အလက်များကိုကြီးကြပ်စောင့်ကြည့်နိုင်ပါသည်။အသေးစိတ်သိရှိလိုပါကသင်၏စီမံခန့်ခွဲသူကိုဆက်သွယ်ပါ။"</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"သင့်စက်ပစ္စည်းကို <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> က စီမံခန့်ခွဲထားပါသည်။"</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> သည် သင့်စက်ပစ္စည်းကို စီမံခန့်ခွဲရန် <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ကို အသုံးပြုပါသည်။"</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"စီမံသူသည် ဆက်တင်၊ ကော်ပိုရိတ် သုံးခွင့်၊ အက်ပ်၊ စက်ပစ္စည်းနှင့် ဆက်စပ်ဒေတာနှင့် ၎င်း၏တည်နေရာအချက်အလက်ကိုစောင့်ကြည့်စီမံနိုင်ပါသည်။"</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"ပိုမိုလေ့လာရန်"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"အီးမေးလ်၊ အက်ပ်နှင့် ဝဘ်ဆိုက်များအပါအဝင် သင့်ကွန်ရက်လုပ်ဆောင်ချက်ကို စောင့်ကြည့်နိုင်သည့် <xliff:g id="VPN_APP">%1$s</xliff:g> သို့ သင်သည် ချိတ်ဆက်ထားပါသည်။"</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Open VPN ဆက်တင်များ"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"သင့်စီမံခန့်ခွဲသူသည် သင့်စက်ပစ္စည်းပေါ်ရှိ ဒေတာအသွားအလာကို စောင့်ကြည့်နိုင်သည့် ကွန်ရက်မှတ်တမ်းတင်ခြင်းကို ဖွင့်ထားပါသည်။\n\nထပ်မံလေ့လာရန်အတွက် သင့်စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။"</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"VPN ချိတ်ဆက်မှုပြုလုပ်ရန် အက်ပ်ကို သင်ခွင့်ပြုလိုက်သည်။ \n\n ဤအက်ပ်သည် အီးမေးလ်များ၊ အက်ပ်များနှင့် ဝဘ်ဆိုက်များအပါအဝင် သင့်ကွန်ရက်လုပ်ဆောင်ချက်များကို စောင့်ကြည့်နိုင်သည်။"</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"သင့်စက်ကိရိယာကို<xliff:g id="ORGANIZATION">%1$s</xliff:g>\n \n မှစီမံခန့်ခွဲထားပါသည်။သင့်စီမံခန့်ခွဲသူသည် ကြိုတင်ပြင်ဆင်မှုများ၊စုပေါင်းဝင်ရောက်ခွင့်၊အက်ပလီကေးရှင်းများ၊သင့်စက်ကိရိယာနှင့်ဆက်နွယ်နေသောအချက်အလက်နှင့်သင့်စက်ကိရိယာ ရဲ့နေရာအချက်အလက်များကိုကြီးကြပ်စောင့်ကြည့်နိုင်ပါသည်။ \n\n အီးမေးလ်များ၊အက်ပလီကေးရှင်းများနှင့် ဝက်ဘ်ဆိုက်များအပါအဝင်သင့်ကွန်ယက်လုပ်ဆောင်ချက်ကိုစောင့်ကြည့်နိုင်သည့် VPN ကိုချိတ်ဆက်ထားပြီဖြစ် သည်။\n\n အသေးစိတ်သိရှိလိုပါကသင်၏စီမံခန့်ခွဲသူကိုဆက်သွယ်ပါ။"</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"သင့်အလုပ်ပရိုဖိုင်ကို <xliff:g id="ORGANIZATION">%1$s</xliff:g>မှ စီမံခန့်ခွဲပါသည်။ \n\nသင့်စီမံခန့်ခွဲသူသည် အီးမေးလ်များ၊ အက်ပ်များ၊ နှင့် ဝဘ်ဆိုက်များအပါအဝင် သင့်ကွန်ရက်လုပ်ဆောက်ချက်ကို စောင့်ကြည့်နိုင်သည်။ \n\nအချက်အလက်များ ပိုမိုရယူရန် သင်၏ စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။ \n\nသင်သည် VPN တစ်ခုသို့ပါ ချိတ်ဆက်ထားပြီး ၎င်းကပါ သင်၏ ကွန်ရက်လုပ်ဆောင်ချက်ကို စောင့်ကြည့်နိုင်ပါသည်။"</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"သင်သည် <xliff:g id="APPLICATION">%1$s</xliff:g> သို့ ချိတ်ဆက်ထားသည်၊ ၎င်းသည် အီးမေးများ၊ အက်ပ်များနှင့် ဝဘ်ဆိုက်များအပါအဝင် သင့်ကွန်ရက်လုပ်ဆောင်ချက်များကို စောင့်ကြည့်နိုင်သည်။"</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"သင်သည် အီးမေးလ်၊ အက်ပ်နှင့် ဝဘ်ဆိုက်များအပါအဝင် သင့်ကိုယ်ရေးကိုယ်တာ ကွန်ရက်အသုံးပြုမှုကို စောင့်ကြည့်နိုင်သည့် <xliff:g id="APPLICATION">%1$s</xliff:g> သို့ ချိတ်ဆက်ထားပါသည်။"</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"သင့်အလုပ်ပရိုဖိုင်ကို <xliff:g id="ORGANIZATION">%1$s</xliff:g> မှစီမံခန့်ခွဲသည်။ ၎င်းကို <xliff:g id="APPLICATION">%2$s</xliff:g> သို့ ချိတ်ဆက်ထားသည်၊ ၎င်းသည် အီးမေးလ်များ၊ အက်ပ်များနှင့် ဝဘ်ဆိုက်များအပါအဝင် သင့်အလုပ်ကွန်ရက်လုပ်ဆောင်ချက်ကို စောင့်ကြည့်နိုင်သည်။ \n\nအချက်အလက်များ ပိုမိုရယူရန် သင်၏ စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။"</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"သင့်အလုပ် ပရိုဖိုင်ကို <xliff:g id="ORGANIZATION">%1$s</xliff:g> မှစီမံခန့်ခွဲသည်။ ၎င်းကို <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> သို့ ချိတ်ဆက်ထားသည်၊ ၎င်းသည် အီးမေးလ်များ၊ အက်ပ်များနှင့် ဝဘ်ဆိုက်များအပါအဝင် သင့်အလုပ်ကွန်ရက်လုပ်ဆောင်ချက်ကို စောင့်ကြည့်နိုင်သည်။ \n\n သင်သည်<xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> ကိုလည်း ချိတ်ဆက်ထားသည်၊ ၎င်းသည် သင့်ကိုယ်ပိုင်ကွန်ရက်လုပ်ဆောင်ချက်များကို စောင့်ကြည့်နိုင်သည်။"</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"သင့်စက်ကိရိယာကို <xliff:g id="ORGANIZATION">%1$s</xliff:g> မှစီမံခန့်ခွဲပါသည်။ \n\n စီမံခန့်ခွဲသူသည် ကြိုတင်ပြင်ဆင်မှုများ၊ စုပေါင်းဝင်ရောက်ခွင့်၊ အက်ပ်များ၊ သင့်ကိရိယာနှင့်သက်ဆိုင်သော ဒေတာနှင့် သင့်ကိရိယာ၏ တည်နေရာအချက်အလက်များကို စောင့်ကြည့်ပြီး စီမံခန့်ခွဲနိုင်သည်။ \n\nသင်သည် <xliff:g id="APPLICATION">%2$s</xliff:g> သို့ချိတ်ဆက်ထားသည်၊ ၎င်းသည် အီးမေးလ်များ၊ အက်ပ်များ၊ နှင့် ဝဘ်ဆိုက်များအပါအဝင် သင့်ကွန်ရက်လုပ်ဆောင်ချက်ကို စောင့်ကြည့်နိုင်သည်။ \n\nအချက်အလက်များ ပိုမိုရယူရန် သင်၏ စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။"</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"သင်က လက်ဖြင့် သော့မဖွင့်မချင်း ကိရိယာမှာ သော့ပိတ်လျက် ရှိနေမည်"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"အကြောင်းကြားချက်များ မြန်မြန်ရရန်"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"မဖွင့်ခင် ၎င်းတို့ကို ကြည့်ပါ"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"တိုးချဲ့ရန်"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"ခေါက်သိမ်းရန်..."</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"မျက်နှာပြင် ပင်ထိုးပြီးပါပြီ"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"သင်က ပင်မဖြုတ်မချင်း ၎င်းကိုပြသထားပါမည်။ ပင်ဖြုတ်ရန် \'နောက်သို့\' ကိုထိပြီး ဖိထားပါ။"</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"အဲဒါ ရပါပြီ"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"မလိုတော့ပါ"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> ဝှက်မည်လား?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"နောက်တစ်ကြိမ်သင် ချိန်ညှိချက်များဖွင့်လျှင် ၎င်းပေါ်လာပါမည်။"</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"ဖျောက်ထားမည်"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည်အသံဒိုင်ယာလော့ခ်ဖြစ်လိုပါသည်။"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"ခွင့်ပြုသည်"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"ငြင်းပယ်သည်"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည် အသံဒိုင်ယာလော့ခ်ဖြစ်သည်"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"မူရင်းကိုပြန်ယူရန် တို့ပါ။"</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"သင်သည် အလုပ်ပရိုဖိုင်းအား သုံးနေသည်"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"ခေါ်ဆိုမှု"</item>
- <item msgid="5997713001067658559">"စနစ်"</item>
- <item msgid="7858983209929864160">"ဖုန်းခေါ်ဆိုမှု"</item>
- <item msgid="1850038478268896762">"မီဒီယာ"</item>
- <item msgid="8265110906352372092">"နှိုးစက်"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"ဘလူးတုသ်"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"အများသုံးစွဲနိုင်မှု"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"ဖုန်းခေါ်ရန်"</string>
+ <string name="stream_system" msgid="7493299064422163147">"စနစ်"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"အသံမြည်စေသည်"</string>
+ <string name="stream_music" msgid="9086982948697544342">"မီဒီယာ"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"နှိုးစက်"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"အကြောင်းကြားချက်"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"ဘလူးတုသ်"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"နှစ်လိုင်းပေါင်း အသံပေါင်းစုံ ကြိမ်နှုန်း"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"အများသုံးစွဲနိုင်မှု"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s။ အသံပြန်ဖွင့်ရန် တို့ပါ။"</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s။ တုန်ခါမှုကို သတ်မှတ်ရန် တို့ပါ။ အများသုံးစွဲနိုင်မှု ဝန်ဆောင်မှုများကို အသံပိတ်ထားနိုင်ပါသည်။"</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s။ အသံပိတ်ရန် တို့ပါ။ အများသုံးစွဲနိုင်မှု ဝန်ဆောင်မှုများကို အသံပိတ်ထားနိုင်ပါသည်။"</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"အမြန် ဆက်တင်များ"</string>
<string name="status_bar" msgid="4877645476959324760">"အခြေအနေပြနေရာ"</string>
<string name="overview" msgid="4018602013895926956">"ခြုံငုံသုံးသပ်ချက်"</string>
- <string name="demo_mode" msgid="2389163018533514619">"သရုပ်ပြ မုဒ်"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"စနစ် UI စရုပ်ပြမုဒ်"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"သရုပ်ပြမုဒ်ကို ဖွင့်ရန်"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"သရုပ်ပြမုဒ် ပြရန်"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"အီသာနက်"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"ဖွင့်ပါ"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"ပိတ်ပါ"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"ပါဝါအကြောင်းကြားချက် ထိန်းချုပ်မှုများကိုအသုံးပြုပြီး အက်ပ်တစ်ခု၏ အကြောင်းကြားချက် အရေးပါမှု ၀ မှ ၅ အထိသတ်မှတ်ပေးနိုင်သည်။ \n\n"<b>"အဆင့် ၅"</b>" \n- အကြောင်းကြားချက်စာရင်း၏ ထိပ်ဆုံးတွင် ပြသည် \n- မျက်နှာပြင်အပြည့် ကြားဖြတ်ဖော်ပြခြင်းကို ခွင့်ပြုသည် \n- အမြဲတမ်း ခေတ္တပြပါမည် \n\n"<b>"အဆင့် ၄"</b>" \n- မျက်နှာပြင်အပြည့် ကြားဖြတ်ဖော်ပြခြင်း မရှိစေရန် ကာကွယ်ပေးသည် \n- အမြဲတမ်း ခေတ္တပြပါမည် \n\n"<b>"အဆင့် ၃"</b>" \n- မျက်နှာပြင်အပြည့် ကြားဖြတ်ဖော်ပြခြင်း မရှိစေရန် ကာကွယ်ပေးသည် \n- ဘယ်တော့မှ ခေတ္တပြခြင်း မရှိပါ \n\n"<b>"အဆင့် ၂"</b>" \n- မျက်နှာပြင်အပြည့် ကြားဖြတ်ဖော်ပြခြင်း မရှိစေရန် ကာကွယ်ပေးသည် \n- ဘယ်တော့မှ ခေတ္တပြခြင်း မရှိပါ \n- အသံမြည်ခြင်းနှင့် တုန်ခါခြင်းများ ဘယ်တော့မှ မပြုလုပ်ပါ \n\n"<b>"အဆင့် ၁"</b>" \n- မျက်နှာပြင်အပြည့် ကြားဖြတ်ဖော်ပြခြင်း မရှိစေရန် ကာကွယ်ပေးသည် \n- ဘယ်တော့မှ ခေတ္တပြခြင်း မရှိပါ \n- အသံမြည်ခြင်းနှင့် တုန်ခါခြင်းများ ဘယ်တော့မှ မပြုလုပ်ပါ \n- လော့ခ်ချထားသည့် မျက်နှာပြင်နှင့် အခြေအနေဘားတန်းတို့တွင် မပြပါ \n- အကြောင်းကြားချက်စာရင်း အောက်ဆုံးတွင်ပြသည် \n\n"<b>"အဆင့် ၀"</b>" \n- အက်ပ်မှ အကြောင်းကြားချက်များ အားလုံးကို ပိတ်ဆို့သည်"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"အရေးပါမှု − အလိုအလျောက်"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"အရေးပါမှု − အဆင့် ၀"</string>
- <string name="min_importance" msgid="560779348928574878">"အရေးပါမှု − အဆင့် ၁"</string>
- <string name="low_importance" msgid="7571498511534140">"အရေးပါမှု − အဆင့် ၂"</string>
- <string name="default_importance" msgid="7609889614553354702">"အရေးပါမှု − အဆင့် ၃"</string>
- <string name="high_importance" msgid="3441537905162782568">"အရေးပါမှု − အဆင့် ၄"</string>
- <string name="max_importance" msgid="4880179829869865275">"အရေးပါမှု − အဆင့် ၅"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"အကြောင်းကြားချက်တစ်ခုစီ၏ အရေးပါမှုကို အက်ပ်မှ ဆုံးဖြတ်သည်။"</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"ဤအက်ပ်မှ အကြောင်းကြားချက်များကို ဘယ်တော့မှ မပြပါနှင့်။"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"မျက်နှာပြင်အပြည့် ကြားဖြတ်ဖော်ပြခြင်း၊ ခေတ္တပြခြင်း၊ အသံမြည်ခြင်း သို့မဟုတ် တုန်ခါခြင်းတို့ မရှိပါ။ လော့ခ်ချထားသည့် မျက်နှာပြင်နှင့် အခြေအနေဘားတန်းတို့တွင် မပြပါ။"</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"မျက်နှာပြင်အပြည့် ကြားဖြတ်ဖော်ပြခြင်း၊ ခေတ္တပြခြင်း၊ အသံမြည်ခြင်း သို့မဟုတ် တုန်ခါခြင်းတို့ မရှိပါ။"</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"မျက်နှာပြင်အပြည့် ကြားဖြတ်ဖော်ပြခြင်း သို့မဟုတ် ခေတ္တပြခြင်းတို့ မရှိပါ။"</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"အမြဲတမ်း ခေတ္တပြပါမည်။ မျက်နှာပြင်အပြည့် ကြားဖြတ်ဖော်ပြခြင်း မရှိပါ။"</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"အမြဲတမ်း ခေတ္တပြပြီး မျက်နှာပြင်အပြည့် ကြားဖြတ်ဖော်ပြခြင်းကို ခွင့်ပြုပါသည်။"</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"နောက်ထပ် ဆက်တင်များ"</string>
<string name="notification_done" msgid="5279426047273930175">"ပြီးပါပြီ"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> အကြောင်းကြားချက် ထိန်းချုပ်မှုများ"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"ဆက်တင်များ၏ အစီအစဉ်ကို တည်းဖြတ်ပါ။"</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"စာမျက်နှာ <xliff:g id="ID_2">%2$d</xliff:g> အနက်မှ စာမျက်နှာ <xliff:g id="ID_1">%1$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"ချဲ့ရန်"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"ချုံ့ရန်"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"ပယ်ရန်"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"ဖုန်း ပူနွေးလာပါပြီ"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"ဖုန်းကို အေးအောင်ပြုလုပ်နေစဉ်တွင် အချို့ဝန်ဆောင်မှုများကို ကန့်သတ်ထားပါသည်"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"သင့်ဖုန်းသည် အလိုအလျောက် ပြန်အေးသွားပါလိမ့်မည်။ ဖုန်းကို အသုံးပြုနိုင်ပါသေးသည် သို့သော် ပိုနှေးနိုင်ပါသည်။\n\nသင့်ဖုန်း အေးသွားသည်နှင့် ပုံမှန်အတိုင်း ပြန်အလုပ်လုပ်ပါလိမ့်မည်။"</string>
</resources>
diff --git a/packages/SystemUI/res/values-my-rMM/strings_car.xml b/packages/SystemUI/res/values-my/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-my-rMM/strings_car.xml
rename to packages/SystemUI/res/values-my/strings_car.xml
diff --git a/packages/SystemUI/res/values-my-rMM/strings_tv.xml b/packages/SystemUI/res/values-my/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-my-rMM/strings_tv.xml
rename to packages/SystemUI/res/values-my/strings_tv.xml
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 1b9c35a..b5f915d 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Batteriet lades – <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> prosent."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Systeminnstillinger."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Varsler."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Overflytsbeholder for varsel"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Fjern varsling"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS er aktivert."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Henting av GPS-signal."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Låseskjerm."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Innstillinger"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Oversikt."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Lukk"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi er slått av."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Fjern alt"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Start nå"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Ingen varsler"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Enheten kan være overvåket"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profilen kan overvåkes"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Nettverket kan være overvåket"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Nettverket kan bli overvåket"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Enhetsovervåking"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilovervåking"</string>
<string name="monitoring_title" msgid="169206259253048106">"Nettverksovervåking"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Loggføring av nettverk"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Deaktiver VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Koble fra VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Enheten din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratoren din kan overvåke og administrere innstillinger, bedriftstilgang, apper, data tilknyttet enheten din og enhetens posisjonsinformasjon. Hvis du vil har mer informasjon, kan du ta kontakt med administratoren."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Enheten din administreres av <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> bruker <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> til å administrere enheten din."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administratoren din kan overvåke og administrere innstillinger, bedriftstilgang, apper, data som er tilknyttet denne enheten, og enhetens posisjonsinformasjon."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Finn ut mer"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Enheten er koblet til <xliff:g id="VPN_APP">%1$s</xliff:g>, som kan overvåke nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Åpne VPN-innstillingene"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administratoren din har slått på loggføring av nettverk, som overvåker trafikken på enheten din.\n\nKontakt administratoren for mer informasjon."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Du ga en app tillatelse til å konfigurere en VPN-tilkobling.\n\nDenne appen kan overvåke enheten og nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Enheten din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nAdministratoren din kan overvåke og administrere innstillinger, bedriftstilgang, apper, data tilknyttet enheten din og enhetens posisjonsinformasjon.\n\nDu er koblet til et VPN, som kan overvåke nettverksaktiviteten din, inkludert e-post, apper og nettsteder.\n\nHvis du vil ha mer informasjon, kan du ta kontakt med administratoren."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Work-profilen din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratoren din kan overvåke nettverksaktiviteten din, inkludert e-post, apper og nettsteder.\n\nFor mer informasjon, ta kontakt med administratoren.\n\nDu er også koblet til et VPN, som kan overvåke nettverksaktiviteten din."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Enheten er koblet til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåke nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Enheten er koblet til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåke den personlige nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Work-profilen din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den er koblet til <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan overvåke nettverksaktiviteten din på jobben, inkludert e-post, apper og nettsteder.\n\nFor å få mer informasjon, ta kontakt med administratoren."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Work-profilen din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den er koblet til <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, som kan overvåke nettverksaktiviteten din på jobben, inkludert e-post, apper og nettsteder.\n\nDu er også koblet til <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, som kan overvåke den personlige nettverksaktiviteten din."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Enheten din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratoren din kan overvåke og administrere innstillinger, bedriftstilgang, apper, data tilknyttet enheten din og enhetens posisjonsinformasjon.\n\nDu er koblet til <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan overvåke nettverksaktiviteten din, inkludert e-post, apper og nettsteder.\n\nFor mer informasjon, ta kontakt med administratoren."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Enheten forblir låst til du låser den opp manuelt"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Motta varsler raskere"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Se dem før du låser opp"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Utvid"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Skjul"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Skjermen er låst"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"På denne måten blir skjermen synlig frem til du løsner den. Trykk og hold inne Tilbake for å løsne den."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Skjønner"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Nei takk"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Vil du skjule <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Den vises igjen neste gang du slår den på i innstillingene."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Skjul"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ønsker å være volumdialogen."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Tillat"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Ikke tillat"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> er volumdialogen"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Trykk for å gjenopprette originalen."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Du bruker jobbprofilen din"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Ring"</item>
- <item msgid="5997713001067658559">"System"</item>
- <item msgid="7858983209929864160">"Varsellyd"</item>
- <item msgid="1850038478268896762">"Medier"</item>
- <item msgid="8265110906352372092">"Alarmen"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Tilgjengelighet"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Anrop"</string>
+ <string name="stream_system" msgid="7493299064422163147">"System"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Ring"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Medier"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarm"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Varsel"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"DTMF (dual-tone multi-frequency)"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Tilgjengelighet"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Trykk for å slå på lyden."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Trykk for å angi vibrasjon. Lyden kan bli slått av for tilgjengelighetstjenestene."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Trykk for å slå av lyden. Lyden kan bli slått av for tilgjengelighetstjenestene."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Hurtiginnstillinger"</string>
<string name="status_bar" msgid="4877645476959324760">"Statusrad"</string>
<string name="overview" msgid="4018602013895926956">"Oversikt"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Demo-modus"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Demomodus for systembrukergrensesnittet"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Slå på demo-modus"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Vis demo-modus"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"På"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Av"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Med effektive varselinnstillinger kan du angi viktighetsnivåer fra 0 til 5 for appvarsler. \n\n"<b>"Nivå 5"</b>" \n– Vis øverst på varsellisten \n– Tillat forstyrrelser ved fullskjermmodus \n– Vis alltid raskt \n\n"<b>"Nivå 4"</b>" \n– Forhindre forstyrrelser ved fullskjermmodus \n– Vis alltid raskt \n\n"<b>"Nivå 3"</b>" \n– Forhindre forstyrrelser ved fullskjermmodus \n– Vis aldri raskt \n\n"<b>"Nivå 2"</b>" \n– Forhindre forstyrrelser ved fullskjermmodus \n– Vis aldri fort \n– Tillat aldri lyder eller vibrering \n\n"<b>"Nivå 1"</b>" \n– Forhindre forstyrrelser ved fullskjermmodus \n– Vis aldri raskt \n– Tillat aldri lyder eller vibrering \n– Skjul fra låseskjermen og statusfeltet \n– Vis nederst på varsellisten \n\n"<b>"Nivå 0"</b>" \n– Blokkér alle varsler fra appen"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Viktighet: automatisk"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Viktighet: nivå 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Viktighet: nivå 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Viktighet: nivå 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Viktighet: nivå 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Viktighet: nivå 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Viktighet: nivå 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Appen fastslår viktigheten for hvert varsel."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Vis aldri varsler fra denne appen."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Ingen forstyrrelser ved fullskjerm, rask visning, lyder eller vibrering. Skjul fra låseskjermen og statusfeltet."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Ingen forstyrrelser ved fullskjermmodus, rask visning, lyder eller vibrering."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Ingen forstyrrelser ved fullskjermmodus eller rask visning."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Vis alltid raskt. Ingen forstyrrelser ved fullskjermmodus."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Alltid vis raskt, og tillat forstyrrelser ved fullskjermmodus."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Flere innstillinger"</string>
<string name="notification_done" msgid="5279426047273930175">"Ferdig"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Varselinnstillinger for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Endre rekkefølgen på innstillingene."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Side <xliff:g id="ID_1">%1$d</xliff:g> av <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Vis"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimer"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Avvis"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Telefonen begynner å bli varm"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Enkelte funksjoner er begrenset mens telefonen kjøles ned"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Telefonen din kommer til å prøve å kjøle seg ned automatisk. Du kan fremdeles bruke telefonen, men den kjører muligens saktere.\n\nTelefonen kommer til å kjøre som normalt, når den har kjølt seg ned."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ne-rNP-land/strings.xml b/packages/SystemUI/res/values-ne-rNP-land/strings.xml
deleted file mode 100644
index 8d5286e..0000000
--- a/packages/SystemUI/res/values-ne-rNP-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"स्क्रिन अहिले ल्यान्डस्केप अवस्थामा बन्द छ।"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ne-rNP/config.xml b/packages/SystemUI/res/values-ne/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-ne-rNP/config.xml
rename to packages/SystemUI/res/values-ne/config.xml
diff --git a/packages/SystemUI/res/values-ne-rNP/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
similarity index 92%
rename from packages/SystemUI/res/values-ne-rNP/strings.xml
rename to packages/SystemUI/res/values-ne/strings.xml
index 1d33a7d..0d20b04 100644
--- a/packages/SystemUI/res/values-ne-rNP/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"ब्याट्री चार्ज हुँदैछ, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> प्रतिशत।"</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"प्रणाली सेटिङहरू"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"सूचनाहरू।"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"सूचना ओभरफ्लोको कन्टेनर"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"सूचना खाली गर्नुहोस्।"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS सक्षम गरिएको"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS प्राप्त हुँदैछ।"</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"स्क्रीन बन्द गर्नुहोस्।"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"सेटिङहरू"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"सारांश।"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"बन्द गर्नुहोस्"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>।"</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi बन्द गरियो।"</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"सबै हटाउनुहोस्"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"अहिले सुरु गर्नुहोस्"</string>
<string name="empty_shade_text" msgid="708135716272867002">"कुनै सूचनाहरू छैनन्"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"उपकरण अनुगमन हुन सक्छ"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"प्रोफाइल अनुगमन हुन सक्छ"</string>
<string name="vpn_footer" msgid="2388611096129106812">"सञ्जाल अनुगमित हुन सक्छ"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"नेटवर्कको अनुगमन गरिने सम्भावना छ"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"उपकरण अनुगमन"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"प्रोफाइल अनुगमन गर्दै"</string>
<string name="monitoring_title" msgid="169206259253048106">"सञ्जाल अनुगमन"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"नेटवर्कको लगिङ"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN असक्षम गर्नुहोस्"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"विच्छेद VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"तपाईँको यन्त्र <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारा व्यवस्थापन गरिन्छ।\n\n तपाईँको प्रशासकले सेटिङहरू, कर्पोरेट पहुँच, अनुप्रयोगहरू, आफ्नो उपकरण सम्बन्धित डेटा, र उपकरणको स्थानीय जानकारीको अनुगमन तथा व्यवस्थापन गर्न सक्छ। थप जानकारीको लागि, आफ्नो प्रशासकसँग सम्पर्क राख्नुहोस्।"</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"तपाईंको यन्त्र <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> द्वारा व्यवस्थापन गरिएको छ।"</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ले तपाईंको यन्त्रको व्यवस्थापन गर्न <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> को प्रयोग गर्दछ।"</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"तपाईंको प्रशासकले सेटिङ, संस्थागत पहुँच, अनुप्रयोग, तपाईंको यन्त्रसँग सम्बन्धित डेटा र तपाईंको यन्त्रको स्थान सम्बन्धी जानकारीको अनुगमन तथा व्यवस्थापन गर्न सक्नुहुन्छ।"</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"थप जान्नुहोस्"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"तपाईं <xliff:g id="VPN_APP">%1$s</xliff:g> मा जोडिनुभएको छ जसले इमेल, अनुप्रयोग र वेबसाइटहरू लगायत तपाईंको नेटवर्क सम्बन्धी गतिविधिको अनुगमन गर्न सक्छ।"</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN सम्बन्धी सेटिङहरू खोल्नुहोस्"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"तपाईंको प्रशासकले तपाईंको यन्त्रमा ट्राफिकको अनुगमन गर्ने नेटवर्कको लगिङलाई सक्रिय गर्नुभएको छ।\n\nथप जानकरीका लागि आफ्नो प्रशासकलाई सम्पर्क गर्नुहोस्।"</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"तपाईँले VPN जडान गर्न अनुप्रयोगलाई अनुमति दिनुभयो।\n\nयो अनुप्रयोगले तपाईँका यन्त्र र नेटवर्क गतिविधि लगायत इमेल, अनुप्रयोग र वेबसाइटहरू अनुगमन गर्न सक्छ।"</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"तपाईँको यन्त्र <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारा व्यवस्थापन गरिन्छ।\n\n तपाईँको प्रशासकले सेटिङ्हरू, कर्पोरेट पहुँच, अनुप्रयोगहरू, आफ्नो उपकरण सम्बन्धित डेटा, र उपकरणको स्थानीय जानकारीको अनुगमन तथा व्यवस्थापन गर्न सक्छ।\n\nतपाईँ VPN सँग जडित हुनुहुन्छ, जसले तपाईँको इमेल, अनुप्रयोगहरू, र वेबसाइटहरू सहित आफ्नो सञ्जाल गतिविधि अनुगमन गर्न सक्छ। \n\nथप जानकारीको लागि, आफ्नो प्रशासकसँग सम्पर्क राख्नुहोस्।"</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"तपाईँको कार्य प्रोफाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g>द्वारा व्यवस्थापन गरिन्छ।.\n\nतपाईँको प्रशासक इमेल, अनुप्रयोगहरू, र सुरक्षित वेबसाइटहरू लगायतका तपाईँका नेटवर्क गतिविधि अनुगमन गर्न सक्षम छ।\n\nथप जानकारीको लागि, आफ्नो प्रशासकसँग सम्पर्क राख्नुहोस्।\n\nतपाईँ VPN सँग पनि जडित हुनुहुन्छ, जसले तपाईँको नेटवर्क गतिविधि अनुगमन गर्न सक्छ।"</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"तपाईँ <xliff:g id="APPLICATION">%1$s</xliff:g> सँग जडित हुनुहुन्छ जसले इ-मेल, अनुप्रयोगहरू र वेबसाइट लगायतका तपाईँका नेटवर्क गतिविधिको अनुगमन गर्न सक्छ।"</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"तपाईं <xliff:g id="APPLICATION">%1$s</xliff:g> मा जोडिनुभएको छ जसले इमेल, अनुप्रयोग र वेबसाइटहरू लगायतको तपाईंको व्यक्तिगत नेटवर्क सम्बन्धी गतिविधिको अनुगमन गर्न सक्छ।"</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"तपाईँको कार्य प्रोफाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारा व्यवस्थापन गरिन्छ। यो <xliff:g id="APPLICATION">%2$s</xliff:g> सँग जोडिएको छ जसले इमेल, अनुप्रयोगहरू, र वेबसाइटहरू लगायतका तपाईँका नेटवर्क गतिविधि अनुगमन गर्न सक्छ।\n\nथप जानकारीको लागि, आफ्नो प्रशासकलाई सम्पर्क गर्नुहोस्।"</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"तपाईँको कार्य प्रोफाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारा व्यवस्थापन गरिन्छ। यो <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> सँग जोडिएको छ जसले इमेल, अनुप्रयोगहरू, र वेबसाइटहरू लगायतका तपाईँका नेटवर्क गतिविधि अनुगमन गर्न सक्छ।\n\nतपाईँ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> सँग पनि जडित हुनुहुन्छ, जसले तपाईँको व्यक्तिगत नेटवर्क गतिविधि अनुगमन गर्न सक्छ।"</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"तपाईँको उपकरण <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारा व्यवस्थित गरिन्छ।\n\nतपाईँको प्रशासकले तपाईँको यन्त्र र त्यसको स्थान जानकारीमार्फत सेटिङहरू, कर्पोरेट पहुँच, अनुप्रयोगहरू, तपाईँको यन्त्रसँग सम्बद्ध डेटा र तपाईँको यन्त्रको स्थान जानकारीको अनुगमन र व्यवस्थापन गर्न सक्छ।\n\nतपाईँ <xliff:g id="APPLICATION">%2$s</xliff:g> सँग जडित हुनुहुन्छ जसले इमेल, अनुप्रयोगहरू, र वेबसाइटहरू लगायतका तपाईँका नेटवर्क गतिविधिका अनुगमन गर्न सक्छ।\n\nथप जानकारीको लागि तपाईको प्रशासकलाई सम्पर्क गर्नुहोस्।"</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"तपाईँले नखोले सम्म उपकरण बन्द रहनेछ"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"छिटो सूचनाहरू प्राप्त गर्नुहोस्"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"तपाईँले अनलक गर्नअघि तिनीहरूलाई हेर्नुहोस्"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"विस्तार गर्नुहोस्"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"संक्षिप्त पार्नुहोस्"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"पर्दा राखेका छ"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"तपाईँले अनपिन नगरेसम्म यसले त्यसलाई दृश्यमा कायम राख्छ। अनपिन गर्न पछाडि बटनलाई छोइराख्नुहोस्।"</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"बुझेँ"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"धन्यवाद पर्दैन"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"लुकाउनुहुन्छ <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"यो तपाईँ सेटिङ् मा यो बारी अर्को समय देखापर्नेछ।"</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"लुकाउनुहोस्"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> भोल्यूम संवाद बन्न चाहन्छ।"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"अनुमति दिनुहोस्"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"अस्वीकार गर्नुहोस्"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> भोल्यूम संवाद हो"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"मूललाई पुनर्स्थापना गर्न ट्याप गर्नुहोस्।"</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"तपाईँले कार्य प्रोफाइल प्रयोग गर्दै हुनुहुन्छ"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"कल"</item>
- <item msgid="5997713001067658559">"प्रणाली"</item>
- <item msgid="7858983209929864160">"रिङटोन"</item>
- <item msgid="1850038478268896762">"मिडिया"</item>
- <item msgid="8265110906352372092">"अलार्म"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"ब्लुटुथ"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"पहुँच"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"कल"</string>
+ <string name="stream_system" msgid="7493299064422163147">"प्रणाली"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"घन्टी"</string>
+ <string name="stream_music" msgid="9086982948697544342">"मिडिया"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"अलार्म"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"सूचना"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"ब्लुटुथ"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"दोहोरो बहु टोनको फ्रिक्वेन्सी"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"पहुँच"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s। अनम्यूट गर्नका लागि ट्याप गर्नुहोस्।"</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s। कम्पनमा सेट गर्नका लागि ट्याप गर्नुहोस्। पहुँच सम्बन्धी सेवाहरू म्यूट हुन सक्छन्।"</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s। म्यूट गर्नका लागि ट्याप गर्नुहोस्। पहुँच सम्बन्धी सेवाहरू म्यूट हुन सक्छन्।"</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"द्रुत सेटिङहरू"</string>
<string name="status_bar" msgid="4877645476959324760">"स्थिति पट्टी"</string>
<string name="overview" msgid="4018602013895926956">"परिदृश्य"</string>
- <string name="demo_mode" msgid="2389163018533514619">"डेमो मोड"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"प्रणालीको UI को प्रदर्शन मोड"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"डेमो मोड सक्षम गर्नुहोस्"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"डेमो मोड देखाउनुहोस्"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"इथरनेट"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"सक्रिय"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"निष्क्रिय"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"सशक्त सूचना नियन्त्रणहरू मार्फत तपाईँ अनुप्रयाेगका सूचनाहरूका लागि ० देखि ५ सम्मको महत्व सम्बन्धी स्तर सेट गर्न सक्नुहुन्छ। \n\n"<b>"स्तर ५"</b>" \n- सूचनाको सूचीको माथिल्लो भागमा देखाउने \n- पूर्ण स्क्रिनमा अवरोधका लागि अनुमति दिने \n- सधैँ चियाउने \n\n"<b>"स्तर ४"</b>" \n- पूर्ण स्क्रिनमा अवरोधलाई रोक्ने \n- सधैँ चियाउने \n\n"<b>"स्तर ३"</b>" \n- पूर्ण स्क्रिनमा अवरोधलाई रोक्ने \n- कहिल्यै नचियाउने \n\n"<b>"स्तर २"</b>" \n- पूर्ण स्क्रिनमा अवरोधलाई रोक्ने \n- कहिल्यै नचियाउने \n- कहिल्यै पनि आवाज ननिकाल्ने र कम्पन नगर्ने \n\n"<b>"स्तर १"</b>" \n- पूर्ण स्क्रिनमा अवरोध रोक्ने \n- कहिल्यै नचियाउने \n- कहिल्यै पनि आवाज ननिकाल्ने वा कम्पन नगर्ने \n- लक स्क्रिन र वस्तुस्थिति पट्टीबाट लुकाउने \n- सूचनाको सूचीको तल्लो भागमा देखाउने \n\n"<b>"स्तर ०"</b>" \n- अनुप्रयोगका सबै सूचनाहरूलाई रोक्ने"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"महत्व: स्वचालित"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"महत्व: स्तर ०"</string>
- <string name="min_importance" msgid="560779348928574878">"महत्व: स्तर १"</string>
- <string name="low_importance" msgid="7571498511534140">"महत्व: स्तर २"</string>
- <string name="default_importance" msgid="7609889614553354702">"महत्व: स्तर ३"</string>
- <string name="high_importance" msgid="3441537905162782568">"महत्व: स्तर ४"</string>
- <string name="max_importance" msgid="4880179829869865275">"महत्व: स्तर ५"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"अनुप्रयोगले प्रत्येक सूचनाका लागि महत्व निर्धारण गर्छ।"</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"यस अनुप्रयोगका सूचनाहरूलाई कहिल्यै नदेखाउनुहोस्।"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"पूर्ण स्क्रिनमा अवरोध नपुर्याउने वा नचियाउने, आवाज ननिकाल्ने वा कम्पन नगर्ने। लक स्क्रिन र वस्तुस्थिति पट्टीबाट लुकाउने।"</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"पूर्ण स्क्रिनमा अवरोध नपुर्याउने, नचियाउने, आवाज ननिकाल्ने वा कम्पन नगर्ने।"</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"पूर्ण स्क्रिनमा अवरोध नपुर्याउने वा नचियाउने।"</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"सधैँ चियाउने। पूर्ण स्क्रिनमा अवरोध नपुर्याउने।"</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"सधैँ चियाउने र पूर्ण स्क्रिनमा अवरोधलाई अनुमति दिने।"</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"थप सेटिङहरू"</string>
<string name="notification_done" msgid="5279426047273930175">"सम्पन्न भयो"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> का सूचनाका लागि नियन्त्रणहरू"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"सेटिङहरूको क्रमलाई सम्पादन गर्नुहोस्।"</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_2">%2$d</xliff:g> मध्ये पृष्ठ <xliff:g id="ID_1">%1$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"विस्तृत गर्नुहोस्"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"सानो बनाउनुहोस्"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"खारेज गर्नुहोस्"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"फोन तातो भइरहेको छ"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"फोन चिसो हुँदै गर्दा केही विशेषताहरूलाई सीमित गरिन्छ"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"तपाईंको फोन स्वतः चिसो हुने प्रयास गर्नेछ। तपाईं अझै पनि आफ्नो फोनको प्रयोग गर्न सक्नुहुन्छ तर त्यो अझ ढिलो चल्न सक्छ।\n\nचिसो भएपछि तपाईंको फोन सामान्य गतिमा चल्नेछ।"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ne-rNP/strings_car.xml b/packages/SystemUI/res/values-ne/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-ne-rNP/strings_car.xml
rename to packages/SystemUI/res/values-ne/strings_car.xml
diff --git a/packages/SystemUI/res/values-ne-rNP/strings_tv.xml b/packages/SystemUI/res/values-ne/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-ne-rNP/strings_tv.xml
rename to packages/SystemUI/res/values-ne/strings_tv.xml
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 1d7ac5ec..9c6fbbd 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -81,7 +81,7 @@
<string name="use_ptp_button_title" msgid="7517127540301625751">"Koppelen als camera (PTP)"</string>
<string name="installer_cd_button_title" msgid="2312667578562201583">"AFT-app voor Mac installeren"</string>
<string name="accessibility_back" msgid="567011538994429120">"Terug"</string>
- <string name="accessibility_home" msgid="8217216074895377641">"Startpagina"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Homepage"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
<string name="accessibility_recent" msgid="5208608566793607626">"Overzicht"</string>
<string name="accessibility_search_light" msgid="1103867596330271848">"Zoeken"</string>
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Accu wordt opgeladen, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> procent."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Systeeminstellingen."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Meldingen."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Overloopcontainer voor meldingen"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Melding wissen"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"gps ingeschakeld."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Verbinding maken met gps."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Vergrendelingsscherm."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Instellingen"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Overzicht."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Sluiten"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi uitgeschakeld."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Alles wissen"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Nu starten"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Geen meldingen"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Apparaat wordt mogelijk gecontroleerd"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profiel kan worden gecontroleerd"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Netwerk kan worden gecontroleerd"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Netwerk kan worden gecontroleerd"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Apparaatcontrole"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profielcontrole"</string>
<string name="monitoring_title" msgid="169206259253048106">"Netwerkcontrole"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Netwerkregistratie"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN uitschakelen"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Verbinding met VPN verbreken"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Je apparaat wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJe beheerder kan instellingen, bedrijfstoegang, apps, gegevens voor je apparaat en locatiegegevens voor je apparaat controleren en beheren. Neem voor meer informatie contact op met je beheerder."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Je apparaat wordt beheerd door <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> gebruikt <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> om je apparaat te beheren."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Je beheerder kan instellingen, zakelijke toegang, apps, aan je apparaat gekoppelde gegevens en de locatiegegevens van je apparaat controleren en beheren."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Meer informatie"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Je bent verbonden met <xliff:g id="VPN_APP">%1$s</xliff:g>, waarmee je netwerkactiviteit (waaronder e-mails, apps en websites) kan worden gecontroleerd."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN-instellingen openen"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Je beheerder heeft netwerkregistratie ingeschakeld, waarmee verkeer op je apparaat wordt bijgehouden.\n\nNeem voor meer informatie contact op met je beheerder."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Je hebt een app toestemming gegeven voor het instellen van een VPN-verbinding.\n\nMet deze app kan je apparaat- en netwerkactiviteit worden gecontroleerd, inclusief e-mails, apps en websites."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Je apparaat wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJe beheerder kan instellingen, bedrijfstoegang, apps, gegevens voor je apparaat en locatiegegevens voor je apparaat controleren en beheren.\n\nU bent verbonden met een VPN, die je netwerkactiviteit kan controleren, waaronder e-mails, apps en websites.\n\nNeem voor meer informatie contact op met je beheerder."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Je werkprofiel wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJe beheerder kan je netwerkactiviteit controleren, inclusief e-mails, apps en websites.\n\nNeem contact op met je beheerder voor meer informatie.\n\nU bent ook verbonden met een VPN waarmee je netwerkactiviteit kan worden gecontroleerd."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"U bent verbonden met <xliff:g id="APPLICATION">%1$s</xliff:g>, waarmee je netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Je bent verbonden met <xliff:g id="APPLICATION">%1$s</xliff:g>, waarmee je persoonlijke netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Je werkprofiel wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Deze is verbonden met <xliff:g id="APPLICATION">%2$s</xliff:g>, waarmee je werkgerelateerde netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites.\n\nNeem contact op met je beheerder voor meer informatie."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Je werkprofiel wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Deze is verbonden met <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, waarmee je werkgerelateerde netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites.\n\nU bent ook verbonden met <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, waarmee je persoonlijke netwerkactiviteit kan worden gecontroleerd."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Je apparaat wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJe beheerder kan instellingen, zakelijke toegang, apps, gekoppelde apparaatgegevens en locatiegegevens voor je apparaat controleren en beheren.\n\nU bent verbonden met <xliff:g id="APPLICATION">%2$s</xliff:g> waarmee je netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites.\n\nNeem contact op met je beheerder voor meer informatie."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Het apparaat blijft vergrendeld totdat u het handmatig ontgrendelt"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Sneller meldingen ontvangen"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Weergeven voordat u ontgrendelt"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Uitvouwen"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Samenvouwen"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Scherm is vastgezet"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Het scherm blijft zichtbaar totdat je het losmaakt. Tik op Terug en houd vast om het scherm los te maken."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Ik snap het"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Nee, bedankt"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> verbergen?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Deze wordt opnieuw weergegeven zodra u de instelling weer inschakelt."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Verbergen"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> wil het volumedialoogvenster zijn."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Toestaan"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Weigeren"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> is het volumedialoogvenster"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Tik om het origineel te herstellen."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"U gebruikt je werkprofiel"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Bellen"</item>
- <item msgid="5997713001067658559">"Systeem"</item>
- <item msgid="7858983209929864160">"Bellen"</item>
- <item msgid="1850038478268896762">"Media"</item>
- <item msgid="8265110906352372092">"Alarm"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Toegankelijkheid"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Bellen"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Systeem"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Bellen"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Media"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarm"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Melding"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Frequentie voor tweevoudige multitoon"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Toegankelijkheid"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Tik om dempen op te heffen."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Tik om in te stellen op trillen. Toegankelijkheidsservices kunnen zijn gedempt."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tik om te dempen. Toegankelijkheidsservices kunnen zijn gedempt."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Snelle instellingen"</string>
<string name="status_bar" msgid="4877645476959324760">"Statusbalk"</string>
<string name="overview" msgid="4018602013895926956">"Overzicht"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Demomodus"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Demomodus voor systeemgebruikersinterface"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Demomodus inschakelen"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Demomodus weergeven"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Aan"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Uit"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Met beheeropties voor meldingen met betrekking tot stroomverbruik kun je een belangrijkheidsniveau van 0 tot 5 instellen voor de meldingen van een app. \n\n"<b>"Niveau 5"</b>" \n- Boven aan de lijst met meldingen weergeven \n- Onderbreking op volledig scherm toestaan \n- Altijd korte weergave \n\n"<b>"Niveau 4"</b>" \n- Geen onderbreking op volledig scherm \n- Altijd korte weergave \n\n"<b>"Niveau 3"</b>" \n- Geen onderbreking op volledig scherm \n- Nooit korte weergave \n\n"<b>"Niveau 2"</b>" \n- Geen onderbreking op volledig scherm \n- Nooit korte weergave \n- Nooit geluid laten horen of trillen \n\n"<b>"Niveau 1"</b>" \n- Geen onderbreking op volledig scherm \n- Nooit korte weergave \n- Nooit geluid laten horen of trillen \n- Verbergen op vergrendelingsscherm en statusbalk \n- Onder aan de lijst met meldingen weergeven \n\n"<b>"Niveau 0"</b>" \n- Alle meldingen van de app blokkeren"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Belang: automatisch"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Belang: niveau 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Belang: niveau 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Belang: niveau 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Belang: niveau 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Belang: niveau 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Belang: niveau 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"De app bepaalt het belang van elke melding."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Nooit meldingen van deze app weergeven."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Geen onderbreking op volledig scherm, korte weergave, geluid of trilling. Verbergen op vergrendelingsscherm en statusbalk."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Geen onderbreking op volledig scherm, korte weergave, geluid of trilling."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Geen onderbreking op volledig scherm of korte weergave."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Altijd korte weergave. Geen onderbreking op volledig scherm."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Altijd korte weergave en onderbreking op volledig scherm toestaan."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Meer instellingen"</string>
<string name="notification_done" msgid="5279426047273930175">"Gereed"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Beheeropties voor <xliff:g id="APP_NAME">%1$s</xliff:g>-meldingen"</string>
@@ -554,7 +566,7 @@
<string name="keyboard_key_num_lock" msgid="5052537581246772117">"Num Lock"</string>
<string name="keyboard_key_numpad_template" msgid="8729216555174634026">"<xliff:g id="NAME">%1$s</xliff:g> op numeriek toetsenblok"</string>
<string name="keyboard_shortcut_group_system" msgid="6472647649616541064">"Systeem"</string>
- <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Startpagina"</string>
+ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Homepage"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recent"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Terug"</string>
<string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"Meldingen"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Volgorde van instellingen bewerken."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Pagina <xliff:g id="ID_1">%1$d</xliff:g> van <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Uitvouwen"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimaliseren"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Sluiten"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"De telefoon wordt warm"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Bepaalde functies zijn beperkt terwijl de telefoon afkoelt"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Je telefoon probeert automatisch af te koelen. Je kunt je telefoon nog steeds gebruiken, maar deze kan langzamer werken.\n\nZodra de telefoon is afgekoeld, werkt deze weer normaal."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pa-rIN-land/strings.xml b/packages/SystemUI/res/values-pa-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-pa-rIN-land/strings.xml
rename to packages/SystemUI/res/values-pa-land/strings.xml
diff --git a/packages/SystemUI/res/values-pa-rIN/config.xml b/packages/SystemUI/res/values-pa/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-pa-rIN/config.xml
rename to packages/SystemUI/res/values-pa/config.xml
diff --git a/packages/SystemUI/res/values-pa-rIN/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
similarity index 92%
rename from packages/SystemUI/res/values-pa-rIN/strings.xml
rename to packages/SystemUI/res/values-pa/strings.xml
index bdb1e43..3f0915b 100644
--- a/packages/SystemUI/res/values-pa-rIN/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"ਬੈਟਰੀ ਚਾਰਜ ਹੋ ਰਹੀ ਹੈ, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> ਪ੍ਰਤੀਸ਼ਤ।"</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"ਸਿਸਟਮ ਸੈਟਿੰਗਾਂ।"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"ਸੂਚਨਾਵਾਂ।"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"ਸੂਚਨਾ ਓਵਰਫਲੋ ਕੰਟੇਨਰ"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"ਸੂਚਨਾ ਹਟਾਓ।"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ਸਮਰਥਿਤ।"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS ਪ੍ਰਾਪਤ ਕਰ ਰਿਹਾ ਹੈ।"</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ਲੌਕ ਸਕ੍ਰੀਨ।"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"ਸੈਟਿੰਗਾਂ"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"ਰੂਪ-ਰੇਖਾ।"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"ਬੰਦ ਕਰੋ"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>।"</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi ਬੰਦ ਕੀਤਾ।"</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"ਸਭ ਸਾਫ਼ ਕਰੋ"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"ਹੁਣ ਚਾਲੂ ਕਰੋ"</string>
<string name="empty_shade_text" msgid="708135716272867002">"ਕੋਈ ਸੂਚਨਾਵਾਂ ਨਹੀਂ"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"ਡੀਵਾਈਸ ਦਾ ਨਿਰੀਖਣ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"ਪ੍ਰੋਫਾਈਲ ਦਾ ਨਿਰੀਖਣ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ"</string>
<string name="vpn_footer" msgid="2388611096129106812">"ਨੈੱਟਵਰਕ ਦਾ ਨਿਰੀਖਣ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"ਹੋ ਸਕਦਾ ਹੈ ਨੈੱਟਵਰਕ ਦੀ ਨਿਗਰਾਨੀ ਹੋ ਰਹੀ ਹੋਵੇ"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"ਡੀਵਾਈਸ ਦਾ ਨਿਰੀਖਣ ਕਰਨਾ"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"ਪ੍ਰੋਫਾਈਲ ਦਾ ਨਿਰੀਖਣ ਕਰਨਾ"</string>
<string name="monitoring_title" msgid="169206259253048106">"ਨੈੱਟਵਰਕ ਨਿਰੀਖਣ ਕਰ ਰਿਹਾ ਹੈ"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"ਨੈੱਟਵਰਕ ਲੌਗਿੰਗ"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN ਨੂੰ ਡਿਸਕਨੈਕਟ ਕਰੋ"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"ਤੁਹਾਡੀ ਡੀਵਾਈਸ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਵੱਲੋਂ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।\n\nਤੁਹਾਡਾ ਪ੍ਰਬੰਧਕ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਸ, ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਨਾਲ ਸੰਬੰਧਿਤ ਡੈਟਾ ਅਤੇ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਦੀ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਜਾਣਕਾਰੀ ਦਾ ਨਿਰੀਖਣ ਅਤੇ ਉਸਨੂੰ ਵਿਵਸਥਿਤ ਕਰ ਸਕਦਾ ਹੈ। ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"ਤੁਹਾਡੀ ਡੀਵਾਈਸ <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।"</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਦੇ ਪ੍ਰਬੰਧਨ ਲਈ <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ।"</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਅਤੇ ਉਸਦੀ ਟਿਕਾਣਾ ਜਾਣਕਾਰੀ ਸਬੰਧੀ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਾਂ, ਡੈਟੇ ਦੀ ਨਿਗਰਾਨੀ ਅਤੇ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦਾ ਹੈ।"</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"ਹੋਰ ਜਾਣੋ"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"ਤੁਸੀਂ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ, ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।"</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਨੇ ਨੈੱਟਵਰਕ ਲੌਗਿੰਗ ਨੂੰ ਚਾਲੂ ਕੀਤਾ ਹੋਇਆ ਹੈ, ਜੋ ਕਿ ਤੁਹਾਡੀ ਡੀਵਾਈਸ \'ਤੇ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕਰਦਾ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"ਤੁਸੀਂ ਇੱਕ ਐਪ ਨੂੰ ਇੱਕ VPN ਕਨੈਕਸ਼ਨ ਸੈਟ ਅਪ ਕਰਨ ਦੀ ਅਨੁਮਤੀ ਦਿੱਤੀ ਹੈ।\n\nਇਹ ਐਪ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਅਤੇ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦਾ ਹੈ, ਈਮੇਲਾਂ, ਐਪਸ ਅਤੇ ਸੁਰੱਖਿਅਤ ਵੈਬਸਾਈਟਾਂ ਸਮੇਤ।"</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"ਤੁਹਾਡੀ ਡੀਵਾਈਸ <xliff:g id="ORGANIZATION">%1$s</xliff:g>ਵੱਲੋਂ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।\n\nਪ੍ਰਬੰਧਕ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਸ, ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਨਾਲ ਸੰਬੰਧਿਤ ਡੈਟਾ ਅਤੇ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਦੀ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਜਾਣਕਾਰੀ ਦਾ ਨਿਰੀਖਣ ਅਤੇ ਉਸਨੂੰ ਵਿਵਸਥਿਤ ਕਰ ਸਕਦਾ ਹੈ।\n\nਤੁਸੀਂ ਇੱਕ VPN ਨਾਲ ਵੀ ਕਨੈਕਟ ਕੀਤਾ ਹੈ, ਜੋ ਤੁਹਾਡੀ ਨਿੱਜੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦਾ ਹੈ, ਈਮੇਲਾਂ, ਐਪਸ ਅਤੇ ਵੈਬਸਾਈਟਾਂ ਸਮੇਤ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"ਤੁਹਾਡੀ ਕਾਰਜ ਪ੍ਰੋਫ਼ਾਈਲ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਦੁਆਰਾ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।\n\nਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਈਮੇਲ, ਐਪਸ, ਅਤੇ ਵੈੱਬਪੰਨੇ ਸੰਤੇ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰਨ ਦੇ ਸਮਰੱਥ ਹੈ।\n\nਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।\n\nਤੁਸੀਂ VPN ਨਾਲ ਵੀ ਕਨੈਕਟ ਹੋ, ਜੋ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦਾ ਹੈ।"</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"ਤੁਸੀਂ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲ, ਐਪਸ ਅਤੇ ਵੈਬਸਫ਼ਿਆਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦੀ ਹੈ।"</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"ਤੁਸੀਂ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ, ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨਿੱਜੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।"</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"ਤੁਹਾਡੀ ਕਾਰਜ ਪ੍ਰੋਫ਼ਾਈਲ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਦੁਆਰਾ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਹ <xliff:g id="APPLICATION">%2$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ, ਜੋ ਈਮੇਲ, ਐਪਸ ਅਤੇ ਵੈਬਸਫ਼ਿਆਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦੀ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"ਤੁਹਾਡੀ ਕਾਰਜ ਪ੍ਰੋਫ਼ਾਈਲ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਦੁਆਰਾ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਹ <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ, ਜੋ ਈਮੇਲ, ਐਪਸ ਅਤੇ ਵੈਬਸਫ਼ਿਆਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦੀ ਹੈ।\n\nਤੁਸੀਂ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> ਨਾਲ ਵੀ ਕਨੈਕਟ ਹੋ, ਜੋ ਤੁਹਾਡੀ ਨਿੱਜੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦਾ ਹੈ।"</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"ਤੁਹਾਡੀ ਡੀਵਾਈਸ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਦੁਆਰਾ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।\n\nਪ੍ਰਬੰਧਕ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਸ, ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਨਾਲ ਸੰਬੰਧਿਤ ਡੈਟਾ ਅਤੇ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਦੀ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਜਾਣਕਾਰੀ ਦਾ ਨਿਰੀਖਣ ਅਤੇ ਉਸਨੂੰ ਵਿਵਸਥਿਤ ਕਰ ਸਕਦਾ ਹੈ।\n\nਤੁਸੀਂ ਇੱਕ <xliff:g id="APPLICATION">%2$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲ, ਐਪਸ ਅਤੇ ਵੈੱਬਪੰਨੇ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦਾ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"ਡੀਵਾਈਸ ਲੌਕ ਰਹੇਗੀ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਮੈਨੂਅਲੀ ਅਨਲੌਕ ਨਹੀਂ ਕਰਦੇ"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"ਤੇਜ਼ੀ ਨਾਲ ਸੂਚਨਾਵਾਂ ਪ੍ਰਾਪਤ ਕਰੋ"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"ਅਨਲੌਕ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਉਹਨਾਂ ਨੂੰ ਦੇਖੋ"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"ਵਿਸਤਾਰ ਕਰੋ"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"ਨਸ਼ਟ ਕਰੋ"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"ਸਕ੍ਰੀਨ ਪਿੰਨ ਕੀਤੀ"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"ਇਹ ਇਸ ਨੂੰ ਤੁਹਾਡੇ ਵੱਲੋਂ ਅਨਪਿੰਨ ਨਾ ਕੀਤੇ ਜਾਣ ਤੱਕ ਦ੍ਰਿਸ਼ ਵਿੱਚ ਰੱਖਦਾ ਹੈ। ਅਨਪਿੰਨ ਕਰਨ ਲਈ ਵਾਪਸ ਜਾਓ ਨੂੰ ਸਪਰਸ਼ ਕਰਕੇ ਦਬਾਈ ਰੱਖੋ।"</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"ਸਮਝ ਲਿਆ"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"ਨਹੀਂ ਧੰਨਵਾਦ"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"ਕੀ <xliff:g id="TILE_LABEL">%1$s</xliff:g> ਨੂੰ ਲੁਕਾਉਣਾ ਹੈ?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"ਇਹ ਅਗਲੀ ਵਾਰ ਮੁੜ ਪ੍ਰਗਟ ਹੋਵੇਗਾ ਜਦੋਂ ਤੁਸੀਂ ਇਸਨੂੰ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਚਾਲੂ ਕਰਦੇ ਹੋ।"</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"ਲੁਕਾਓ"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਵੋਲਯੂਮ ਡਾਇਲੌਗ ਬਣਨਾ ਚਾਹੁੰਦਾ ਹੈ।"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"ਆਗਿਆ ਦਿਓ"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"ਅਸਵੀਕਾਰ ਕਰੋ"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਵੋਲਯੂਮ ਡਾਇਲੌਗ ਹੈ"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"ਅਸਲ ਨੂੰ ਮੁੜ-ਬਹਾਲ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"ਤੁਸੀਂ ਆਪਣੀ ਕੰਮ ਪ੍ਰੋਫਾਈਲ ਵਰਤ ਰਹੇ ਹੋ"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"ਕਾਲ ਕਰੋ"</item>
- <item msgid="5997713001067658559">"ਸਿਸਟਮ"</item>
- <item msgid="7858983209929864160">"ਰਿੰਗ ਕਰੋ"</item>
- <item msgid="1850038478268896762">"ਮੀਡੀਆ"</item>
- <item msgid="8265110906352372092">"ਅਲਾਰਮ"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"ਬਲੂਟੁੱਥ"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"ਪਹੁੰਚਯੋਗਤਾ"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"ਕਾਲ"</string>
+ <string name="stream_system" msgid="7493299064422163147">"ਸਿਸਟਮ"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"ਘੰਟੀ ਵਜਾਓ"</string>
+ <string name="stream_music" msgid="9086982948697544342">"ਮੀਡੀਆ"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"ਅਲਾਰਮ"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"ਸੂਚਨਾ"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"ਬਲੂਟੁੱਥ"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"ਦੂਹਰੀ ਮਲਟੀ ਟੋਨ ਆਵਰਤੀ"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"ਪਹੁੰਚਯੋਗਤਾ"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s। ਅਣਮਿਊਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s। ਥਰਥਰਾਹਟ ਸੈੱਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ। ਪਹੁੰਚਯੋਗਤਾ ਸੇਵਾਵਾਂ ਮਿਊਟ ਹੋ ਸਕਦੀਆਂ ਹਨ।"</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s। ਮਿਊਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ। ਪਹੁੰਚਯੋਗਤਾ ਸੇਵਾਵਾਂ ਮਿਊਟ ਹੋ ਸਕਦੀਆਂ ਹਨ।"</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"ਤਤਕਾਲ ਸੈੱਟਿੰਗਜ਼"</string>
<string name="status_bar" msgid="4877645476959324760">"ਸਥਿਤੀ ਬਾਰ"</string>
<string name="overview" msgid="4018602013895926956">"ਰੂਪ-ਰੇਖਾ"</string>
- <string name="demo_mode" msgid="2389163018533514619">"ਡੈਮੋ ਮੋਡ"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"ਸਿਸਟਮ UI ਡੈਮੋ ਮੋਡ"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"ਡੈਮੋ ਮੋਡ ਸਮਰੱਥ ਬਣਾਓ"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"ਡੈਮੋ ਮੋਡ ਦੇਖੋ"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"ਈਥਰਨੈਟ"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"ਚਾਲੂ"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"ਬੰਦ"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"ਪਾਵਰ ਸੂਚਨਾ ਕੰਟਰੋਲਾਂ ਨਾਲ, ਤੁਸੀਂ ਕਿਸੇ ਐਪ ਦੀਆਂ ਸੂਚਨਾਵਾਂ ਲਈ ਮਹੱਤਤਾ ਪੱਧਰ ਨੂੰ 0 ਤੋਂ 5 ਤੱਕ ਸੈੱਟ ਕਰ ਸਕਦੇ ਹੋ। \n\n"<b>"ਪੱਧਰ 5"</b>" \n- ਸੂਚਨਾ ਸੂਚੀ ਦੇ ਸਿਖਰ \'ਤੇ ਵਿਖਾਓ \n- ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ ਦੀ ਆਗਿਆ ਦਿਓ \n- ਹਮੇਸ਼ਾਂ ਝਲਕ ਵਿਖਾਓ \n\n"<b>"ਪੱਧਰ 4"</b>" \n- ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ ਨੂੰ ਰੋਕੋ \n- ਹਮੇਸ਼ਾਂ ਝਲਕ ਵਿਖਾਓ \n\n"<b>"ਪੱਧਰ 3"</b>" \n- ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ ਨੂੰ ਰੋਕੋ \n- ਕਦੇ ਝਲਕ ਨਾ ਵਿਖਾਓ \n\n"<b>"ਪੱਧਰ 2"</b>" \n- ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ ਰੋਕੋ \n- ਕਦੇ ਝਲਕ ਨਾ ਵਿਖਾਓ \n- ਕਦੇ ਵੀ ਧੁਨੀ ਜਾਂ ਥਰਥਰਾਹਟ ਨਾ ਕਰੋ \n\n"<b>"ਪੱੱਧਰ 1"</b>" \n- ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ ਨੂੰ ਰੋਕੋ \n- ਕਦੇ ਝਲਕ ਨਾ ਵਿਖਾਓ \n- ਕਦੇ ਧੁਨੀ ਜਾਂ ਥਰਥਰਾਹਟ ਨਾ ਕਰੋ \n- ਲੌਕ ਸਕ੍ਰੀਨ ਅਤੇ ਸਥਿਤੀ ਪੱਟੀ ਤੋਂ ਲੁਕਾਓ \n- ਸੂਚਨਾ ਸੂਚੀ ਦੇ ਹੇਠਾਂ ਵਿਖਾਓ \n\n"<b>"ਪੱਧਰ 0"</b>" \n- ਐਪ ਤੋਂ ਸਾਰੀਆਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਬਲੌਕ ਕਰੋ"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"ਮਹੱਤਤਾ: ਸਵੈਚਾਲਿਤ"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"ਮਹੱਤਤਾ: ਪੱਧਰ 0"</string>
- <string name="min_importance" msgid="560779348928574878">"ਮਹੱਤਤਾ: ਪੱਧਰ 1"</string>
- <string name="low_importance" msgid="7571498511534140">"ਮਹੱਤਤਾ: ਪੱਧਰ 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"ਮਹੱਤਤਾ: ਪੱਧਰ 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"ਮਹੱਤਤਾ: ਪੱਧਰ 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"ਮਹੱਤਤਾ: ਪੱਧਰ 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"ਐਪ ਹਰੇਕ ਸੂਚਨਾ ਦੀ ਮਹੱਤਤਾ ਦਾ ਪਤਾ ਲਗਾਉਂਦੀ ਹੈ।"</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"ਇਸ ਐਪ ਤੋਂ ਸੂਚਨਾਵਾਂ ਕਦੇ ਨਾ ਵਿਖਾਓ।"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"ਕੋਈ ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ, ਝਲਕ, ਧੁਨੀ, ਜਾਂ ਥਰਥਰਾਹਟ ਨਹੀਂ। ਲੌਕ ਸਕ੍ਰੀਨ ਅਤੇ ਸਥਿਤੀ ਪੱਟੀ ਤੋਂ ਲੁਕਾਓ।"</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"ਕੋਈ ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ, ਝਲਕ, ਧੁਨੀ ਜਾਂ ਥਰਥਰਾਹਟ ਨਹੀਂ।"</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"ਕੋਈ ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ ਜਾਂ ਝਲਕ ਨਹੀਂ।"</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"ਹਮੇਸ਼ਾਂ ਝਲਕ ਵਿਖਾਓ। ਕੋਈ ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ ਨਹੀਂ।"</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"ਹਮੇਸ਼ਾਂ ਝਲਕ ਵਿਖਾਓ, ਅਤੇ ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ ਦੀ ਆਗਿਆ ਦਿਓ।"</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"ਹੋਰ ਸੈਟਿੰਗਾਂ"</string>
<string name="notification_done" msgid="5279426047273930175">"ਹੋ ਗਿਆ"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਸੂਚਨਾ ਕੰਟਰੋਲ"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"ਸੈਟਿੰਗਾਂ ਦੇ ਕ੍ਰਮ ਦਾ ਸੰਪਾਦਨ ਕਰੋ।"</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_2">%2$d</xliff:g> ਦਾ <xliff:g id="ID_1">%1$d</xliff:g> ਪੰਨਾ"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"ਵਿਸਤਾਰ ਕਰੋ"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"ਛੋਟਾ ਕਰੋ"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"ਖਾਰਜ ਕਰੋ"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"ਫ਼ੋਨ ਗਰਮ ਹੋ ਰਿਹਾ ਹੈ"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"ਫ਼ੋਨ ਦੇ ਠੰਡਾ ਹੋਣ ਦੇ ਦੌਰਾਨ ਕੁਝ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਸੀਮਿਤ ਹੁੰਦੀਆਂ ਹਨ"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"ਤੁਹਾਡਾ ਫ਼ੋਨ ਸਵੈਚਲਿਤ ਰੂਪ ਵਿੱਚ ਠੰਡਾ ਹੋਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੇਗਾ। ਤੁਸੀਂ ਹਾਲੇ ਵੀ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਵਰਤ ਸਕਦੇ ਹੋ, ਪਰੰਤੂ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਇਹ ਵਧੇਰੇ ਹੌਲੀ ਚੱਲੇ।\n\nਇੱਕ ਵਾਰ ਠੰਡਾ ਹੋਣ ਤੋਂ ਬਾਅਦ ਤੁਹਾਡਾ ਫ਼ੋਨ ਸਧਾਰਨ ਤੌਰ \'ਤੇ ਚੱਲੇਗਾ।"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pa-rIN/strings_car.xml b/packages/SystemUI/res/values-pa/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-pa-rIN/strings_car.xml
rename to packages/SystemUI/res/values-pa/strings_car.xml
diff --git a/packages/SystemUI/res/values-pa-rIN/strings_tv.xml b/packages/SystemUI/res/values-pa/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-pa-rIN/strings_tv.xml
rename to packages/SystemUI/res/values-pa/strings_tv.xml
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 0bd9179..abaf4bc 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -165,6 +165,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Ładuję baterię, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> procent."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Ustawienia systemu."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Powiadomienia."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Kontener przepełnienia powiadomień"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Usuń powiadomienie."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS włączony."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Pobieranie danych GPS."</string>
@@ -186,6 +187,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Ekran blokady."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Ustawienia"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Przegląd."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Zamknij"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi wyłączone."</string>
@@ -404,18 +407,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Ukryj wszystkie"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Rozpocznij teraz"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Brak powiadomień"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Urządzenie może być monitorowane"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil może być monitorowany"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Sieć może być monitorowana"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Sieć może być monitorowana"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Monitorowanie urządzeń"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitorowanie profilu"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitorowanie sieci"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Rejestrowanie sieciowe"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Wyłącz VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Rozłącz z VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Urządzeniem zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator może monitorować ustawienia, firmowe uprawnienia dostępu, aplikacje, dane powiązane z tym urządzeniem i informacje o lokalizacji urządzenia oraz nimi zarządzać. Skontaktuj się z nim, by dowiedzieć się więcej."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Twoim urządzeniem zarządza <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> używa aplikacji <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> do zarządzania Twoim urządzeniem."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administrator może monitorować ustawienia, dostęp firmowy, aplikacje, dane dotyczące urządzenia i lokalizacji oraz nimi zarządzać."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Więcej informacji"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Łączysz się z aplikacją <xliff:g id="VPN_APP">%1$s</xliff:g>, która może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Otwórz ustawienia VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administrator włączył rejestrowanie sieciowe, które pozwala monitorować ruch na Twoim urządzeniu.\n\nAby uzyskać więcej informacji, skontaktuj się z administratorem."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Aplikacja otrzymała od Ciebie uprawnienia do konfigurowania połączenia VPN.\n\nMoże ona monitorować Twoją aktywność na urządzeniu i w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Urządzeniem zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator może monitorować ustawienia, firmowe uprawnienia dostępu, aplikacje, dane powiązane z tym urządzeniem i informacje o lokalizacji urządzenia oraz nimi zarządzać.\n\nMasz połączenie z siecią VPN, która może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe.\n\nAby uzyskać więcej informacji, skontaktuj się z administratorem."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Twoim profilem do pracy zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe.\n\nSkontaktuj się z nim, by dowiedzieć się więcej.\n\nMasz też połączenie z siecią VPN, która może monitorować Twoją aktywność w sieci."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Masz połączenie z aplikacją <xliff:g id="APPLICATION">%1$s</xliff:g>, która może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
@@ -423,7 +434,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Masz połączenie z aplikacją <xliff:g id="APPLICATION">%1$s</xliff:g>, która może monitorować Twoją prywatną aktywność w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Twoim profilem do pracy zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Profil jest połączony z aplikacją <xliff:g id="APPLICATION">%2$s</xliff:g>, która może monitorować Twoją aktywność w sieci związaną z pracą, w tym e-maile, aplikacje i strony internetowe.\n\nAby dowiedzieć się więcej, skontaktuj się z administratorem."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Twoim profilem do pracy zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Profil jest połączony z aplikacją <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, która może monitorować Twoją aktywność w sieci związaną z pracą, w tym e-maile, aplikacje i strony internetowe.\n\nMasz też połączenie z aplikacją <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, która może monitorować Twoją prywatną aktywność w sieci."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Twoim urządzeniem zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator może monitorować ustawienia, firmowe uprawnienia dostępu, aplikacje, dane powiązane z urządzeniem i informacje o jego lokalizacji oraz nimi zarządzać.\n\nMasz połączenie z aplikacją <xliff:g id="APPLICATION">%2$s</xliff:g>, która może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe.\n\nAby dowiedzieć się więcej, skontaktuj się z administratorem."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Urządzenie pozostanie zablokowane, aż odblokujesz je ręcznie"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Szybszy dostęp do powiadomień"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Zobacz powiadomienia, jeszcze zanim odblokujesz ekran"</string>
@@ -434,31 +444,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Rozwiń"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Zwiń"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Ekran jest przypięty"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Ekran będzie widoczny, dopóki go nie odepniesz. Aby to zrobić, kliknij i przytrzymaj Wstecz."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"OK"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Nie, dziękuję"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Ukryć <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Pojawi się ponownie, gdy następnym włączysz go w ustawieniach."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ukryj"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> chce sterować głośnością."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Zezwól"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Odmów"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> steruje głośnością"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Kliknij, by przywrócić ustawienie początkowe."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Używasz profilu do pracy"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Połączenie"</item>
- <item msgid="5997713001067658559">"System"</item>
- <item msgid="7858983209929864160">"Dzwonek"</item>
- <item msgid="1850038478268896762">"Multimedia"</item>
- <item msgid="8265110906352372092">"Alarm"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Ułatwienia dostępu"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Połączenie"</string>
+ <string name="stream_system" msgid="7493299064422163147">"System"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Dzwonek"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Multimedia"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarm"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Powiadomienie"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"DTMF"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Ułatwienia dostępu"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Kliknij, by wyłączyć wyciszenie."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Kliknij, by włączyć wibracje. Ułatwienia dostępu mogą być wyciszone."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Kliknij, by wyciszyć. Ułatwienia dostępu mogą być wyciszone."</string>
@@ -470,7 +474,7 @@
<string name="quick_settings" msgid="10042998191725428">"Szybkie ustawienia"</string>
<string name="status_bar" msgid="4877645476959324760">"Pasek stanu"</string>
<string name="overview" msgid="4018602013895926956">"Przegląd"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Tryb demonstracyjny"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Tryb demonstracyjny interfejsu"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Włącz tryb demonstracyjny"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Pokaż tryb demonstracyjny"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -510,20 +514,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Wł."</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Wył."</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Dzięki zaawansowanym ustawieniom możesz określić poziom ważności powiadomień z aplikacji w skali od 0 do 5. \n\n"<b>"Poziom 5"</b>" \n– Pokazuj u góry listy powiadomień \n– Zezwalaj na powiadomienia na pełnym ekranie \n– Zawsze pokazuj podgląd \n\n"<b>"Poziom 4"</b>" \n– Wyłącz powiadomienia na pełnym ekranie \n– Zawsze pokazuj podgląd \n\n"<b>"Poziom 3"</b>" \n– Wyłącz powiadomienia na pełnym ekranie \n– Nigdy nie pokazuj podglądu \n\n"<b>"Poziom 2"</b>" \n– Wyłącz powiadomienia na pełnym ekranie \n– Nigdy nie pokazuj podglądu \n– NIgdy nie powiadamiaj dźwiękiem ani wibracjami \n\n"<b>"Poziom 1"</b>" \n– Wyłącz powiadomienia na pełnym ekranie \n– Nigdy nie pokazuj podglądu \n– NIgdy nie powiadamiaj dźwiękiem ani wibracjami \n– Ukrywaj na ekranie blokady i pasku stanu \n– Pokazuj u dołu listy powiadomień \n\n"<b>"Poziom 0"</b>" \n– Blokuj wszystkie powiadomienia aplikacji"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Ważność: automatycznie"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Ważność: poziom 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Ważność: poziom 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Ważność: poziom 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Ważność: poziom 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Ważność: poziom 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Ważność: poziom 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Aplikacja określa ważność każdego powiadomienia."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Nigdy nie pokazuj powiadomień z tej aplikacji."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Nie pokazuj powiadomień na pełnym ekranie (ani ich podglądu) i nie sygnalizuj ich dźwiękiem ani wibracjami. Ukrywaj je na ekranie blokady i pasku stanu."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Nie pokazuj powiadomień na pełnym ekranie (ani ich podglądu) i nie sygnalizuj ich dźwiękiem ani wibracjami."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Nie pokazuj powiadomień na pełnym ekranie ani ich podglądu."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Zawsze wyświetlaj podgląd. Nie pokazuj powiadomień na pełnym ekranie."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Zawsze pokazuj podgląd powiadomień i wyświetlaj je na pełnym ekranie."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Więcej ustawień"</string>
<string name="notification_done" msgid="5279426047273930175">"Gotowe"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> – ustawienia powiadomień"</string>
@@ -656,4 +668,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Edytuj kolejność ustawień."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Strona <xliff:g id="ID_1">%1$d</xliff:g> z <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Rozwiń"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimalizuj"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Zamknij"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Telefon się nagrzewa"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Podczas obniżania temperatury telefonu niektóre funkcje są ograniczone"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Telefon automatycznie podejmie próbę obniżenia temperatury. Możesz go wciąż używać, ale telefon może działać wolniej.\n\nGdy temperatura się obniży, telefon będzie działał normalnie."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index ab107e8..70618c9 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -165,6 +165,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Configurações do sistema"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Notificações."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Contêiner flutuante de notificações"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Limpar notificação."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ativado."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Aquisição de GPS."</string>
@@ -186,6 +187,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Tela de bloqueio."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Configurações"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Visão geral."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Fechar"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"O Wi-Fi foi desativado."</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Limpar tudo"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Iniciar agora"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Sem notificações"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"O dispositivo pode ser monitorado"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"O perfil pode ser monitorado"</string>
<string name="vpn_footer" msgid="2388611096129106812">"A rede pode ser monitorada"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"A rede pode ser monitorada"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Monitoramento de dispositivos"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitoramento de perfis"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitoramento de rede"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Registro de rede"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Desativar VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Seu dispositivo é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSeu administrador pode monitorar e gerenciar configurações, acesso corporativo, apps, dados associados ao dispositivo e informações sobre a localização do dispositivo. Para mais informações, entre em contato com o administrador."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Seu dispositivo é gerenciado por <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> usa <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> para gerenciar seu dispositivo."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"O admin. pode monitorar e gerenciar config., acesso corporativo, apps, dados associados ao dispos. e as info. de local do dispos."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saber mais"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Você está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorar sua atividade na rede, incluindo e-mails, apps e websites."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir configurações de VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Seu administrador ativou o registro de rede, que monitora o tráfego no seu dispositivo.\n\nPara ver mais informações, entre em contato com o administrador."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Você deu permissão para um app configurar uma conexão VPN.\n\nEsse app pode monitorar seu dispositivo e a atividade na rede, incluindo e-mails, apps e websites."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Seu dispositivo é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSeu administrador pode monitorar e gerenciar configurações, acesso corporativo, apps, dados associados ao seu dispositivo e informações sobre localização do dispositivo.\n\nVocê está conectado a uma VPN, a qual pode monitorar suas atividades de rede, incluindo e-mails, apps e websites.\n\nPara mais informações, entre em contato com seu administrador."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSeu administrador pode monitorar suas atividades de rede, incluindo e-mails, apps e websites.\n\nPara mais informações, entre em contato com seu administrador.\n\nVocê também está conectado a uma VPN, a qual pode monitorar suas atividades de rede."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Você está conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorar sua atividade na rede, incluindo e-mails, apps e websites."</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Você está conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorar sua atividade pessoal na rede, incluindo e-mails, apps e websites."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ele está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorar sua atividade profissional na rede, incluindo e-mails, apps e websites.\n\nPara ver mais informações, entre em contato com seu administrador."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ele está conectado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pode monitorar sua atividade profissional na rede, incluindo e-mails, apps e websites.\n\nVocê também está conectado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pode monitorar sua atividade pessoal na rede."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Seu dispositivo é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSeu administrador pode monitorar e gerenciar configurações, acesso corporativo, apps, dados associados ao seu dispositivo e informações sobre localização do dispositivo.\n\nVocê está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorar suas atividades de rede, incluindo e-mails, apps e websites.\n\nPara ver mais informações, entre em contato com seu administrador."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"O dispositivo permanecerá bloqueado até que você o desbloqueie manualmente"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Receba notificações mais rápido"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Veja-as antes de desbloquear"</string>
@@ -432,31 +442,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Expandir"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Recolher"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"A tela está fixada"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Ela é mantida à vista até que seja liberada. Toque em \"Voltar\" e mantenha essa opção pressionada para liberar."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Entendi"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Não, obrigado"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Esconder <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ela reaparecerá na próxima vez que você ativá-la nas configurações."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ocultar"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> deseja ser a caixa de diálogo referente ao volume."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Permitir"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Negar"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> é a caixa de diálogo referente ao volume"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Toque para restaurar o original."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Você está usando seu perfil de trabalho"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Chamar"</item>
- <item msgid="5997713001067658559">"Sistema"</item>
- <item msgid="7858983209929864160">"Tocar"</item>
- <item msgid="1850038478268896762">"Mídia"</item>
- <item msgid="8265110906352372092">"Alarme"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Acessibilidade"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Ligar"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistema"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Tocar"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Mídia"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarme"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Notificação"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Multifrequência de dois tons"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Acessibilidade"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Toque para ativar o som."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Toque para configurar para vibrar. É possível que os serviços de acessibilidade sejam silenciados."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Toque para silenciar. É possível que os serviços de acessibilidade sejam silenciados."</string>
@@ -468,7 +472,7 @@
<string name="quick_settings" msgid="10042998191725428">"Configurações rápidas"</string>
<string name="status_bar" msgid="4877645476959324760">"Barra de status"</string>
<string name="overview" msgid="4018602013895926956">"Visão geral"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Modo de demonstração"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Modo de demonstração da IU do sistema"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Ativar modo de demonstração"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Mostrar modo de demonstração"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -508,20 +512,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Ativado"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Desativado"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Com controles de ativação de notificações, é possível definir o nível de importância de 0 a 5 para as notificações de um app. \n\n"<b>"Nível 5"</b>" \n- Exibir na parte superior da lista de notificações \n- Permitir interrupção em tela cheia \n- Sempre exibir \n\n"<b>"Nível 4"</b>" \n- Impedir interrupções em tela cheia \n- Sempre exibir \n\n"<b>"Nível 3"</b>" \n- Impedir interrupções em tela cheia \n- Nunca exibir \n\n"<b>"Nível 2"</b>" \n- Impedir interrupções em tela cheia \n- Nunca exibir \n- Nunca emitir som ou vibrar \n\n"<b>"Nível 1"</b>" \n- Impedir interrupções em tela cheia \n- Nunca exibir \n- Nunca emitir som ou vibrar \n- Ocultar da tela de bloqueio e barra de status \n- Exibir na parte inferior da lista de notificações \n\n"<b>"Nível 0"</b>" \n- Bloquear todas as notificações do app"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Importância: automática"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Importância: nível 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Importância: nível 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Importância: nível 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Importância: nível 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Importância: nível 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Importância: nível 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"O app determina a importância de cada notificação."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Nunca mostrar notificações deste app."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Sem interrupção, exibição, som ou vibração em tela cheia. Ocultar da tela de bloqueio e barra de status."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Nenhuma interrupção, exibição, som ou vibração em tela cheia."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Nenhuma exibição ou interrupção em tela cheia."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Sempre exibir. Nenhuma interrupção em tela cheia."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Sempre exibir e permitir interrupções em tela cheia."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Mais configurações"</string>
<string name="notification_done" msgid="5279426047273930175">"Concluído"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Controles de notificação do <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -654,4 +666,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Editar ordem das configurações."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Página <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Expandir"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizar"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Dispensar"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"O smartphone está esquentando"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Alguns recursos ficam limitados enquanto o smartphone é resfriado"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Seu smartphone tentará se resfriar automaticamente. Você ainda poderá usá-lo, mas talvez ele fique mais lento.\n\nQuando o smartphone estiver resfriado, ele voltará ao normal."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index ac34f24..7102c64 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"A bateria está a carregar, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> por cento."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Definições do sistema"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Notificações."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Contentor de excesso de notificações"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Limpar notificações"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ativado."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Adquirir GPS."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Ecrã de bloqueio."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Definições"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Visão geral."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Fechar"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi desligado."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Limpar tudo"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Começar agora"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Sem notificações"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"O dispositivo pode ser monitorizado"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"O perfil pode ser monitorizado"</string>
<string name="vpn_footer" msgid="2388611096129106812">"A rede pode ser monitorizada"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"A rede pode ser monitorizada"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Monitorização de dispositivos"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitorização de perfis"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitorização da rede"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Registos de rede"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Desativar a VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Desligar VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"O seu dispositivo é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO seu administrador pode monitorizar e gerir as definições, o acesso empresarial, as aplicações, os dados associados ao dispositivo e as informações de localização do dispositivo. Para obter mais informações, contacte o administrador."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"O seu dispositivo é gerido pelo <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"A <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> utiliza o <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> para gerir o seu dispositivo."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"O administ. pode monitorizar e gerir definições, acesso empresarial, aplic. e dados associados ao dispositivo, bem como inf. de localiz. do disp."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saiba mais"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Websites."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir as definições de VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"O seu administrador ativou os registos de rede, que monitorizam o tráfego no seu dispositivo.\n\nPara mais informações, contacte o administrador."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Concedeu autorização a uma aplicação para configurar uma ligação VPN.\n\nEsta aplicação pode monitorizar a atividade do dispositivo e da rede, incluindo emails, aplicações e Websites."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"O seu dispositivo é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO seu administrador pode monitorizar e gerir as definições, o acesso empresarial, as aplicações, os dados associados ao dispositivo e as informações de localização do dispositivo.\n\nEncontra-se ligado a uma VPN, que pode monitorizar a atividade da rede, incluindo emails, aplicações e Websites.\n\nPara obter mais informações, contacte o administrador."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"O seu perfil de trabalho é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO seu administrador pode monitorizar a atividade da rede, incluindo emails, aplicações e Websites.\n\nPara obter mais informações, contacte o administrador.\n\nAlém disso, está ligado a uma VPN, que pode monitorizar a atividade da rede."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Está ligado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a atividade da rede, incluindo emails, aplicações e Websites."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Está ligado ao <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a atividade da rede pessoal, incluindo emails, aplicações e Websites."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"O seu perfil de trabalho é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Está ligado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorizar a atividade da rede de trabalho, incluindo emails, aplicações e Websites.\n\nPara obter mais informações, contacte o administrador."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"O seu perfil de trabalho é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Está ligado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pode monitorizar a atividade da rede de trabalho, incluindo emails, aplicações e Websites.\n\nTambém está ligado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pode monitorizar a atividade da rede pessoal."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"O seu dispositivo é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO seu administrador pode monitorizar e gerir as definições, o acesso empresarial, as aplicações, os dados associados ao dispositivo e as informações de localização do dispositivo.\n\nEstá ligado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorizar a atividade da rede, incluindo emails, aplicações e Websites.\n\nPara obter mais informações, contacte o administrador."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"O dispositivo permanecerá bloqueado até ser desbloqueado manualmente"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Receber notificações mais rapidamente"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Ver antes de desbloquear"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Expandir"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Reduzir"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"O ecrã está fixado"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Esta opção mantém o item visível até o soltar. Toque sem soltar em Anterior para soltar."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Compreendi"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Não, obrigado"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Pretende ocultar <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Reaparecerá da próxima vez que a funcionalidade for ativada nas definições."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ocultar"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> pretende ser a caixa de diálogo do volume."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Permitir"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Recusar"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> é a caixa de diálogo do volume"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Toque para restaurar o original."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Está a utilizar o seu perfil de trabalho"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Telefonar"</item>
- <item msgid="5997713001067658559">"Sistema"</item>
- <item msgid="7858983209929864160">"Tocar"</item>
- <item msgid="1850038478268896762">"Multimédia"</item>
- <item msgid="8265110906352372092">"Alarme"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Acessibilidade"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Chamada"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistema"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Toque"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Suporte de dados"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarme"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Notificação"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Multifrequência de duas tonalidades"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Acessibilidade"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Toque para reativar o som."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Toque para ativar a vibração. Os serviços de acessibilidade podem ser silenciados."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Toque para desativar o som. Os serviços de acessibilidade podem ser silenciados."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Definições rápidas"</string>
<string name="status_bar" msgid="4877645476959324760">"Barra de estado"</string>
<string name="overview" msgid="4018602013895926956">"Vista geral"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Modo de demonstração"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Modo de demonstração da IU do sistema"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Ativar o modo de demonstração"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Mostrar modo de demonstração"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Ativado"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Desativado"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Com os controlos de notificações do consumo de energia, pode definir um nível de importância de 0 a 5 para as notificações de aplicações. \n\n"<b>"Nível 5"</b>" \n- Mostrar no início da lista de notificações \n- Permitir a interrupção do ecrã inteiro \n- Aparecer rapidamente sempre \n\n"<b>"Nível 4"</b>" \n- Impedir a interrupção do ecrã inteiro \n- Aparecer rapidamente sempre\n\n"<b>"Nível 3"</b>" \n- Impedir a interrupção do ecrã inteiro \n- Nunca aparecer rapidamente \n\n"<b>"Nível 2"</b>" \n- Impedir a interrupção do ecrã inteiro \n- Nunca aparecer rapidamente \n- Nunca tocar nem vibrar \n\n"<b>"Nível 1"</b>" \n- Impedir a interrupção do ecrã inteiro \n- Nunca aparecer rapidamente \n- Nunca tocar nem vibrar \n- Ocultar do ecrã de bloqueio e da barra de estado \n- Mostrar no fim da lista de notificações \n\n"<b>"Nível 0"</b>" \n- Bloquear todas as notificações da aplicação"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Importância: automático"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Importância: nível 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Importância: nível 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Importância: nível 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Importância: nível 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Importância: nível 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Importância: nível 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"A aplicação determina a importância de cada notificação."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Nunca mostrar notificações desta aplicação."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"S/ interrup. do ecrã int., apresent. ráp., som ou vibr. Ocultar do ecrã bloq. e da barra de estado."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Sem interrupção do ecrã inteiro, apresentação rápida, som ou vibração."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Sem interrupção do ecrã inteiro nem apresentação rápida."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Aparecer rapidamente sempre. Sem interrupção do ecrã inteiro."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Aparecer rapidamente sempre e permitir a interrupção do ecrã inteiro."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Mais definições"</string>
<string name="notification_done" msgid="5279426047273930175">"Concluído"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Controlos de notificações do <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Editar a ordem das definições."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Página <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Expandir"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizar"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Ignorar"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"O telemóvel está a aquecer"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Algumas funcionalidades são limitadas enquanto o telemóvel arrefece"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"O telemóvel tenta arrefecer automaticamente. Pode continuar a utilizá-lo, mas este poderá funcionar mais lentamente.\n\nAssim que o telemóvel tiver arrefecido, funcionará normalmente."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index ab107e8..70618c9 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -165,6 +165,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Configurações do sistema"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Notificações."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Contêiner flutuante de notificações"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Limpar notificação."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ativado."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Aquisição de GPS."</string>
@@ -186,6 +187,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Tela de bloqueio."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Configurações"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Visão geral."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Fechar"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"O Wi-Fi foi desativado."</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Limpar tudo"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Iniciar agora"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Sem notificações"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"O dispositivo pode ser monitorado"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"O perfil pode ser monitorado"</string>
<string name="vpn_footer" msgid="2388611096129106812">"A rede pode ser monitorada"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"A rede pode ser monitorada"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Monitoramento de dispositivos"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitoramento de perfis"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitoramento de rede"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Registro de rede"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Desativar VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Seu dispositivo é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSeu administrador pode monitorar e gerenciar configurações, acesso corporativo, apps, dados associados ao dispositivo e informações sobre a localização do dispositivo. Para mais informações, entre em contato com o administrador."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Seu dispositivo é gerenciado por <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> usa <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> para gerenciar seu dispositivo."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"O admin. pode monitorar e gerenciar config., acesso corporativo, apps, dados associados ao dispos. e as info. de local do dispos."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saber mais"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Você está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorar sua atividade na rede, incluindo e-mails, apps e websites."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir configurações de VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Seu administrador ativou o registro de rede, que monitora o tráfego no seu dispositivo.\n\nPara ver mais informações, entre em contato com o administrador."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Você deu permissão para um app configurar uma conexão VPN.\n\nEsse app pode monitorar seu dispositivo e a atividade na rede, incluindo e-mails, apps e websites."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Seu dispositivo é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSeu administrador pode monitorar e gerenciar configurações, acesso corporativo, apps, dados associados ao seu dispositivo e informações sobre localização do dispositivo.\n\nVocê está conectado a uma VPN, a qual pode monitorar suas atividades de rede, incluindo e-mails, apps e websites.\n\nPara mais informações, entre em contato com seu administrador."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSeu administrador pode monitorar suas atividades de rede, incluindo e-mails, apps e websites.\n\nPara mais informações, entre em contato com seu administrador.\n\nVocê também está conectado a uma VPN, a qual pode monitorar suas atividades de rede."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Você está conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorar sua atividade na rede, incluindo e-mails, apps e websites."</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Você está conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorar sua atividade pessoal na rede, incluindo e-mails, apps e websites."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ele está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorar sua atividade profissional na rede, incluindo e-mails, apps e websites.\n\nPara ver mais informações, entre em contato com seu administrador."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ele está conectado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pode monitorar sua atividade profissional na rede, incluindo e-mails, apps e websites.\n\nVocê também está conectado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pode monitorar sua atividade pessoal na rede."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Seu dispositivo é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSeu administrador pode monitorar e gerenciar configurações, acesso corporativo, apps, dados associados ao seu dispositivo e informações sobre localização do dispositivo.\n\nVocê está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorar suas atividades de rede, incluindo e-mails, apps e websites.\n\nPara ver mais informações, entre em contato com seu administrador."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"O dispositivo permanecerá bloqueado até que você o desbloqueie manualmente"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Receba notificações mais rápido"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Veja-as antes de desbloquear"</string>
@@ -432,31 +442,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Expandir"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Recolher"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"A tela está fixada"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Ela é mantida à vista até que seja liberada. Toque em \"Voltar\" e mantenha essa opção pressionada para liberar."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Entendi"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Não, obrigado"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Esconder <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ela reaparecerá na próxima vez que você ativá-la nas configurações."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ocultar"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> deseja ser a caixa de diálogo referente ao volume."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Permitir"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Negar"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> é a caixa de diálogo referente ao volume"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Toque para restaurar o original."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Você está usando seu perfil de trabalho"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Chamar"</item>
- <item msgid="5997713001067658559">"Sistema"</item>
- <item msgid="7858983209929864160">"Tocar"</item>
- <item msgid="1850038478268896762">"Mídia"</item>
- <item msgid="8265110906352372092">"Alarme"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Acessibilidade"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Ligar"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistema"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Tocar"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Mídia"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarme"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Notificação"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Multifrequência de dois tons"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Acessibilidade"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Toque para ativar o som."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Toque para configurar para vibrar. É possível que os serviços de acessibilidade sejam silenciados."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Toque para silenciar. É possível que os serviços de acessibilidade sejam silenciados."</string>
@@ -468,7 +472,7 @@
<string name="quick_settings" msgid="10042998191725428">"Configurações rápidas"</string>
<string name="status_bar" msgid="4877645476959324760">"Barra de status"</string>
<string name="overview" msgid="4018602013895926956">"Visão geral"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Modo de demonstração"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Modo de demonstração da IU do sistema"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Ativar modo de demonstração"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Mostrar modo de demonstração"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -508,20 +512,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Ativado"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Desativado"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Com controles de ativação de notificações, é possível definir o nível de importância de 0 a 5 para as notificações de um app. \n\n"<b>"Nível 5"</b>" \n- Exibir na parte superior da lista de notificações \n- Permitir interrupção em tela cheia \n- Sempre exibir \n\n"<b>"Nível 4"</b>" \n- Impedir interrupções em tela cheia \n- Sempre exibir \n\n"<b>"Nível 3"</b>" \n- Impedir interrupções em tela cheia \n- Nunca exibir \n\n"<b>"Nível 2"</b>" \n- Impedir interrupções em tela cheia \n- Nunca exibir \n- Nunca emitir som ou vibrar \n\n"<b>"Nível 1"</b>" \n- Impedir interrupções em tela cheia \n- Nunca exibir \n- Nunca emitir som ou vibrar \n- Ocultar da tela de bloqueio e barra de status \n- Exibir na parte inferior da lista de notificações \n\n"<b>"Nível 0"</b>" \n- Bloquear todas as notificações do app"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Importância: automática"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Importância: nível 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Importância: nível 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Importância: nível 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Importância: nível 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Importância: nível 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Importância: nível 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"O app determina a importância de cada notificação."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Nunca mostrar notificações deste app."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Sem interrupção, exibição, som ou vibração em tela cheia. Ocultar da tela de bloqueio e barra de status."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Nenhuma interrupção, exibição, som ou vibração em tela cheia."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Nenhuma exibição ou interrupção em tela cheia."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Sempre exibir. Nenhuma interrupção em tela cheia."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Sempre exibir e permitir interrupções em tela cheia."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Mais configurações"</string>
<string name="notification_done" msgid="5279426047273930175">"Concluído"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Controles de notificação do <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -654,4 +666,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Editar ordem das configurações."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Página <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Expandir"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizar"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Dispensar"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"O smartphone está esquentando"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Alguns recursos ficam limitados enquanto o smartphone é resfriado"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Seu smartphone tentará se resfriar automaticamente. Você ainda poderá usá-lo, mas talvez ele fique mais lento.\n\nQuando o smartphone estiver resfriado, ele voltará ao normal."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index d18629f..2544849 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -166,6 +166,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Setări de sistem."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Notificări."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Container pentru surplusul de notificări"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Ștergeți notificarea."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS activat."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Se obține GPS."</string>
@@ -187,6 +188,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Ecranul de blocare."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Setări"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Vizualizare generală"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Închideți"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Conexiunea prin Wi-Fi este dezactivată."</string>
@@ -404,18 +407,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Ștergeți toate notificările"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Începeți acum"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Nicio notificare"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Dispozitivul poate fi monitorizat"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profilul poate fi monitorizat"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Rețeaua poate fi monitorizată"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Este posibil ca rețeaua să fie monitorizată"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Monitorizarea dispozitivului"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitorizarea profilului"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitorizarea rețelei"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Înregistrarea în jurnal pentru rețea"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Dezactivați conexiunea prin VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Deconectați rețeaua VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Dispozitivul este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratorul poate monitoriza și gestiona setările, accesul la rețeaua companiei, aplicațiile, datele asociate cu dispozitivul și informațiile privind locația dispozitivului. Pentru mai multe informații, contactați administratorul."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Dispozitivul dvs. este gestionat de <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> folosește <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> pentru a vă gestiona dispozitivul."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administratorul dvs. poate monitoriza și gestiona setările, accesul la nivelul companiei, aplicațiile, datele asociate cu dispozitivul dvs. și informațiile despre locația dispozitivului."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Aflați mai multe"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"V-ați conectat la aplicația <xliff:g id="VPN_APP">%1$s</xliff:g>, care vă poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile accesate."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Deschideți Setări VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administratorul dvs. a activat înregistrarea în jurnal pentru rețea, funcție ce monitorizează traficul de pe dispozitivul dvs.\n\nPentru mai multe informații, contactați administratorul."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Ați acordat unei aplicații permisiunea de a configura o conexiune VPN.\n\nAceastă aplicație poate monitoriza activitatea de pe dispozitiv și în rețea, inclusiv e-mailurile, aplicațiile și site-urile."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Dispozitivul este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratorul poate monitoriza și gestiona setările, accesul la rețeaua companiei, aplicațiile, datele asociate cu dispozitivul și informațiile privind locația dispozitivului.\n\nSunteți conectat(ă) la o rețea VPN, care vă poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile.\n\nPentru mai multe informații, contactați administratorul."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Profilul de serviciu este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratorul poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile.\n\nPentru mai multe informații, contactați administratorul.\n\nDe asemenea, sunteți conectat(ă) la o rețea VPN, care vă poate monitoriza activitatea în rețea."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Sunteți conectat(ă) la <xliff:g id="APPLICATION">%1$s</xliff:g>, care vă poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile."</string>
@@ -423,7 +434,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"V-ați conectat la aplicația <xliff:g id="APPLICATION">%1$s</xliff:g>, care vă poate monitoriza activitatea personală în rețea, inclusiv e-mailurile, aplicațiile și site-urile accesate."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Profilul de serviciu este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Este conectat la <xliff:g id="APPLICATION">%2$s</xliff:g>, care vă poate monitoriza activitatea în rețeaua de serviciu, inclusiv e-mailurile, aplicațiile și site-urile.\n\nPentru mai multe informații, contactați administratorul."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Profilul de serviciu este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Este conectat la <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, care vă poate monitoriza activitatea în rețeaua de serviciu, inclusiv e-mailurile, aplicațiile și site-urile.\n\nDe asemenea, sunteți conectat(ă) la <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, care vă poate monitoriza activitatea în rețeaua personală."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Dispozitivul este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratorul poate monitoriza și gestiona setările, accesul la rețeaua companiei, aplicațiile, datele asociate cu dispozitivul și informațiile privind locația dispozitivului.\n\nSunteți conectat(ă) la <xliff:g id="APPLICATION">%2$s</xliff:g>, care vă poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile.\n\nPentru mai multe informații, contactați administratorul."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Dispozitivul va rămâne blocat până când îl deblocați manual"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Obțineți notificări mai rapid"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Doresc să se afișeze înainte de deblocare"</string>
@@ -434,31 +444,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Extindeți"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Restrângeți"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Ecranul este fixat"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Ecranul este afișat până anulați fixarea. Atingeți lung opțiunea Înapoi pentru a anula fixarea."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Am înțeles"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Nu, mulțumesc"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Ascundeți <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Va reapărea la următoarea activare în setări."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ascundeți"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> dorește să afișeze caseta de dialog pentru volum."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Permiteți"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Refuzați"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> afișează caseta de dialog pentru volum"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Atingeți pentru a restabili versiunea originală."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Acum folosiți profilul de serviciu"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Apel"</item>
- <item msgid="5997713001067658559">"Sistem"</item>
- <item msgid="7858983209929864160">"Sonerie"</item>
- <item msgid="1850038478268896762">"Conținut media"</item>
- <item msgid="8265110906352372092">"Alarmă"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Accesibilitate"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Apel"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistem"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Sonerie"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Conținut media"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarmă"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Notificare"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Frecvență tonuri multiple duale"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Accesibilitate"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Atingeți pentru a activa sunetul."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Atingeți pentru a seta vibrarea. Sunetul se poate dezactiva pentru serviciile de accesibilitate."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Atingeți pentru a dezactiva sunetul. Sunetul se poate dezactiva pentru serviciile de accesibilitate."</string>
@@ -470,7 +474,7 @@
<string name="quick_settings" msgid="10042998191725428">"Setări rapide"</string>
<string name="status_bar" msgid="4877645476959324760">"Bară de stare"</string>
<string name="overview" msgid="4018602013895926956">"Recente"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Modul demonstrativ"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Mod demonstrativ pentru IU sistem"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Activați modul demonstrativ"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Afișați modul demonstrativ"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -510,20 +514,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Activate"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Dezactivate"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Folosind comenzile de gestionare a notificărilor, puteți să setați un nivel de importanță de la 0 la 5 pentru notificările unei aplicații. \n\n"<b>"Nivelul 5"</b>" \n– Se afișează la începutul listei de notificări \n– Se permite întreruperea pe ecranul complet \n– Se afișează întotdeauna scurt \n\n"<b>"Nivelul 4"</b>" \n– Se împiedică întreruperea pe ecranul complet \n– Se afișează întotdeauna scurt \n\n"<b>"Nivelul 3"</b>" \n– Se împiedică întreruperea pe ecranul complet \n– Nu se afișează niciodată scurt \n\n"<b>"Nivelul 2"</b>" \n– Se împiedică întreruperea pe ecranul complet \n– Nu se afișează niciodată scurt \n– Nu se emit sunete și nu vibrează niciodată \n\n"<b>"Nivelul 1"</b>" \n– Se împiedică întreruperea pe ecranul complet \n– Nu se afișează niciodată scurt \n– Nu se emit sunete și nu vibrează niciodată \n– Se ascunde în ecranul de blocare și în bara de stare \n– Se afișează la finalul listei de notificări \n\n"<b>"Nivelul 0"</b>" \n– Se blochează toate notificările din aplicație"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Importanță: automat"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Importanță: nivelul 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Importanță: nivelul 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Importanță: nivelul 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Importanță: nivelul 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Importanță: nivelul 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Importanță: nivelul 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Aplicația stabilește importanța fiecărei notificări."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Nu se afișează niciodată notificări de la această aplicație."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Fără întrerupere pe ecran complet/afișare scurtă/sunet/vibrare. Se ascunde în ecran blocare/bară stare."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Fără întrerupere pe ecranul complet, afișare scurtă, sunet sau vibrare."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Fără întrerupere pe ecranul complet și fără afișare scurtă."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Se afișează întotdeauna scurt. Fără întrerupere pe ecranul complet."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Se afișează întotdeauna scurt și se permite întreruperea pe ecranul complet."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Mai multe setări"</string>
<string name="notification_done" msgid="5279426047273930175">"Terminat"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Opțiuni privind notificările pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -656,4 +668,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Editați ordinea setărilor."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Pagina <xliff:g id="ID_1">%1$d</xliff:g> din <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Extindeți"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizați"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Respingeți"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Telefonul se încălzește"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Anumite funcții sunt limitate în timp ce telefonul se răcește"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Telefonul va încerca automat să se răcească. Puteți folosi telefonul în continuare, dar este posibil să funcționeze mai lent.\n\nDupă ce se răcește, telefonul va funcționa normal."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index bfd75e9..aa7695a 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -167,6 +167,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Настройки"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Уведомления"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Контейнер всплывающих уведомлений"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Удалить уведомление"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"Система GPS включена."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Установление связи с GPS."</string>
@@ -188,6 +189,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Заблокированный экран."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Настройки"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Обзор."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Закрыть"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Модуль Wi-Fi отключен."</string>
@@ -406,18 +409,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Очистить все"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Начать"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Нет уведомлений"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Устройство может контролироваться"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Действия в профиле могут отслеживаться"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Сеть может отслеживаться"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Сеть может отслеживаться"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Отслеживание устройств"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Мониторинг профиля"</string>
<string name="monitoring_title" msgid="169206259253048106">"Отслеживание сетей"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"Настройки VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Сетевой журнал"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Отключить VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Отключить VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Этим устройством управляет <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор может управлять настройками, корпоративным доступом, приложениями, данными на вашем устройстве, в том числе геоданными, а также просматривать соответствующие сведения. За дополнительной информацией обратитесь к администратору."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Этим устройством управляет приложение \"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>\""</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"Компания \"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>\" управляет устройством с помощью приложения \"<xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>\""</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Администратор контролирует настройки, приложения, доступ к ресурсам компании, связанные с устройством данные и передачу геоданных."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Подробнее…"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Запущено приложение \"<xliff:g id="VPN_APP">%1$s</xliff:g>\". Оно может отслеживать ваши действия в сети, включая работу с электронной почтой, приложениями и сайтами."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Открыть настройки VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Администратор включил ведение сетевого журнала, чтобы отслеживать трафик на вашем устройстве.\n\nДля получения подробной информации обращайтесь к администратору."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Вы разрешили приложению подключаться к сети VPN.\n\nОно может отслеживать ваши действия на устройстве и в Интернете, включая работу с электронной почтой, приложениями и веб-сайтами."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Этим устройством управляет <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор может управлять настройками, корпоративным доступом, приложениями, данными на вашем устройстве, в том числе геоданными, а также просматривать соответствующие сведения.\n\nВы подключены к сети VPN, поэтому возможно отслеживание ваших действий в Интернете, включая работу с электронной почтой, приложениями и защищенными веб-сайтами.\n\nЗа дополнительной информацией обратитесь к администратору."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Вашим корпоративным профилем управляет <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор может отслеживать ваши действия в Интернете, включая работу с электронной почтой, приложениями и веб-сайтами.\n\nЗа подробностями обратитесь к нему.\n\nУстройство также подключено к сети VPN, в которой возможно отслеживание ваших действий."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"Сеть VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Запущено приложение \"<xliff:g id="APPLICATION">%1$s</xliff:g>\", которое может отслеживать ваши действия в Интернете, включая работу с электронной почтой, приложениями и веб-сайтами."</string>
@@ -425,7 +436,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Запущено приложение \"<xliff:g id="APPLICATION">%1$s</xliff:g>\", которое может отслеживать ваши действия в сети, включая работу с электронной почтой, приложениями и веб-сайтами."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Вашим рабочим профилем управляет \"<xliff:g id="ORGANIZATION">%1$s</xliff:g>\". Приложение \"<xliff:g id="APPLICATION">%2$s</xliff:g>\" может отслеживать ваши действия в Интернете, включая работу с электронной почтой, приложениями и веб-сайтами.\n\nЗа дополнительной информацией обратитесь к своему администратору."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Вашим рабочим профилем управляет \"<xliff:g id="ORGANIZATION">%1$s</xliff:g>\". Приложение \"<xliff:g id="APPLICATION_WORK">%2$s</xliff:g>\" может отслеживать ваши действия в Интернете, включая работу с электронной почтой, приложениями и веб-сайтами.\n\nПриложение \"<xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>\" может отслеживать ваши действия в Интернете, выполняемые в личном профиле."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Вашим корпоративным профилем управляет <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор может управлять настройками, корпоративным доступом, приложениями, данными на вашем устройстве, в том числе геоданными, а также просматривать соответствующие сведения.\n\nПриложение <xliff:g id="APPLICATION">%2$s</xliff:g> также может отслеживать ваши действия в сети, включая работу с электронной почтой, приложениями и веб-сайтами.\n\nЗа подробностями обратитесь к своему администратору."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Устройство необходимо будет разблокировать вручную"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Быстрый доступ к уведомлениям"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Просматривайте уведомления на заблокированном экране."</string>
@@ -436,31 +446,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Развернуть"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Свернуть"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Блокировка в приложении включена"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Приложение останется активным, пока вы не отмените блокировку, нажав и удерживая кнопку \"Назад\"."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"ОК"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Нет, спасибо"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Скрыть параметр \"<xliff:g id="TILE_LABEL">%1$s</xliff:g>\"?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Этот параметр появится в следующий раз, когда вы включите его."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Скрыть"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"Назначить приложение <xliff:g id="APP_NAME">%1$s</xliff:g> регулятором громкости?"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Да"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Нет"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"Приложение <xliff:g id="APP_NAME">%1$s</xliff:g> назначено регулятором громкости"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Нажмите, чтобы восстановить оригинал"</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Вы перешли в рабочий профиль"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Вызов"</item>
- <item msgid="5997713001067658559">"Система"</item>
- <item msgid="7858983209929864160">"Рингтон"</item>
- <item msgid="1850038478268896762">"Мультимедиа"</item>
- <item msgid="8265110906352372092">"Будильник"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Специальные возможности"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Вызов"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Система"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Звонок"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Мультимедиа"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Будильник"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Уведомления"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Тональный набор"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Специальные возможности"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Нажмите, чтобы включить звук."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Нажмите, чтобы включить вибрацию. Специальные возможности могут прекратить работу."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Нажмите, чтобы выключить звук. Специальные возможности могут прекратить работу."</string>
@@ -472,7 +476,7 @@
<string name="quick_settings" msgid="10042998191725428">"Быстрые настройки"</string>
<string name="status_bar" msgid="4877645476959324760">"Строка состояния"</string>
<string name="overview" msgid="4018602013895926956">"Обзор"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Демонстрация"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Интерфейс системы: деморежим"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Включить демонстрационный режим"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Перейти в демонстрационный режим"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -512,20 +516,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Включено"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Отключено"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"С помощью этой функции вы можете устанавливать уровень важности уведомлений от 0 до 5 для каждого приложения.\n\n"<b>"Уровень 5"</b>\n"‒ Помещать уведомления в начало списка.\n‒ Показывать полноэкранные уведомления.\n‒ Показывать всплывающие уведомления.\nУровень 4\n"<b></b>\n"‒ Не показывать полноэкранные уведомления.\n‒ Показывать всплывающие уведомления.\nУровень 3\n"<b></b>\n"‒ Не показывать полноэкранные уведомления.\n‒ Не показывать всплывающие уведомления.\nУровень 2\n"<b></b>\n"‒ Не показывать полноэкранные уведомления.\n‒ Не показывать всплывающие уведомления.\n‒ Не использовать звук и вибрацию.\nУровень 1\n"<b></b>\n"‒ Не показывать полноэкранные уведомления.\n‒ Не показывать всплывающие уведомления.\n‒ Не использовать звук и вибрацию.\n‒ Не показывать на экране блокировки и в строке состояния.\n‒ Помещать уведомления в конец списка.\nУровень 0\n"<b></b>\n"‒ Блокировать все уведомления приложения."</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Важность: автоматически"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Важность: уровень 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Важность: уровень 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Важность: уровень 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Важность: уровень 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Важность: уровень 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Важность: уровень 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Приложение само устанавливает уровень важности уведомлений."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Не показывать уведомления этого приложения."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Не показывать уведомления. Не использовать звук и вибрацию. Не показывать на экране блокировки и в строке состояния."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Не показывать всплывающие и полноэкранные уведомления. Не использовать звук и вибрацию."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Не показывать всплывающие и полноэкранные уведомления."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Показывать всплывающие, но не полноэкранные уведомления."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Показывать всплывающие и полноэкранные уведомления."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Другие настройки"</string>
<string name="notification_done" msgid="5279426047273930175">"Готово"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Управление уведомлениями (<xliff:g id="APP_NAME">%1$s</xliff:g>)"</string>
@@ -658,4 +670,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Изменить порядок быстрых настроек."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Страница <xliff:g id="ID_1">%1$d</xliff:g> из <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Развернуть"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Свернуть"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Закрыть"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Телефон нагревается"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Пока телефон не остынет, некоторые функции могут быть недоступны."</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Ваш телефон остынет автоматически.\n\nОбратите внимание, что до тех пор он может работать медленнее, чем обычно."</string>
</resources>
diff --git a/packages/SystemUI/res/values-si-rLK-land/strings.xml b/packages/SystemUI/res/values-si-rLK-land/strings.xml
deleted file mode 100644
index b5aba2a..0000000
--- a/packages/SystemUI/res/values-si-rLK-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"තිරය දැන් තිරස් දිශානතිය අගුළු දමා ඇත."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-si-rLK/config.xml b/packages/SystemUI/res/values-si/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-si-rLK/config.xml
rename to packages/SystemUI/res/values-si/config.xml
diff --git a/packages/SystemUI/res/values-si-rLK/strings.xml b/packages/SystemUI/res/values-si/strings.xml
similarity index 92%
rename from packages/SystemUI/res/values-si-rLK/strings.xml
rename to packages/SystemUI/res/values-si/strings.xml
index d31d17b..4b540b9 100644
--- a/packages/SystemUI/res/values-si-rLK/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"බැටරිය ආරෝපණය කරමින්, සියයට <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g>."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"පද්ධති සැකසීම්."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"දැනුම්දීම්."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"දැනුම් දීම් පිටාර බඳුන"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"දැනුම්දීම හිස් කරන්න."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS සබල කර ඇත."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS ලබා ගනිමින්."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"අගුළු තිරය."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"සැකසීම්"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"දළ විශ්ලේෂණය."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"වසන්න"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi අක්රියයි."</string>
@@ -387,7 +390,7 @@
<string name="user_logout_notification_title" msgid="1453960926437240727">"පරිශීලකයා වරන්න"</string>
<string name="user_logout_notification_text" msgid="3350262809611876284">"වත්මන් පරිශීලක වරන්න"</string>
<string name="user_logout_notification_action" msgid="1195428991423425062">"පරිශීලකයා වරන්න"</string>
- <string name="user_add_user_title" msgid="4553596395824132638">"අලුත් පරිශීලකයෙක් එකතු කරන්නද?"</string>
+ <string name="user_add_user_title" msgid="4553596395824132638">"අලුත් පරිශීලකයෙක් එක් කරන්නද?"</string>
<string name="user_add_user_message_short" msgid="2161624834066214559">"ඔබ අලුත් පරිශීලකයෙක් එකතු කරන විට, එම පුද්ගලයා ඔහුගේ වැඩ කරන ඉඩ සකසා ගත යුතුය.\n\nසියළුම අනෙක් පරිශීලකයින් සඳහා ඕනෑම පරිශීලකයෙකුට යාවත්කාලීන කළ හැක."</string>
<string name="user_remove_user_title" msgid="4681256956076895559">"පරිශීලකයා ඉවත් කරන්නද?"</string>
<string name="user_remove_user_message" msgid="1453218013959498039">"මෙම පරිශීලකයාගේ සියලු යෙදුම් සහ දත්ත මකනු ඇත."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"සියල්ල හිස් කරන්න"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"දැන් අරඹන්න"</string>
<string name="empty_shade_text" msgid="708135716272867002">"දැනුම්දීම් නැත"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"ඇතැම් විට උපාංගය නිරීක්ෂණය විය හැක"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"ඇතැම් විට පැතිකඩ නිරීක්ෂණය කරන ලදි"</string>
<string name="vpn_footer" msgid="2388611096129106812">"ඇතැම් විට ජාලය නිරීක්ෂණය විය හැක"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"ඇතැම් විට ජාලය නිරීක්ෂණය විය හැක"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"උපාංගය නිරීක්ෂණය"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"පැතිකඩ නිරීක්ෂණය කිරීම"</string>
<string name="monitoring_title" msgid="169206259253048106">"ජාල නිරීක්ෂණය"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"ජාල ඇතුළු වීම"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN අබල කරන්න."</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN විසන්ධි කරන්න"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"ඔබේ උපාංගය කළමනාකරණය කරනු ලබන්නේ <xliff:g id="ORGANIZATION">%1$s</xliff:g> විසිනි.\n\nඔබේ පරිපාලකට ඔබේ උපාංගය හා සම්බන්ධිත සැකසීම්, ආයතනික ප්රවේශය, යෙදුම්, දත්ත සහ ඔබේ උපාංගය තිබෙන ස්ථානයේ තොරතුරු නිරීක්ෂණය කිරීමට සහ කළමනාකරණය කිරීමට හැකිය. වැඩිදුර තොරතුරු සඳහා, ඔබගේ පරිපාලක අමතන්න."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"ඔබගේ උපාංගය <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> මගින් කළමනාකරණය කෙරේ."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ඔබගේ උපාංගය කළමනාකරණය කිරීමට <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> භාවිත කරයි."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"ඔබේ උපාංගය සමඟ සම්බන්ධිත සැකසීම්, සංස්ථාපිත ප්රවේශය, යෙදුම්, දත්ත, සහ ඔබගේ උපාංගයේ ස්ථාන තොරතුරු නිරීක්ෂණය සහ කළමනාකරණය කිරීමට ඔබගේ පරිපාලකට හැකිය."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"තව දැන ගන්න"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ ජාල ක්රියාකාරකම් නිරීක්ෂණය කළ හැකි <xliff:g id="VPN_APP">%1$s</xliff:g>, වෙත ඔබ සම්බන්ධ වී ඇත."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN සැකසීම් විවෘත කරන්න"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"ඔබගේ පරිපාලක ඔබගේ උපාංගය මත තදබදය නිරීක්ෂණය කරන, ජාල ඇතුළු වීම ක්රියාත්මක කර ඇත.\n\nවැඩිදුර තොරතුරු සඳහා ඔබේ පරිපාලක අමතන්න."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"ඔබ VPN සම්බන්ධතාවක් පිහිටුවීමට යෙදුමකට අවසරයක් දී ඇත.\n\nමෙම යෙදුමට ඔබේ ඊ-තැපැල්, යෙදුම්, සහ වෙබ් අඩවි ඇතුළු, ඔබගේ උපාංග සහ ජාල ක්රියාකාරකම් නිරීක්ෂණය කිරීමට හැකිය."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"ඔබේ උපාංගය කළමනාකරණය කරනු ලබන්නේ <xliff:g id="ORGANIZATION">%1$s</xliff:g> විසිනි.\n\nඔබේ පරිපාලකට ඔබේ උපාංගය හා සම්බන්ධිත සැකසීම්, ආයතනික ප්රවේශය, යෙදුම්, දත්ත සහ ඔබේ උපාංගය තිබෙන ස්ථානයේ තොරතුරු නිරීක්ෂණය කිරීමට සහ කළමනාකරණය කිරීමට හැකිය.\n\nඊ-තැපැල්, යෙදුම්, සහ වෙබ් අඩවි ඇතුළු ඔබේ ජාල ක්රියාකාරකම් නිරීක්ෂණය කිරීමට හැකි VPN සම්බන්ධතාවයකටද, ඔබ සම්බන්ධව ඇත.\n\nවැඩිදුර තොරතුරු සඳහා, ඔබගේ පරිපාලක අමතන්න."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"ඔබේ කාර්ය පැතිකඩ කළමනාකරණය කරන්නේ <xliff:g id="ORGANIZATION">%1$s</xliff:g> විසිනි.\n\nඔබේ පරිපාලකට ඔබේ ඊ-තැපැල්, යෙදුම්, සහ ආරක්ෂාකාරී වෙබ් අඩවි ඇතුළු, ඔබගේ ජාල ක්රියාකාරකම් නිරීක්ෂණය කිරීමට හැකියාව ඇත.\n\nවැඩිදුර තොරතුරු සඳහා, ඔබගේ පරිපාලක අමතන්න.\n\nඔබේ ජාල ක්රියාකාරකම් නිරීක්ෂණය කිරීමට හැකි VPN සම්බන්ධතාවයකටද, ඔබ සම්බන්ධව ඇත."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ ජාල ක්රියාකාරකම් නිරීක්ෂණය කළ හැකි, <xliff:g id="APPLICATION">%1$s</xliff:g> වෙත ඔබ සම්බන්ධ වී ඇත."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ පෞද්ගලික ජාල ක්රියාකාරකම් නිරීක්ෂණය කළ හැකි, <xliff:g id="APPLICATION">%1$s</xliff:g> වෙත ඔබ සම්බන්ධ වී ඇත."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"ඔබේ කාර්යාල පැතිකඩ කළමනාකරණය කරන්නේ <xliff:g id="ORGANIZATION">%1$s</xliff:g> විසිනි. එය ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ කාර්යාල ජාල ක්රියාකාරකම් නිරීක්ෂණය කළ හැකි, <xliff:g id="APPLICATION">%2$s</xliff:g> වෙත ඔබ සම්බන්ධ වී ඇත.\n\nවැඩිදුර විස්තර සඳහා, ඔබේ පරිපාලක අමතන්න."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"ඔබේ කාර්යාල පැතිකඩ කළමනාකරණය කරන්නේ <xliff:g id="ORGANIZATION">%1$s</xliff:g> විසිනි. එය ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ කාර්යාල ජාල ක්රියාකාරකම් නිරීක්ෂණය කළ හැකි, <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, වෙත ඔබ සම්බන්ධ වී ඇත.\n\nඔබ ඔබේ පෞද්ගලික ජාල ක්රියාකාරකම් නිරීක්ෂණය කළ හැකි, <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> වෙතද සම්බන්ධ වී ඇත."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"ඔබේ උපාංගය කළමනාකරණය කරන්නේ <xliff:g id="ORGANIZATION">%1$s</xliff:g> විසිනි.\n\nඔබේ පරිපාලකට ඔබේ උපාංගය හා සම්බන්ධිත සැකසීම්, ආයතනික ප්රවේශය, යෙදුම්, දත්ත සහ ඔබේ උපාංගය තිබෙන ස්ථානයේ තොරතුරු නිරීක්ෂණය කිරීමට සහ කළමනාකරණය කිරීමට හැකිය.\n\nඔබ ඊ-තැපැල්, යෙදුම්, සහ වෙබ් අඩවි ඇතුළු ඔබේ ජාල ක්රියාකාරකම් නිරීක්ෂණය කිරීමට හැකි <xliff:g id="APPLICATION">%2$s</xliff:g>, වෙතද සම්බන්ධව ඇත.\n\nවැඩිදුර තොරතුරු සඳහා, ඔබගේ පරිපාලක අමතන්න."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"ඔබ අතින් අගුළු අරින තුරු උපකරණය අගුළු වැටි තිබේ"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"දැනුම්දීම් ඉක්මනින් ලබාගන්න"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"ඔබ අඟුළු හැරීමට කලින් ඒවා බලන්න"</string>
@@ -430,31 +440,23 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"දිග හරින්න"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"හකුළන්න"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"තීරය අමුණන ලදි"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"මෙය ඔබ ගලවන තෙක් එය දසුන තුළ තබයි. ගැලවීමට ස්පර්ශ කර ආපසු අල්ලාගෙන සිටින්න."</string>
+ <string name="screen_pinning_description" msgid="8909878447196419623">"මෙය ඔබ ගලවන තෙක් එය දසුන තුළ තබයි. ගැලවීමට දළ විශ්ලේෂණය ස්පර්ශ කර ආපසු අල්ලාගෙන සිටින්න."</string>
+ <string name="screen_pinning_description_accessible" msgid="426190689254018656">"මෙය ඔබ ගලවන තෙක් එය දසුන තුළ තබයි. ගැලවීමට දළ විශ්ලේෂණය ස්පර්ශ කර අල්ලාගෙන සිටින්න."</string>
<string name="screen_pinning_positive" msgid="3783985798366751226">"හරි, තේරුණා"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"එපා ස්තූතියි"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> සඟවන්නද?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"ඊළඟ අවස්ථාවේ සැකසීම් තුළ ඔබ එය සක්රිය කළ විට එය නැවත දිසිවේ."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"සඟවන්න"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> හට ධාරිතා සංවාදය වීමට අවශ්යයි"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"ඉඩ දෙන්න"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"ප්රතික්ෂේප කරන්න"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ධාරිතා සංවාදයයි"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"මුල් තත්ත්වය නැවත ප්රතිසාධනය කිරීමට තට්ටු කරන්න."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"ඔබ ඔබේ කාර්යාල පැතිකඩ භාවිත කරමින් සිටී"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"ඇමතුම"</item>
- <item msgid="5997713001067658559">"පද්ධතිය"</item>
- <item msgid="7858983209929864160">"නාද කරන්න"</item>
- <item msgid="1850038478268896762">"මාධ්ය"</item>
- <item msgid="8265110906352372092">"එලාමය"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"බ්ලූටූත්"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"ප්රවේශ්යතාව"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"අමතන්න"</string>
+ <string name="stream_system" msgid="7493299064422163147">"පද්ධතිය"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"නාද කරන්න"</string>
+ <string name="stream_music" msgid="9086982948697544342">"මාධ්ය"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"එලාමය"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"දැනුම් දීම"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"බ්ලූටූත්"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"ද්විත්ව බහු ස්වර සංඛ්යාතය"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"ප්රවේශ්යතාව"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. නිහඬ කිරීම ඉවත් කිරීමට තට්ටු කරන්න."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. කම්පනය කිරීමට තට්ටු කරන්න. ප්රවේශ්යතා සේවා නිහඬ කළ හැකිය."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. නිහඬ කිරීමට තට්ටු කරන්න. ප්රවේශ්යතා සේවා නිහඬ කළ හැකිය."</string>
@@ -466,7 +468,7 @@
<string name="quick_settings" msgid="10042998191725428">"ඉක්මන් සැකසීම්"</string>
<string name="status_bar" msgid="4877645476959324760">"තත්ත්ව තීරුව"</string>
<string name="overview" msgid="4018602013895926956">"දළ විශ්ලේෂණය"</string>
- <string name="demo_mode" msgid="2389163018533514619">"ආදර්ශන ප්රකාරය"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"පද්ධති UI ආදර්ශන ප්රකාරය"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"ආදර්ශන ප්රකාරය සබල කරන්න"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"ආදර්ශන ප්රකාරය පෙන්වන්න"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +508,17 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"ක්රියාත්මකයි"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"ක්රියාවිරහිතයි"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"බල දැනුම්දීම් පාලන සමගින්, ඔබට යෙදුමක දැනුම්දීම් සඳහා වැදගත්කම 0 සිට 5 දක්වා සැකසිය හැකිය. \n\n"<b>"5 මට්ටම"</b>" \n- දැනුම්දීම් ලැයිස්තුවේ ඉහළින්ම පෙන්වන්න \n- පූර්ණ තිර බාධාවට ඉඩ දෙන්න \n- සැම විට එබී බලන්න \n\n"<b>"4 මට්ටම"</b>" \n- පූර්ණ තිර බාධාව වළක්වන්න \n- සැම විට එබී බලන්න \n\n"<b>"3 මට්ටම"</b>" \n- පූර්ණ තිර බාධාව වළක්වන්න \n- කිසි විටක එබී නොබලන්න \n\n"<b>"2 මට්ටම"</b>" \n- පූර්ණ තිර බාධාව වළක්වන්න \n- කිසි විටක එබී නොබලන්න \n- කිසි විටක හඬ සහ කම්පනය සිදු නොකරන්න \n\n"<b>"1 මට්ටම"</b>" \n- පූර්ණ තිර බාධාව වළක්වන්න \n- කිසි විටක එබී නොබලන්න \n- කිසි විටක හඬ සහ කම්පනය සිදු නොකරන්න \n- අගුලු තිරය සහ තත්ත්ව තීරුව වෙතින් සඟවන්න \n- දැනුම්දීම් ලැයිස්තුවේ පහළින්ම පෙන්වන්න \n\n"<b>"0 මට්ටම"</b>" \n- යෙදුම වෙතින් වන සියලු දැනුම් දීම් සඟවන්න."</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"වැදගත්කම: ස්වයංක්රිය"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"වැදගත්කම: 0 මට්ටම"</string>
- <string name="min_importance" msgid="560779348928574878">"වැදගත්කම: 1 මට්ටම"</string>
- <string name="low_importance" msgid="7571498511534140">"වැදගත්කම: 2 මට්ටම"</string>
- <string name="default_importance" msgid="7609889614553354702">"වැදගත්කම: 3 මට්ටම"</string>
- <string name="high_importance" msgid="3441537905162782568">"වැදගත්කම: 4 මට්ටම"</string>
- <string name="max_importance" msgid="4880179829869865275">"වැදගත්කම: 5 මට්ටම"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"යෙදුම එක් එක් දැනුම්දීම සඳහා වැදගත්කම තීරණය කරයි."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"මෙම යෙදුම වෙතින් දැනුම්දීම් කිසි විටක නොපෙන්වන්න."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"පූර්ණ තිර බාධාව, එබී බැලීම, හඬ, හෝ කම්පනය නැත. අගුලු තිරය සහ තත්ත්ව තීරුව වෙතින් සඟවන්න."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"පූර්ණ තිර බාධාව, එබී බැලීම, හඬ, හෝ කම්පනය නැත."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"පූර්ණ තිර බාධාව හෝ එබී බැලීම නැත."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"සැම විට එබී බලන්න. පූර්ණ තිර බාධාව නැත."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"සැම විට එබී බලන්න, සහ පූර්ණ තිර බාධාවට ඉඩ දෙන්න."</string>
+ <string name="notification_header_default_channel" msgid="7506845022070889909">"දැනුම් දීම්"</string>
+ <string name="notification_channel_disabled" msgid="5805874247999578073">"ඔබ තවදුරටත් මෙම දැනුම්දීම් නොලැබෙනු ඇත."</string>
+ <string name="notification_importance_header_app" msgid="3572576545406258751">"<xliff:g id="APP">%s</xliff:g> දැනුම්දීම්"</string>
+ <string name="min_importance" msgid="7559703098688382595">"පහළ"</string>
+ <string name="low_importance" msgid="6891335321576225228">"මධ්යම"</string>
+ <string name="default_importance" msgid="6400766013567512061">"ඉහළ"</string>
+ <string name="high_importance" msgid="730741630855788381">"හදිසි"</string>
+ <string name="notification_importance_min" msgid="3237794091374404537">"ශබ්ද හෝ දෘශ්ය බාධා නැත"</string>
+ <string name="notification_importance_low" msgid="8929105501798019743">"නිහඬව පෙන්වන්න"</string>
+ <string name="notification_importance_default" msgid="9025125660733917469">"ශබ්ද කරන්න"</string>
+ <string name="notification_importance_high" msgid="3316555356062640222">"ශබ්ද කර තිරය මත උත්පතනය කරන්න"</string>
<string name="notification_more_settings" msgid="816306283396553571">"තව සැකසීම්"</string>
<string name="notification_done" msgid="5279426047273930175">"නිමයි"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> දැනුම්දීම් පාලන"</string>
@@ -652,4 +651,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"සැකසීම්වල අනුපිළිවෙළ සංංස්කරණය කරන්න."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_2">%2$d</xliff:g> න් <xliff:g id="ID_1">%1$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"දිග හරින්න"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"කුඩා කරන්න"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"අස් කරන්න"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"දුරකථනය උණුසුම් වෙමින්"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"දුරකථනය සිසිල් වන අතරතුර සමහර විශේෂාංග සීමිත විය හැකිය"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"ඔබගේ දුරකථනය ස්වයංක්රියව සිසිල් වීමට උත්සාහ කරනු ඇත. ඔබට තවම ඔබේ දුරකථනය භාවිත කළ හැකිය, නමුත් එය සෙමින් ධාවනය විය හැකිය.\n\nඔබේ දුරකථනය සිසිල් වූ පසු, එය සාමාන්ය ලෙස ධාවනය වනු ඇත."</string>
</resources>
diff --git a/packages/SystemUI/res/values-si-rLK/strings_car.xml b/packages/SystemUI/res/values-si/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-si-rLK/strings_car.xml
rename to packages/SystemUI/res/values-si/strings_car.xml
diff --git a/packages/SystemUI/res/values-si-rLK/strings_tv.xml b/packages/SystemUI/res/values-si/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-si-rLK/strings_tv.xml
rename to packages/SystemUI/res/values-si/strings_tv.xml
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 94eb561..b6b5361 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -167,6 +167,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Nastavenia systému."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Upozornenia."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Rozbaľovací kontajner s upozorneniami"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Vymazať upozornenie."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS je povolené."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Prebieha zameriavanie GPS."</string>
@@ -188,6 +189,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Uzamknutá obrazovka"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Nastavenia"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Prehľad"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Zavrieť"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>"</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Pripojenie Wi-Fi je vypnuté."</string>
@@ -406,18 +409,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Vymazať všetko"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Spustiť"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Žiadne upozornenia"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Zariadenie môže byť sledované"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil môže byť monitorovaný"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Sieť môže byť sledovaná"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Sieť môže byť monitorovaná"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Sledovanie zariadenia"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitorovanie profilu"</string>
<string name="monitoring_title" msgid="169206259253048106">"Sledovanie siete"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Zapisovanie do denníka siete"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Deaktivovať VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Odpojiť sieť VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Vaše zariadenie spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSprávca môže sledovať a spravovať nastavenia, firemný prístup, aplikácie a údaje priradené k vášmu zariadeniu a informácie o polohe zariadenia. Ďalšie informácie získate od svojho správcu."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Vaše zariadenie spravuje aplikácia <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> spravuje vaše zariadenie pomocou aplikácie <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Správca môže sledovať a spravovať nastavenia, firemný prístup, aplikácie a údaje súvisiace s týmto zariadením vrátane informácií o polohe vášho zariadenia."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Ďalšie informácie"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Ste pripojený/-á k aplikácii <xliff:g id="VPN_APP">%1$s</xliff:g>, ktorá môže sledovať vašu aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Otvoriť Nastavenia pripojenia VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Váš správca aktivoval zapisovanie do denníka siete, ktoré sleduje premávku na vašom zariadení.\n\nĎalšie informácie vám poskytne správca."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Určitej aplikácii ste udelili povolenie nastaviť pripojenie VPN.\n\nTáto aplikácia môže sledovať vaše zariadenie a aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Vaše zariadenie spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSprávca môže sledovať a spravovať nastavenia, firemný prístup, aplikácie a údaje priradené k vášmu zariadeniu a informácie o polohe zariadenia.\n\nSte tiež pripojený/-á k sieti VPN, ktorá môže sledovať vašu aktivitu v sieti vrátane e-mailových správ, aplikácii a webových stránok.\n\nĎalšie informácie získate od svojho správcu."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Váš pracovný profil spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSprávca môže sledovať vašu aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok.\n\nĎalšie informácie získate od svojho správcu.\n\nSte tiež pripojený/-á k sieti VPN, ktorá môže sledovať vašu aktivitu v sieti."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Ste pripojený/-á k aplikácii <xliff:g id="APPLICATION">%1$s</xliff:g>, ktorá môže sledovať vašu aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok."</string>
@@ -425,7 +436,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Ste pripojený/-á k aplikácii <xliff:g id="APPLICATION">%1$s</xliff:g>, ktorá môže sledovať vašu osobnú aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Váš pracovný profil spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Je pripojený k aplikácii <xliff:g id="APPLICATION">%2$s</xliff:g>, ktorá môže sledovať vašu pracovnú aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok.\n\nĎalšie informácie získate od svojho správcu."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Váš pracovný profil spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Je pripojený k aplikácii <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, ktorá môže sledovať vašu pracovnú aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok.\n\nSte tiež pripojený/-á k aplikácii <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, ktorá môže sledovať vašu osobnú aktivitu v sieti."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Vaše zariadenie spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSprávca môže sledovať a spravovať nastavenia, podnikový prístup, aplikácie a údaje priradené k vášmu účtu, ako aj informácie o polohe zariadenia.\n\nSte pripojený/-á k aplikácii <xliff:g id="APPLICATION">%2$s</xliff:g>, ktorá môže sledovať vašu aktivitu v sieti vrátane e-mailových správ, aplikácii a webových stránok.\n\nĎalšie informácie získate od svojho správcu."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Zariadenie zostane uzamknuté, dokým ho ručne neodomknete."</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Získavať upozornenia rýchlejšie"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Zobraziť pred odomknutím"</string>
@@ -436,31 +446,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Rozbaliť"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Zbaliť"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Obrazovka je pripnutá"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Obsah bude pripnutý v zobrazení, dokým ho neuvoľníte. Uvoľníte ho stlačením a podržaním tlačidla Späť."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Dobre"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Nie, vďaka"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Skryť <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Táto položka sa znova zobrazí, keď ju v nastaveniach opätovne zapnete."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Skryť"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> chce byť dialógom hlasitosti"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Povoliť"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Odmietnuť"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> je dialóg hlasitosti"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Klepnutím obnovíte pôvodnú verziu."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Používate svoj pracovný profil."</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Hovor"</item>
- <item msgid="5997713001067658559">"Systém"</item>
- <item msgid="7858983209929864160">"Zvonenie"</item>
- <item msgid="1850038478268896762">"Médiá"</item>
- <item msgid="8265110906352372092">"Budík"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Dostupnosť"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Zavolať"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Systém"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Zvonenie"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Médiá"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Budík"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Upozornenie"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Dvojtónová multifrekvencia"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Dostupnosť"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Klepnutím zapnite zvuk."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Klepnutím aktivujte režim vibrovania. Služby dostupnosti je možné stlmiť."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Klepnutím vypnite zvuk. Služby dostupnosti je možné stlmiť."</string>
@@ -472,7 +476,7 @@
<string name="quick_settings" msgid="10042998191725428">"Rýchle nastavenia"</string>
<string name="status_bar" msgid="4877645476959324760">"Stavový riadok"</string>
<string name="overview" msgid="4018602013895926956">"Prehľad"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Režim ukážky"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Ukážka používateľského rozhrania systému"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Povoliť režim ukážky"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Zobraziť režim ukážky"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -512,20 +516,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Zapnuté"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Vypnuté"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Pomocou ovládacích prvkov zobrazovania upozornení môžete nastaviť pre upozornenia aplikácie úroveň dôležitosti od 0 do 5. \n\n"<b>"Úroveň 5"</b>" \n– Zobrazovať v hornej časti zoznamu upozornení. \n– Povoliť prerušenia na celú obrazovku. \n– Vždy zobrazovať čiastočne. \n\n"<b>"Úroveň 4"</b>" \n– Zabrániť prerušeniam na celú obrazovku. \n– Vždy zobrazovať čiastočne. \n\n"<b>"Úroveň 3"</b>" \n– Zabrániť prerušeniam na celú obrazovku. \n– Nikdy nezobrazovať čiastočne. \n\n"<b>"Úroveň 2"</b>" \n– Zabrániť prerušeniam na celú obrazovku. \n– Nikdy nezobrazovať čiastočne. \n– Nikdy nespúšťať zvuk ani vibrácie. \n\n"<b>"Úroveň 1"</b>" \n– Zabrániť prerušeniam na celú obrazovku. \n– Nikdy nezobrazovať čiastočne. \n– Nikdy nespúšťať zvuk ani vibrácie. \n– Skryť na uzamknutej obrazovke a v stavovom riadku. \n– Zobraziť v dolnej časti zoznamu upozornení. \n\n"<b>"Úroveň 0"</b>" \n– Blokovať všetky upozornenia z aplikácie."</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Dôležitosť: Automatická"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Dôležitosť: Úroveň 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Dôležitosť: Úroveň 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Dôležitosť: Úroveň 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Dôležitosť: Úroveň 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Dôležitosť: Úroveň 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Dôležitosť: Úroveň 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Aplikácia určuje dôležitosť každého upozornenia."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Nikdy nezobrazovať upozornenia z tejto aplikácie."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Žiadne prerušenia na celú obrazovku, čiastočne sa zobrazujúce prerušenia, zvuky ani vibrácie. Skryť na uzamknutej obrazovke a v stavovom riadku."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Žiadne prerušenia na celú obrazovku, čiastočne sa zobrazujúce prerušenia, zvuky ani vibrácie."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Žiadne prerušenie na celú obrazovku alebo čiastočne sa zobrazujúce prerušenie."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Zobrazovať čiastočne. Žiadne prerušenia na celú obrazovku."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Zobrazovať čiastočne a povoliť prerušenia na celú obrazovku."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Ďalšie nastavenia"</string>
<string name="notification_done" msgid="5279426047273930175">"Hotovo"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Ovládacie prvky pre upozornenia z aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -658,4 +670,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Upraviť poradie nastavení"</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Strana <xliff:g id="ID_1">%1$d</xliff:g> z <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Rozbaliť"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimalizovať"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Odmietnuť"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Teplota telefónu stúpa"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Niektoré funkcie budú obmedzené, dokým neklesne teplota telefónu"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Váš telefón sa automaticky pokúsi schladiť. Môžete ho naďalej používať, ale môže fungovať pomalšie.\n\nPo poklese teploty bude telefón fungovať ako normálne."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index ffbf4ff..b9a8266 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -167,6 +167,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Sistemske nastavitve."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Obvestila."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Prekoračitveni vsebnik za obvestila"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Izbriši obvestilo."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS omogočen."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Pridobivanje GPS."</string>
@@ -188,6 +189,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Zaklenjen zaslon"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Nastavitve"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Pregled."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Zapri"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi je izklopljen."</string>
@@ -406,18 +409,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Izbriši vse"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Začni zdaj"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Ni obvestil"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Naprava je morda nadzorovana"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil je morda nadziran"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Omrežje je lahko nadzorovano"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Omrežje je morda nadzorovano"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Nadzor naprave"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Nadzor nad profilom"</string>
<string name="monitoring_title" msgid="169206259253048106">"Nadzor omrežja"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Beleženje omrežnega prometa"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Onemogoči VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Prekini povezavo z VPN-jem"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Napravo upravlja: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSkrbnik lahko nadzira in upravlja nastavitve, dostop za podjetje, aplikacije, podatke, povezane z napravo, in podatke o lokaciji naprave. Če želite več informacij, se obrnite na skrbnika."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Napravo upravlja aplikacija <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> uporablja aplikacijo <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> za upravljanje naprave."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Skrbnik lahko nadzira in upravlja nastavitve, dostop za podjetje, aplikacije, z napravo povezane podatke in podatke o lokaciji."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Več o tem"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Povezani ste z aplikacijo <xliff:g id="VPN_APP">%1$s</xliff:g>, ki lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Odpri nastavitve omrežja VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Skrbnik je vklopil beleženje omrežnega prometa, ki nadzoruje promet v napravi.\n\nČe želite več informacij, se obrnite na skrbnika."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Aplikaciji ste dovolili vzpostavitev povezave VPN.\n\nTa aplikacija lahko nadzira napravo in omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Napravo upravlja: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSkrbnik lahko nadzira in upravlja nastavitve, dostop za podjetje, aplikacije, podatke, povezane z napravo, in podatke o lokaciji naprave.\n\nPovezani ste z omrežjem VPN, ki lahko nadzira vašo omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti.\n\nČe želite več informacij, se obrnite na skrbnika."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Delovni profil upravlja organizacija <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSkrbnik lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti.\n\nČe želite več informacij, se obrnite na skrbnika.\n\nPovezani ste tudi z omrežjem VPN, ki lahko nadzira omrežno dejavnost."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Povezani ste z aplikacijo <xliff:g id="APPLICATION">%1$s</xliff:g>, ki lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
@@ -425,7 +436,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Povezani ste z aplikacijo <xliff:g id="APPLICATION">%1$s</xliff:g>, ki lahko nadzira vašo osebno omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Delovni profil upravlja organizacija <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je z aplikacijo <xliff:g id="APPLICATION">%2$s</xliff:g>, ki lahko nadzira vašo delovno omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti.\n\nČe želite več informacij, se obrnite na skrbnika."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Delovni profil upravlja organizacija <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je z aplikacijo <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, ki lahko nadzira vašo delovno omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti.\n\nPovezani ste tudi z aplikacijo <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, ki lahko nadzira vašo osebno omrežno dejavnost."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Napravo upravlja organizcija <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSkrbnik lahko nadzira in upravlja nastavitve, dostop za podjetje, aplikacije, podatke, povezane z napravo, in podatke o lokaciji naprave.\n\nPovezani ste z aplikacijo <xliff:g id="APPLICATION">%2$s</xliff:g>, ki lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti.\n\nČe želite več informacij, se obrnite na skrbnika."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Naprava bo ostala zaklenjena, dokler je ročno ne odklenete."</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Hitrejše prejemanje obvestil"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Oglejte si jih pred odklepanjem"</string>
@@ -436,31 +446,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Razširi"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Strni"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Zaslon je pripet"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"S tem ostane zaslon v pogledu, dokler ga ne odpnete. Pridržite tipko za nazaj, če ga želite odpeti."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Razumem"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Ne, hvala"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Želite skriti <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Znova se bo pojavila, ko jo naslednjič vklopite v nastavitvah."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Skrij"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> želi biti pogovorno okno glede prostornine."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Dovoli"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Zavrni"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> je pogovorno okno glede prostornine"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Dotaknite se, če želite obnoviti prvotno stanje."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Uporabljate delovni profil"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Klic"</item>
- <item msgid="5997713001067658559">"Sistem"</item>
- <item msgid="7858983209929864160">"Zvonjenje"</item>
- <item msgid="1850038478268896762">"Predstavnost"</item>
- <item msgid="8265110906352372092">"Alarm"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Funkcije za ljudi s posebnimi potrebami"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Klic"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistem"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Sprožitev zvonjenja"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Predstavnost"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Opozorilo"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Obvestilo"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Dvojna večtonska frekvenca"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Funkcije za ljudi s posebnimi potrebami"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Dotaknite se, če želite vklopiti zvok."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Dotaknite se, če želite nastaviti vibriranje. V storitvah za ljudi s posebnimi potrebami bo morda izklopljen zvok."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Dotaknite se, če želite izklopiti zvok. V storitvah za ljudi s posebnimi potrebami bo morda izklopljen zvok."</string>
@@ -472,7 +476,7 @@
<string name="quick_settings" msgid="10042998191725428">"Hitre nastavitve"</string>
<string name="status_bar" msgid="4877645476959324760">"Vrstica stanja"</string>
<string name="overview" msgid="4018602013895926956">"Pregled"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Predstavitveni način"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Predstavitveni način uporabniškega vmesnika sistema"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Omogočanje predstavitvenega načina"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Prikaz predstavitvenega načina"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -512,20 +516,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Vklopljeno"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Izklopljeno"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"S kontrolniki za pomebnost obvestila je mogoče za obvestila aplikacije nastaviti stopnjo pomembnosti od 0 do 5. \n\n"<b>"Stopnja 5"</b>" \n– Prikaz na vrhu seznama obvestil \n– Omogočanje prekinitev v celozaslonskem načinu \n– Vedno prikaži hitre predoglede \n\n"<b>"Stopnja 4"</b>" \n– Preprečevanje prekinitev v celozaslonskem načinu \n– Vedno prikaži hitre predoglede \n\n"<b>"Stopnja 3"</b>" \n– Preprečevanje prekinitev v celozaslonskem načinu \n– Nikoli ne prikaži hitrih predogledov \n\n"<b>"Stopnja 2"</b>" \n– Preprečevanje prekinitev v celozaslonskem načinu \n– Nikoli ne prikaži hitrih predogledov \n– Nikoli ne uporabi zvoka in vibriranja \n\n"<b>"Stopnja 1"</b>" \n– Preprečevanje prekinitev v celozaslonskem načinu \n– Nikoli ne prikaži hitrih predogledov \n– Nikoli ne uporabi zvoka in vibriranja \n– Skrivanje na zaklenjenem zaslonu in v vrstici stanja \n– Prikaz na dnu seznama obvestil \n\n"<b>"Stopnja 0"</b>" \n– Blokiranje vseh obvestil aplikacije"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Pomembnost: Samodejno"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Pomembnost: stopnja 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Pomembnost: stopnja 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Pomembnost: stopnja 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Pomembnost: stopnja 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Pomembnost: stopnja 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Pomembnost: stopnja 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Aplikacija določi pomembnost za posamezno obvestilo."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Nikoli ne pokaži obvestil te aplikacije."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Brez prekinitev, predog., zvoka ali vibrir. v celoz. načinu. Skrij na zakl. zasl. in v vrst. stanja."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Brez prekinitev, hitrih predogledov, zvoka ali vibriranja v celozaslonskem načinu."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Brez prekinitev ali hitrih predogledov v celozaslonskem načinu."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Vedno prikaži hitri predogled. Brez prekinitev v celozaslonskem načinu."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Vedno prikaži hitri predogled in dovoli prekinitve v celozaslonskem načinu."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Več nastavitev"</string>
<string name="notification_done" msgid="5279426047273930175">"Dokončano"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Kontrolniki obvestil za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -658,4 +670,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Uredi vrstni red nastavitev."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_1">%1$d</xliff:g>. stran od <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Razširi"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimiraj"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Opusti"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Telefon se segreva"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Nekatere funkcije bodo med ohlajanjem omejene."</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Telefon se bo samodejno poskusil ohladiti. Še naprej ga lahko uporabljate, vendar bo morda deloval počasneje.\n\nKo se telefon ohladi, bo zopet deloval kot običajno."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sq-rAL-land/strings.xml b/packages/SystemUI/res/values-sq-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-sq-rAL-land/strings.xml
rename to packages/SystemUI/res/values-sq-land/strings.xml
diff --git a/packages/SystemUI/res/values-sq-rAL/config.xml b/packages/SystemUI/res/values-sq/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-sq-rAL/config.xml
rename to packages/SystemUI/res/values-sq/config.xml
diff --git a/packages/SystemUI/res/values-sq-rAL/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
similarity index 93%
rename from packages/SystemUI/res/values-sq-rAL/strings.xml
rename to packages/SystemUI/res/values-sq/strings.xml
index 9b0b832..d54b5a3 100644
--- a/packages/SystemUI/res/values-sq-rAL/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Bateria po ngarkohet, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> për qind."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Cilësimet e sistemit."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Njoftimet."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Kontejneri i tejkalimit të njoftimeve"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Pastro njoftimin."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS-ja është e aktivizuar."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Po siguron GPS-në."</string>
@@ -184,6 +185,8 @@
<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>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Mbylle"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi është i çaktivizuar."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Pastroji të gjitha"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Fillo tani"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Asnjë njoftim"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Pajisja mund të monitorohet"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profili mund të monitorohet"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Rrjeti mund të jetë i monitoruar"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Rrjeti mund të jetë i monitoruar"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Monitorimi i pajisjes"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitorimi i profilit"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitorimi i rrjetit"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Regjistrimi i rrjetit"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Çaktivizo VPN-në"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Shkëput VPN-në"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Pajisja jote menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratori yt mund të monitorojë dhe të menaxhojë cilësimet, qasjen e korporatës, aplikacionet, të dhënat e lidhura me pajisjen tënde, si dhe informacionet e vendndodhjes së pajisjes tënde. Për më shumë informacione, kontakto me administratorin tënd."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Pajisja jote menaxhohet nga <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> përdor <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> për të menaxhuar pajisjen tënde."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administratori yt mund të monitorojë dhe të menaxhojë cilësimet, qasjen e korporatës, aplikacionet, të dhënat në lidhje me pajisjen si dhe informacionet e vendndodhjes së pajisjes tënde."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Mëso më shumë"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Je i lidhur me aplikacionin <xliff:g id="VPN_APP">%1$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd në rrjet, duke përfshirë mail-et, aplikacionet dhe sajtet e uebit."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Hap cilësimet e VPN-së"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administratori yt ka aktivizuar regjistrimin e rrjetit, i cili monitoron trafikun në pajisjen tënde.\n\nPër më shumë informacione, kontakto me administratorin."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"I dhe leje një aplikacioni që të konfigurojë një lidhje VPN.\n\nKy aplikacion mund të monitorojë pajisjen tënde dhe aktivitetin e rrjetit, përfshirë mailet, aplikacionet dhe sajtet e uebit."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Pajisja jote menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratori yt mund të monitorojë dhe të menaxhojë cilësimet, qasjen e korporatës, aplikacionet, të dhënat e lidhura me pajisjen dhe informacionet e vendndodhjes së pajisjes.\n\nJe i lidhur me një rrjet VPN që mund të monitorojë aktivitetin tënd të rrjetit, duke përfshirë emailet, aplikacionet dhe sajtet e uebit.\n\nPër më shumë informacione, kontakto me administratorin."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Profili yt i punës menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratori yt mund të monitorojë aktivitetin tënd të rrjetit, duke përfshirë mail-at, aplikacionet dhe faqet e internetit.\n\nPër më shumë informacion, kontakto me administratorin tënd.\n\nJe i lidhur edhe me një VPN, që mund të monitorojë aktivitetin tënd të rrjetit."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Je i lidhur me aplikacionin <xliff:g id="APPLICATION">%1$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd në rrjet përfshirë mailet, aplikacionet dhe sajtet e uebit."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Je i lidhur me aplikacionin <xliff:g id="APPLICATION">%1$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd personal në rrjet, përfshirë mailet, aplikacionet dhe sajtet e uebit."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Profili yt i punës menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ai është i lidhur me <xliff:g id="APPLICATION">%2$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd të punës në rrjet, përfshirë mailet, aplikacionet dhe sajtet e uebit.\n\nPër më shumë informacione, kontakto me administratorin tënd."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Profili yt i punës menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ai është i lidhur me <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd të punës në rrjet, përfshirë mailet, aplikacionet dhe sajtet e uebit.\n\nJe lidhur gjithashtu edhe me <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd personal në rrjet."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Pajisja jote menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratori mund të monitorojë dhe menaxhojë cilësimet, qasjen e korporatës, aplikacionet, të dhënat që shoqërojnë pajisjen tënde si dhe informacionin e vendndodhjes së pajisjes.\n\nJe i lidhur me <xliff:g id="APPLICATION">%2$s</xliff:g>, që mund të monitorojë aktivitetin tënd të punës në rrjet përfshirë mail-at, aplikacionet dhe faqet e internetit.\n\nPër më shumë informacion, kontakto me administratorin tënd."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Pajisje do të qëndrojë e kyçur derisa ta shkyçësh manualisht"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Merr njoftime më shpejt"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Shikoji para se t\'i shkyçësh"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Zgjeroje"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Mbylle"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Ekrani u gozhdua"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Kjo e ruan në pamje deri sa ta heqësh nga gozhdimi. Prek dhe mbaj të shtypur \"Prapa\" për ta hequr nga gozhdimi."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"E kuptova!"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Jo, faleminderit!"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Të fshihet <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Do të rishfaqet herën tjetër kur ta aktivizoni te cilësimet."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Fshih"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> dëshiron të bëhet dialogu i volumit."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Lejo"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Refuzo"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> është dialogu i volumit"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Trokit për të restauruar origjinalin."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Po përdor profilin tënd të punës"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Telefono"</item>
- <item msgid="5997713001067658559">"Sistemi"</item>
- <item msgid="7858983209929864160">"Bjeri ziles"</item>
- <item msgid="1850038478268896762">"Media"</item>
- <item msgid="8265110906352372092">"Alarmi"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Qasshmëria"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Telefono"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistemi"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Bjeri ziles"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Media"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarmi"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Njoftimi"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Frekuenca e dyfishtë me shumë tone"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Qasshmëria"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Trokit për të aktivizuar."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Trokit për ta caktuar te dridhja. Shërbimet e qasshmërisë mund të çaktivizohen."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Trokit për të çaktivizuar. Shërbimet e qasshmërisë mund të çaktivizohen."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Cilësimet e shpejta"</string>
<string name="status_bar" msgid="4877645476959324760">"Shiriti i statusit"</string>
<string name="overview" msgid="4018602013895926956">"Përmbledhje"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Modaliteti i demonstrimit"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Modaliteti i demonstrimit i ndërfaqes së përdoruesit të sistemit"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Aktivizo modalitetin e demonstrimit"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Shfaq modalitetin e demonstrimit"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Eternet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Aktiv"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Joaktiv"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Me kontrollet e njoftimit të energjisë, mund të caktosh një nivel rëndësie nga 0 në 5 për njoftimet e një aplikacioni. \n\n"<b>"Niveli 5"</b>" \n- Shfaq në krye të listës së njoftimeve \n- Lejo ndërprerjen e ekranit të plotë \n- Gjithmonë shfaq shpejt \n\n"<b>"Niveli 4"</b>" \n- Parandalo ndërprerjen e ekranit të plotë \n- Gijthmonë shfaq shpejt \n\n"<b>"Niveli 3"</b>" \n- Parandalo ndërprerjen e ekranit të plotë \n- Asnjëherë mos shfaq shpejt \n\n"<b>"Niveli 2"</b>" \n- Parandalo ndërprerjen e ekranit të plotë \n- Asnjëherë mos shfaq shpejt \n- Asnjëherë mos lësho tingull dhe dridhje \n\n"<b>"Niveli 1"</b>" \n- Parandalo ndërprerjen e ekranit të plotë \n- Asnjëherë mos shfaq shpejt \n- Asnjëherë mos lësho tingull ose dridhje \n- Fshih nga ekrani i kyçjes dhe shiriti i statusit \n- Shfaq në fund të listës së njoftimeve \n\n"<b>"Niveli 0"</b>" \n- Blloko të gjitha njoftimet nga aplikacioni"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Rëndësia: Automatike"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Rëndësia: Niveli 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Rëndësia: Niveli 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Rëndësia: Niveli 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Rëndësia: Niveli 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Rëndësia: Niveli 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Rëndësia: Niveli 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Aplikacioni përcakton rëndësinë për çdo njoftim."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Mos trego asnjëherë njoftime nga ky aplikacion."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Nuk ka ndërprerje të plotë të ekranit, shfaqje të shpejtë, tingull apo dridhje. Fshihe nga ekrani i kyçjes dhe shiriti i statusit."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Nuk ka ndërprerje të plotë të ekranit, shfaqje të shpejtë, tingull apo dridhje."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Nuk ka ndërprerje të plotë të ekranit apo shfaqje të shpejtë."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Gjithmonë shfaq shpejt. Nuk ka ndërprerje të plotë të ekranit."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Gjithmonë shfaq shpejt dhe lejo ndërprerje të plotë të ekranit."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Cilësime të tjera"</string>
<string name="notification_done" msgid="5279426047273930175">"U krye"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Kontrollet e njoftimeve të <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Modifiko rendin e cilësimeve."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Faqja <xliff:g id="ID_1">%1$d</xliff:g> nga <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Zgjero"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizo"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Hiqe"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Telefoni po bëhet i ngrohtë"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Disa funksione janë të kufizuara kur telefoni është duke u ftohur"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Telefoni yt do të përpiqet automatikisht që të ftohet. Mund ta përdorësh përsëri telefonin, por ai mund të punojë më ngadalë.\n\nPasi telefoni të jetë ftohur, ai do të punojë si normalisht."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sq-rAL/strings_car.xml b/packages/SystemUI/res/values-sq/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-sq-rAL/strings_car.xml
rename to packages/SystemUI/res/values-sq/strings_car.xml
diff --git a/packages/SystemUI/res/values-sq-rAL/strings_tv.xml b/packages/SystemUI/res/values-sq/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-sq-rAL/strings_tv.xml
rename to packages/SystemUI/res/values-sq/strings_tv.xml
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index bf875e9..727c01e 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -164,6 +164,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Батерија се пуни, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> процената."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Системска подешавања."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Обавештења."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Контејнер преклопног менија за обавештења"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Обриши обавештење."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS је омогућен."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Учитавање GPS-а."</string>
@@ -185,6 +186,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Закључани екран."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Подешавања"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Преглед."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Затвори"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi је искључен."</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Обриши све"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Започни одмах"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Нема обавештења"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Уређај се можда надгледа"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Профил се можда надгледа"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Мрежа се можда надгледа"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Мрежа се можда надгледа"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Надгледање уређаја"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Надгледање профила"</string>
<string name="monitoring_title" msgid="169206259253048106">"Надгледање мреже"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Евидентирање мреже"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Онемогући VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Прекини везу са VPN-ом"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Уређајем управља <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор може да надгледа подешавања, корпоративни приступ, апликације, податке повезане са уређајем и информације о локацији уређаја, као и да управља њима. Више информација потражите од администратора."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Уређајем управља <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> користи <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> за управљање уређајем."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Администратор може да надгледа подешавања, корпоративни приступ, апликације, податке повезане са уређајем и информације о локацији уређаја, као и да управља њима."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Сазнајте више"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Повезани сте са апликацијом <xliff:g id="VPN_APP">%1$s</xliff:g>, која може да надгледа активности на мрежи, укључујући имејлове, апликације и веб-сајтове."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Отворите подешавања VPN-а"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Администратор је укључио евидентирање мреже, које прати саобраћај на уређају.\n\nКонтактирајте администратора за више информација."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Дали сте дозволу апликацији да подешава VPN везу.\n\nТа апликација може да надгледа активности на уређају и мрежи, укључујући имејлове, апликације и веб-сајтове."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Уређајем управља <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор може да надгледа подешавања, корпоративни приступ, апликације, податке повезане са уређајем и информације о локацији уређаја, као и да управља њима.\n\nПовезани сте на VPN, који може да надгледа активности на мрежи, укључујући имејлове, апликације и безбедне веб-сајтове.\n\nВише информација потражите од администратора."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Профилом за Work управља <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор може да надгледа активности на мрежи, укључујући имејлове, апликације и веб-сајтове.\n\nВише информација потражите од администратора.\n\nПовезани сте и на VPN, који може да надгледа активности на личној мрежи."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Повезани сте са апликацијом <xliff:g id="APPLICATION">%1$s</xliff:g>, која може да надгледа активности на мрежи, укључујући имејлове, апликације и веб-сајтове."</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Повезани сте са апликацијом <xliff:g id="APPLICATION">%1$s</xliff:g>, која може да надгледа активности на личној мрежи, укључујући имејлове, апликације и веб-сајтове."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Профилом за Work управља <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Повезан је са апликацијом <xliff:g id="APPLICATION">%2$s</xliff:g>, која може да надгледа активности на пословној мрежи, укључујући имејлове, апликације и веб-сајтове.\n\nВише информација потражите од администратора."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Профилом за Work управља <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Повезан је са апликацијом <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, која може да надгледа активности на пословној мрежи, укључујући имејлове, апликације и веб-сајтове.\n\nПовезани сте и са апликацијом <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, која може да надгледа активности на личној мрежи."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Уређајем управља <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор може да надгледа подешавања, корпоративни приступ, апликације, податке повезане са уређајем и информације о локацији уређаја, као и да управља њима.\n\nПовезани сте са апликацијом <xliff:g id="APPLICATION">%2$s</xliff:g>, која може да надгледа активности на мрежи, укључујући имејлове, апликације и веб-сајтове.\n\nВише информација потражите од администратора."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Уређај ће остати закључан док га не откључате ручно"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Брже добијајте обавештења"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Прегледајте их пре откључавања"</string>
@@ -432,31 +442,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Прошири"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Скупи"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Екран је закачен"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"На овај начин се ово стално приказује док га не откачите. Додирните и задржите Назад да бисте га откачили."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Важи"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Не, хвала"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Желите ли да сакријете <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ово ће се поново појавити када га следећи пут будете укључили у подешавањима."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Сакриј"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> жели да буде дијалог за јачину звука."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Дозволи"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Одбиј"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> је дијалог за јачину звука"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Додирните да бисте вратили оригинал."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Користите профил за Work"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Позови"</item>
- <item msgid="5997713001067658559">"Систем"</item>
- <item msgid="7858983209929864160">"Прстен"</item>
- <item msgid="1850038478268896762">"Медијуми"</item>
- <item msgid="8265110906352372092">"Аларм"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Приступачност"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Позив"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Систем"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Звоно"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Медији"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Аларм"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Обавештење"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Вишеструка фреквенција дуалног тона"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Приступачност"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Додирните да бисте укључили звук."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Додирните да бисте подесили на вибрацију. Звук услуга приступачности ће можда бити искључен."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Додирните да бисте искључили звук. Звук услуга приступачности ће можда бити искључен."</string>
@@ -468,7 +472,7 @@
<string name="quick_settings" msgid="10042998191725428">"Брза подешавања"</string>
<string name="status_bar" msgid="4877645476959324760">"Статусна трака"</string>
<string name="overview" msgid="4018602013895926956">"Преглед"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Режим демонстрације"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Режим демонстрације за кориснички интерфејс система"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Омогући режим демонстрације"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Прикажи режим демонстрације"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Етернет"</string>
@@ -508,20 +512,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Укључено"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Искључено"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Помоћу напредних контрола за обавештења можете да подесите ниво важности од 0. до 5. за обавештења апликације. \n\n"<b>"5. ниво"</b>" \n– Приказују се у врху листе обавештења \n- Дозволи прекид режима целог екрана \n– Увек завируј \n\n"<b>"4. ниво"</b>" \n– Спречи прекид режима целог екрана \n– Увек завируј \n\n"<b>"3. ниво"</b>" \n– Спречи прекид режима целог екрана \n– Никада не завируј \n\n"<b>"2. ниво"</b>" \n– Спречи прекид режима целог екрана \n– Никада не завируј \n– Никада не производи звук или вибрацију \n\n"<b>"1. ниво"</b>" \n– Спречи прекид режима целог екрана \n– Никада не завируј \n– Никада не производи звук или вибрацију \n– Сакриј на закључаном екрану и статусној траци \n– Приказују се у дну листе обавештења \n\n"<b>"0. ниво"</b>" \n– Блокирај сва обавештења из апликације"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Важност: Аутоматски"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Важност: 0. ниво"</string>
- <string name="min_importance" msgid="560779348928574878">"Важност: 1. ниво"</string>
- <string name="low_importance" msgid="7571498511534140">"Важност: 2. ниво"</string>
- <string name="default_importance" msgid="7609889614553354702">"Важност: 3. ниво"</string>
- <string name="high_importance" msgid="3441537905162782568">"Важност: 4. ниво"</string>
- <string name="max_importance" msgid="4880179829869865275">"Важност: 5. ниво"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Апликација одређује важност сваког обавештења."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Никада не приказуј обавештења из ове апликације"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Без прекида режима целог екрана, завиривања, звука или вибрације. Сакриј на закључаном екрану и статусној траци."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Без прекида режима целог екрана, завиривања, звука или вибрације."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Без прекида режима целог екрана или завиривања."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Увек завируј. Без прекида режима целог екрана."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Увек завируј и дозволи прекид режима целог екрана."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Још подешавања"</string>
<string name="notification_done" msgid="5279426047273930175">"Готово"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Контроле обавештења за апликацију <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -654,4 +666,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Измени редослед подешавања."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_1">%1$d</xliff:g>. страна од <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Прошири"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Умањи"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Одбаци"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Телефон се загрејао"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Неке функције су ограничене док се телефон не охлади"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Телефон ће аутоматски покушати да се охлади. И даље ћете моћи да користите телефон, али ће спорије реаговати.\n\nКада се телефон охлади, нормално ће радити."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 6c4ee21..a04a761 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Batteriet laddas, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> procent."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Systeminställningar."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Meddelanden."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Spillbehållare för aviseringar"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Ta bort meddelandet."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS aktiverad."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Tar emot GPS."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Låsskärm."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Inställningar"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Översikt."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Stäng"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi har inaktiverats."</string>
@@ -350,7 +353,7 @@
<string name="speed_bump_explanation" msgid="1288875699658819755">"Mindre brådskande aviseringar nedan"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Tryck igen för att öppna"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Svep uppåt för att låsa upp"</string>
- <string name="do_disclosure_generic" msgid="8498005633306135779">"Den här enheten är hanterad"</string>
+ <string name="do_disclosure_generic" msgid="8498005633306135779">"Den här enheten hanteras"</string>
<string name="do_disclosure_with_name" msgid="5640615509915445501">"Den här enheten hanteras av <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
<string name="phone_hint" msgid="4872890986869209950">"Svep från ikonen och öppna telefonen"</string>
<string name="voice_hint" msgid="8939888732119726665">"Svep från ikonen och öppna röstassistenten"</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Rensa alla"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Starta nu"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Inga aviseringar"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Enheten kan övervakas"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Det kan hända att profilen övervakas"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Nätverket kan vara övervakat"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Nätverket kan vara övervakat"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Enhetsövervakning"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilövervakning"</string>
<string name="monitoring_title" msgid="169206259253048106">"Nätverksövervakning"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Nätverksloggning"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Inaktivera VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Koppla från VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Enheten hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratören kan övervaka och hantera inställningar, företagsåtkomst, appar, data som är kopplad till enheten och enhetens platsinformation. Kontakta administratören om du vill veta mer."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Enheten hanteras av <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> hanterar enheten med hjälp av <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administratören kan övervaka och hantera inställningar, företagsåtkomst, appar, data med koppling till enheten och enhetens plats."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Läs mer"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Du är ansluten till <xliff:g id="VPN_APP">%1$s</xliff:g> som kan övervaka din aktivitet på nätverket, inklusive e-postmeddelanden, appar och webbplatser."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Öppna VPN-inställningar"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administratören har aktiverat nätverksloggning, vilken övervakar trafik på enheten.\n\nKontakta administratören om du vill veta mer."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Du har gett en app behörighet att upprätta en VPN-anslutning.\n\nAppen kan bevaka aktivitet på enheten och nätverket, inklusive e-post, appar och webbplatser."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Enheten hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratören kan övervaka och hantera inställningar, företagsåtkomst, appar, data som är kopplad till enheten och enhetens platsinformation.\n\nDu är ansluten till ett VPN-nätverk som kan övervaka dina nätverksaktiviteter, inklusive e-post, appar och webbplatser.\n\nKontakta administratören om du vill veta mer."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Jobbprofilen hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratören kan bevaka aktiviteten på nätverket, inklusive e-post, appar och webbplatser.\n\nKontakta administratören för mer information.\n\nDu är även ansluten till ett VPN-nätverk som kan bevaka aktiviteten på nätverket."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Du är ansluten till <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan bevaka aktivitet på nätverket, inklusive e-post, appar och webbplatser."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Du är ansluten till <xliff:g id="APPLICATION">%1$s</xliff:g> som kan övervaka din privata aktivitet på nätverket, inklusive e-postmeddelanden, appar och webbplatser."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Jobbprofilen hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den är ansluten till <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan hantera aktivitet på arbetsplatsens nätverk, inklusive e-post, appar och webbplatser.\n\nKontakta administratören för mer information."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Jobbprofilen hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den är ansluten till <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, som kan hantera aktivitet på arbetsplatsens nätverk, inklusive e-post, appar och webbplatser.\n\nDu är även ansluten till <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, som kan hantera privat aktivitet på nätverket."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Enheten hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratören kan bevaka och hantera inställningar, företagsåtkomst, appar, data som är kopplad till enheten och enhetens platsuppgifter.\n\nDu är ansluten till <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan övervaka aktivitet på nätverket, inklusive e-post. appar och webbplatser .\n\nKontakta administratören för mer information."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Enheten förblir låst tills du låser upp den manuellt"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Få aviseringar snabbare"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Visa dem innan du låser upp"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Utöka"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Komprimera"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Skärmen har fästs"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Detta visar skärmen tills du lossar den. Tryck länge på Tillbaka om du vill lossa skärmen."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"OK"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Nej tack"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Vill du dölja <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Den visas på nytt nästa gång du aktiverar den i inställningarna."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Dölj"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> försöker överta funktionen som volymkontroll."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Tillåt"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Neka"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> används som volymkontroll"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Återställ originalet genom att trycka här."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Du använder din jobbprofil"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Ring"</item>
- <item msgid="5997713001067658559">"System"</item>
- <item msgid="7858983209929864160">"Ring"</item>
- <item msgid="1850038478268896762">"Media"</item>
- <item msgid="8265110906352372092">"Alarm"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Tillgänglighet"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Samtal"</string>
+ <string name="stream_system" msgid="7493299064422163147">"System"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Ringsignal"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Media"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarm"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Avisering"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Tonval"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Tillgänglighet"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Tryck här om du vill slå på ljudet."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Tryck här om du vill sätta på vibrationen. Tillgänglighetstjänster kanske inaktiveras."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tryck här om du vill stänga av ljudet. Tillgänglighetstjänsterna kanske inaktiveras."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Snabbinställningar"</string>
<string name="status_bar" msgid="4877645476959324760">"Statusfält"</string>
<string name="overview" msgid="4018602013895926956">"Översikt"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Demoläge"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Demoläge för systemgränssnitt"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Aktivera demoläge"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Visa demoläge"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Av"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"På"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Med aviseringsinställningarna kan du ange prioritetsnivå från 0 till 5 för aviseringar från en app. \n\n"<b>"Nivå 5"</b>" \n– Visa högst upp i aviseringslistan\n– Tillåt avbrott i helskärmsläge \n– Snabbvisa alltid \n\n"<b>"Nivå 4"</b>" \n– Tillåt inte avbrott i helskärmsläge \n– Snabbvisa alltid \n\n"<b>"Nivå 3"</b>" \n- Tillåt inte avbrott i helskärmsläge \n– Snabbvisa aldrig \n\n"<b>"Nivå 2"</b>" \n– Tillåt inte avbrott i helskärmsläge \n– Snabbvisa aldrig \n– Aldrig med ljud eller vibration \n\n"<b>"Nivå 1"</b>" \n– Tillåt inte avbrott i helskärmsläge \n– Snabbvisa aldrig \n– Aldrig med ljud eller vibration \n– Visa inte på låsskärmen och i statusfältet \n– Visa längst ned i aviseringslistan \n\n"<b>"Nivå 0"</b>" \n– Blockera alla aviseringar från appen"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Prioritet: automatisk"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Prioritet: nivå 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Prioritet: nivå 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Prioritet: nivå 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Prioritet: nivå 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Prioritet: nivå 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Prioritet: nivå 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Appen fastställer prioritet för varje avisering."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Visa aldrig aviseringar från appen."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Inga avbrott, snabbvisningar, ljud eller vibrationer i helskärm. Dölj från låsskärm och statusfält."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Inga avbrott, snabbvisningar, ljud eller vibrationer i helskärmsläge."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Avbryt eller snabbvisa inte i helskärmsläge."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Snabbvisa alltid. Avbryt inte i helskärmsläge."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Snabbvisa alltid och tillåt avbrott i helskärmsläge."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Fler inställningar"</string>
<string name="notification_done" msgid="5279426047273930175">"Klar"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Inställningar för <xliff:g id="APP_NAME">%1$s</xliff:g>-aviseringar"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Ändra ordning på inställningarna."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Sida <xliff:g id="ID_1">%1$d</xliff:g> av <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Utöka"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimera"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Ignorera"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Mobilen börjar bli varm"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Vissa funktioner är begränsade medan mobilen svalnar"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Mobilen försöker svalna automatiskt. Du kan fortfarande använda mobilen, men den kan vara långsammare än vanligt.\n\nMobilen fungerar som vanligt när den har svalnat."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index e03615a..49c1860 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Betri inachaji, asilimia <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g>."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Mipangilio ya mfumo."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Arifa."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Metadata ya arifa za ziada"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Futa arifa"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS imewashwa."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Kupata GPS."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Skrini iliyofungwa."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Mipangilio"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Muhtasari."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Funga"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi imezimwa."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Futa zote"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Anza sasa"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Hakuna arifa"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Huenda kifaa kinafuatiliwa"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Huenda wasifu ukafuatiliwa"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Huenda mtandao unafuatiliwa"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Huenda mtandao unafuatiliwa"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Ufuatiliaji wa kifaa"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Ufuatiliaji wasifu"</string>
<string name="monitoring_title" msgid="169206259253048106">"Ufuatiliaji wa mtandao"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Kumbukumbu ya Kuingia Mtandaoni"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Zima VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Ondoa VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Kifaa chako kinasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nMsimamizi wako anaweza kufuatilia na kudhibiti mipangilio, ufikiaji wa kampuni, programu, data inayohusiana na kifaa chako, na maelezo ya mahali kilipo kifaa chako. Kwa maelezo zaidi, wasiliana na msimamizi wako."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Kifaa chako kinadhibitiwa na <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> inatumia <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> kudhibiti kifaa chako."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Msimamizi wako anaweza kufuatilia na kudhibiti mipangilio, ufikiaji wa mashirika, programu, data inayohusiana na kifaa chako na maelezo ya eneo la kifaa chako."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Pata maelezo zaidi"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Umeunganishwa kwenye <xliff:g id="VPN_APP">%1$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Fungua Mipangilio ya VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Msimamizi wako amewasha kumbukumbu ya kuingia mtandaoni ambayo huchunguza trafiki kwenye kifaa chako.\n\nIli kupata maelezo zaidi, wasiliana na msimamizi wako."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Uliruhusu programu iweke muunganisho wa VPN.\n\nProgramu hii inaweza kufuatilia shughuli za kifaa na mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Kifaa chako kinasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nMsimamizi wako anaweza kufuatilia na kudhibiti mipangilio, ufikiaji wa kampuni, programu, data inayohusiana na kifaa chako, na maelezo ya mahali kilipo kifaa chako.\n\nUmeuganishwa kwenye VPN, ambayo inaweza kufuatilia shughuli ya mtandao wako, ikiwa ni pamoja na barua pepe, programu, na tovuti.\n\n Kwa maelezo zaidi, wasiliana na msimamizi wako."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Wasifu wako wa kazini unasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>. \n\nMsimamizi wako ana uwezo wa kufuatilia shughuli ya mtandao wako ikiwa ni pamoja na barua pepe, programu, na tovuti. \n\nKwa maelezo zaidi, wasiliana na msimamizi wako.\n\nUmeunganishwa pia kwenye VPN, ambayo inaweza kufuatilia shughuli za mtandao wako."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Umeunganishwa kwenye <xliff:g id="APPLICATION">%1$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Umeunganishwa kwenye <xliff:g id="APPLICATION">%1$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Wasifu wako wa kazini unasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Wasifu huu umeunganishwa kwenye <xliff:g id="APPLICATION">%2$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu, na tovuti. \n\nKwa maelezo zaidi, wasiliana na msimamizi wako."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Wasifu wako wa kazini unasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Wasifu huu umeunganishwa kwenye <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, ambayo inaweza kufuatilia mtandao wako wa kazini, ikiwa ni pamoja na barua pepe, programu na tovuti. \n\n Wewe pia umeunganishwa kwenye <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako kibinafsi."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Kifaa chako kinasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>. \n\nMsimamizi wako anaweza kufuatilia na kudhibiti mipangilio, ufikiaji wa kampuni, programu, data inayohusiana na kifaa chako, na maelezo ya mahali kilipo kifaa chako. \n\n Umeuganishwa kwenye <xliff:g id="APPLICATION">%2$s</xliff:g>, ambayo inaweza kufuatilia shughuli ya mtandao wako, ikiwa ni pamoja na barua pepe, programu, na tovuti. \n\n Kwa maelezo zaidi, wasiliana na msimamizi wako."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Kifaa kitaendelea kuwa katika hali ya kufungwa hadi utakapokifungua mwenyewe"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Pata arifa kwa haraka"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Zitazame kabla hujafungua"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Panua"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Kunja"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Skrini imebandikwa"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Utaendelea kuona hali hii hadi utakapobandua. Gusa na ushikilie kipengele cha Nyuma ili kubandua."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Nimeelewa"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Hapana, asante"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Ungependa kuficha <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Itaonekana tena wakati mwingine utakapoiwasha katika mipangilio."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ficha"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> inataka kuwa mazungumzo ya sauti."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Ruhusu"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Kataa"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ni mazungumzo ya sauti"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Gonga ili urejeshe picha ya asili."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Unatumia wasifu wako wa kazini"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Piga simu"</item>
- <item msgid="5997713001067658559">"Mfumo"</item>
- <item msgid="7858983209929864160">"Pete"</item>
- <item msgid="1850038478268896762">"Media"</item>
- <item msgid="8265110906352372092">"Kengele"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Zana za walio na matatizo ya kuona au kusikia"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Piga simu"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Mfumo"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Piga"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Maudhui"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Kengele"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Arifa"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Masafa ya ishara ya kampuni ya simu"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Zana za walio na matatizo ya kuona au kusikia"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Gonga ili urejeshe."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Gonga ili uweke mtetemo. Huenda ikakomesha huduma za zana za walio na matatizo ya kuona au kusikia."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Gonga ili ukomeshe. Huenda ikakomesha huduma za zana za walio na matatizo ya kuona au kusikia."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Mipangilio ya Haraka"</string>
<string name="status_bar" msgid="4877645476959324760">"Sehemu ya kuonyesha hali"</string>
<string name="overview" msgid="4018602013895926956">"Muhtasari"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Hali ya onyesho"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Hali ya onyesho la UI ya mfumo"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Washa hali ya onyesho"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Onyesha hali ya onyesho"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethaneti"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Imewashwa"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Imezimwa"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Ukiwa na udhibiti wa arifa, unaweza kuweka kiwango cha umuhimu wa arifa za programu kuanzia 0 hadi 5. \n\n"<b>"Kiwango cha 5"</b>" \n- Onyesha katika sehemu ya juu ya orodha ya arifa \n- Ruhusu ukatizaji wa skrini nzima \n- Ruhusu arifa za kuchungulia kila wakati\n\n"<b>"Kiwango cha 4"</b>" \n- Zuia ukatizaji wa skrini nzima\n- Ruhusu arifa za kuchungulia kila wakati \n\n"<b>"Kiwango cha 3"</b>" \n- Zuia ukatizaji wa skrini nzima\n- Usiruhusu kamwe arifa za kuchungulia\n\n"<b>"Kiwango cha 2"</b>" \n- Zuia ukatizaji wa skrini nzima\n- Usiruhusu kamwe arifa za kuchungulia \n- Usiruhusu kamwe sauti au mtetemo \n\n"<b>"Kiwango cha 1"</b>" \n- Zuia ukatizaji wa skrini nzima \n- Usiruhusu kamwe arifa za kuchungulia \n- Usiruhusu kamwe sauti na mtetemo \n- Usionyeshe skrini iliyofungwa na sehemu ya arifa \n- Onyesha katika sehemu ya chini ya orodha ya arifa \n\n"<b>"Kiwango cha 0"</b>" \n- Zuia arifa zote kutoka programu"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Umuhimu wa Arifa: Kiotomatiki"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Umuhimu wa Arifa: Kiwango cha 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Umuhimu wa Arifa: Kiwango cha 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Umuhimu wa Arifa: Kiwango cha 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Umuhimu wa Arifa: Kiwango cha 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Umuhimu wa Arifa: Kiwango cha 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Umuhimu wa Arifa: Kiwango cha 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Programu hubaini umuhimu wa kila arifa."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Usionyeshe arifa zozote kutoka programu hii."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Usiruhusu ukatizaji wa skrini nzima, arifa za kuchungulia, sauti au mtetemo. Usionyeshe katika skrini iliyofungwa na sehemu ya kuonyesha hali."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Usiruhusu ukatizaji wa skrini nzima, arifa za kuchungulia, sauti au mtetemo."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Usiruhusu arifa za kuchungulia au ukatizaji wa skrini nzima."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Ruhusu arifa za kuchungulia kila wakati. Usiruhusu ukatizaji wa skrini nzima."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Ruhusu arifa za kuchungulia na ukatizaji wa skrini nzima."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Mipangilio zaidi"</string>
<string name="notification_done" msgid="5279426047273930175">"Nimemaliza"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Vidhibiti vya arifa za <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Badilisha orodha ya mipangilio."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Ukurasa wa <xliff:g id="ID_1">%1$d</xliff:g> kati ya <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Panua"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Punguza"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Ondoa"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Joto la simu linaongezeka"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Baadhi ya vipengele havitatumika kwenye simu wakati inapoa"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Simu yako itajaribu kupoa kiotomatiki. Bado unaweza kutumia simu yako, lakini huenda ikafanya kazi polepole. \n\nPindi simu yako itakapopoa, itaendelea kufanya kazi kama kawaida."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ta-rIN-land/strings.xml b/packages/SystemUI/res/values-ta-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-ta-rIN-land/strings.xml
rename to packages/SystemUI/res/values-ta-land/strings.xml
diff --git a/packages/SystemUI/res/values-ta-rTN-land/strings.xml b/packages/SystemUI/res/values-ta-rTN-land/strings.xml
deleted file mode 100644
index 6ad7229..0000000
--- a/packages/SystemUI/res/values-ta-rTN-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"தற்போது திரை நிலைபரப்பு திசையமைப்பில் பூட்டப்பட்டுள்ளது."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ta-rIN/config.xml b/packages/SystemUI/res/values-ta/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-ta-rIN/config.xml
rename to packages/SystemUI/res/values-ta/config.xml
diff --git a/packages/SystemUI/res/values-ta-rIN/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
similarity index 91%
rename from packages/SystemUI/res/values-ta-rIN/strings.xml
rename to packages/SystemUI/res/values-ta/strings.xml
index 60f1d6a..de395b8 100644
--- a/packages/SystemUI/res/values-ta-rIN/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"பேட்டரி சார்ஜ் செய்யப்படுகிறது, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> சதவீதம்."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"கணினி அமைப்பு."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"அறிவிப்புகள்."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"அறிவிப்பு ஓவர்ஃப்ளோ கண்டெய்னர்"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"அறிவிப்பை அழி."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS இயக்கப்பட்டது."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS பெறப்படுகிறது."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"பூட்டுத் திரை."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"அமைப்பு"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"மேலோட்டப் பார்வை."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"மூடு"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"வைஃபை முடக்கப்பட்டது."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"எல்லாவற்றையும் அழி"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"இப்போது தொடங்கு"</string>
<string name="empty_shade_text" msgid="708135716272867002">"அறிவிப்புகள் இல்லை"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"சாதனம் கண்காணிக்கப்படலாம்"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"சுயவிவரம் கண்காணிக்கப்படலாம்"</string>
<string name="vpn_footer" msgid="2388611096129106812">"நெட்வொர்க் கண்காணிக்கப்படலாம்"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"நெட்வொர்க் கண்காணிக்கப்படலாம்"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"சாதனத்தைக் கண்காணித்தல்"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"சுயவிவரத்தைக் கண்காணித்தல்"</string>
<string name="monitoring_title" msgid="169206259253048106">"நெட்வொர்க்கைக் கண்காணித்தல்"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"நெட்வொர்க் பதிவெடுத்தல்"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPNஐ முடக்கு"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPNஐத் துண்டி"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"சாதனத்தை நிர்வகிப்பவர்: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nஉங்கள் நிர்வாகியால் அமைப்புகள், நிறுவன அணுகல், பயன்பாடுகள், சாதனத்துடன் தொடர்புடைய தரவு மற்றும் சாதனத்தின் இருப்பிடத் தகவல் ஆகியவற்றைக் கண்காணிக்கவும் நிர்வகிக்கவும் முடியும். கூடுதல் தகவலுக்கு, நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"உங்கள் சாதனத்தை நிர்வகிப்பது: <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"உங்கள் சாதனத்தை நிர்வகிக்க, <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> பயன்பாட்டை <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> பயன்படுத்தும்."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"உங்கள் நிர்வாகியால் அமைப்புகள், நிறுவன அணுகல், பயன்பாடுகள், சாதனத்துடன் தொடர்புடைய தரவு, சாதன இருப்பிடத் தகவல் ஆகியவற்றைக் கண்காணிக்கவும் நிர்வகிக்கவும் முடியும்."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"மேலும் அறிக"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"<xliff:g id="VPN_APP">%1$s</xliff:g> உடன் இணைக்கப்பட்டுள்ளீர்கள். இந்தப் பயன்பாட்டால் மின்னஞ்சல்கள், பயன்பாடுகள், இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்க முடியும்."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN அமைப்புகளைத் திற"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"உங்கள் நிர்வாகி நெட்வொர்க் பதிவெடுத்தலை இயக்கியுள்ளார், இது சாதனத்தில் ட்ராஃபிக்கைக் கண்காணிக்கும்.\n\nமேலும் தகவலுக்கு, உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"VPN இணைப்பை அமைக்க, பயன்பாட்டிற்கு அனுமதி வழங்கியுள்ளீர்கள்.\n\nஇந்தப் பயன்பாட்டால் மின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் இணையதளங்கள் உட்பட, உங்கள் சாதனத்தையும் நெட்வொர்க் செயல்பாட்டையும் கண்காணிக்க முடியும்."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"சாதனத்தை நிர்வகிப்பவர்: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nஉங்கள் நிர்வாகியால் அமைப்புகள், நிறுவன அணுகல், பயன்பாடுகள், சாதனத்துடன் தொடர்புடைய தரவு மற்றும் சாதனத்தின் இருப்பிடத் தகவல் ஆகியவற்றைக் கண்காணிக்கவும் நிர்வகிக்கவும் முடியும்.\n\nVPN இல் இணைக்கப்பட்டுள்ளதால், மின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் பாதுகாப்பான இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டை கண்காணிக்க முடியும்.\n\nகூடுதல் தகவலுக்கு, நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"உங்கள் பணி சுயவிவரத்தை நிர்வகிப்பது: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nமின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டை நிர்வாகியால் கண்காணிக்க முடியும்.\n\nகூடுதல் தகவலுக்கு, நிர்வாகியைத் தொடர்புகொள்ளவும்.\n\nஉங்கள் நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்கக்கூடிய VPN இலும் இணைக்கப்பட்டுள்ளீர்கள்."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"<xliff:g id="APPLICATION">%1$s</xliff:g> உடன் இணைக்கப்பட்டுள்ளீர்கள். இந்தப் பயன்பாட்டால், மின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்க முடியும்."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"<xliff:g id="APPLICATION">%1$s</xliff:g> உடன் இணைக்கப்பட்டுள்ளீர்கள். இந்தப் பயன்பாட்டால் மின்னஞ்சல்கள், பயன்பாடுகள், இணையதளங்கள் உட்பட உங்கள் தனிப்பட்ட நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்க முடியும்."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"உங்கள் பணி சுயவிவரத்தை <xliff:g id="ORGANIZATION">%1$s</xliff:g> நிர்வகிக்கிறது. <xliff:g id="APPLICATION">%2$s</xliff:g> உடன் இணைக்கப்பட்டதால், மின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் இணையதளங்கள் உட்பட உங்கள் பணியிட நெட்வொர்க் செயல்பாட்டை அதனால் கண்காணிக்க முடியும்.\n\nகூடுதல் தகவலுக்கு, நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"உங்கள் பணி சுயவிவரத்தை <xliff:g id="ORGANIZATION">%1$s</xliff:g> நிர்வகிக்கிறது. <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> உடன் இணைக்கப்பட்டுள்ளதால், மின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் இணையதளங்கள் உட்பட உங்கள் பணியிட நெட்வொர்க் செயல்பாட்டை அதனால் கண்காணிக்க முடியும்.\n\nமேலும் <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> உடன் இணைக்கப்பட்டுள்ளதால், உங்கள் தனிப்பட்ட நெட்வொர்க் செயல்பாட்டையும் அதனால் கண்காணிக்க முடியும்."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"சாதனத்தை நிர்வகிப்பது: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nஉங்கள் நிர்வாகியால் அமைப்புகள், நிறுவன அணுகல், பயன்பாடுகள், சாதனத்துடன் தொடர்புடைய தரவு மற்றும் சாதனத்தின் இருப்பிடத் தகவல் ஆகியவற்றைக் கண்காணிக்கவும் நிர்வகிக்கவும் முடியும்.\n\n<xliff:g id="APPLICATION">%2$s</xliff:g> உடன் இணைக்கப்பட்டதால், மின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டை அதனால் கண்காணிக்க முடியும்.\n\nகூடுதல் தகவலுக்கு, நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"நீங்கள் கைமுறையாகத் திறக்கும் வரை, சாதனம் பூட்டப்பட்டிருக்கும்"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"விரைவாக அறிவிப்புகளைப் பெறுதல்"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"திறக்கும் முன் அவற்றைப் பார்க்கவும்"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"விரிவாக்கு"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"சுருக்கு"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"திரை பொருத்தப்பட்டது"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"பொருத்தியதை விலக்கும் வரை இதைக் காட்சியில் வைக்கும். விலக்க, முந்தையது என்பதைத் தொட்டுப் பிடிக்கவும்."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"புரிந்தது"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"வேண்டாம்"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g>ஐ மறைக்கவா?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"அடுத்த முறை அமைப்புகளில் மீண்டும் இயக்கும்போது, இது மீண்டும் தோன்றும்."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"மறை"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g>, ஒலியளவு செய்தியாகச் செயல்பட விரும்புகிறது."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"அனுமதி"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"நிராகரி"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"ஒலியளவு செய்தி: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"அசலை மீட்டமைக்க, தட்டவும்."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"பணி சுயவிவரத்தைப் பயன்படுத்துகிறீர்கள்"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"அழைப்பு"</item>
- <item msgid="5997713001067658559">"சாதனம்"</item>
- <item msgid="7858983209929864160">"ரிங்"</item>
- <item msgid="1850038478268896762">"மீடியா"</item>
- <item msgid="8265110906352372092">"அலாரம்"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"புளூடூத்"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"அணுகல்தன்மை"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"அழைப்பு"</string>
+ <string name="stream_system" msgid="7493299064422163147">"அமைப்பு"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"ரிங் செய்"</string>
+ <string name="stream_music" msgid="9086982948697544342">"மீடியா"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"அலாரம்"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"அறிவிப்பு"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"புளூடூத்"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"டூயல் டோன் மல்டி ஃப்ரீக்வென்சி"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"அணுகல்தன்மை"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. ஒலி இயக்க, தட்டவும்."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. அதிர்விற்கு அமைக்க, தட்டவும். அணுகல்தன்மை சேவைகள் ஒலியடக்கப்படக்கூடும்."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. ஒலியடக்க, தட்டவும். அணுகல்தன்மை சேவைகள் ஒலியடக்கப்படக்கூடும்."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"உடனடி அமைப்புகள்"</string>
<string name="status_bar" msgid="4877645476959324760">"நிலைப் பட்டி"</string>
<string name="overview" msgid="4018602013895926956">"மேலோட்டப் பார்வை"</string>
- <string name="demo_mode" msgid="2389163018533514619">"டெமோ முறை"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"சிஸ்டம் பயனர் இடைமுக டெமோ பயன்முறை"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"டெமோ முறையை இயக்கு"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"டெமோ முறையைக் காட்டு"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"ஈதர்நெட்"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"இயக்கத்தில்"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"முடக்கத்தில்"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"ஆற்றல்மிக்க அறிவிப்புக் கட்டுப்பாடுகள் மூலம், பயன்பாட்டின் அறிவிப்புகளுக்கு முக்கியத்துவ நிலையை (0-5) அமைக்கலாம். \n\n"<b>"நிலை 5"</b>" \n- அறிவிப்புப் பட்டியலின் மேலே காட்டும் \n- முழுத் திரைக் குறுக்கீட்டை அனுமதிக்கும் \n- எப்போதும் நடப்புத் திரையின் மேல் பகுதியில் அறிவிப்புகளைக் காட்டும் \n\n"<b>"நிலை 4"</b>" \n- முழுத் திரைக் குறுக்கீட்டைத் தடுக்கும் \n- எப்போதும் நடப்புத் திரையின் மேல் பகுதியில் அறிவிப்புகளைக் காட்டும் \n\n"<b>"நிலை 3"</b>" \n- முழுத் திரைக் குறுக்கீட்டைத் தடுக்கும் \n- ஒருபோதும் நடப்புத் திரையின் மேல் பகுதியில் அறிவிப்புகளைக் காட்டாது \n\n"<b>"நிலை 2"</b>" \n- முழுத் திரைக் குறுக்கீட்டைத் தடுக்கும் \n- ஒருபோதும் நடப்புத் திரையின் மேல் பகுதியில் அறிவிப்புகளைக் காட்டாது \n- ஒருபோதும் ஒலி எழுப்பாது, அதிர்வுறாது \n\n"<b>"நிலை 1"</b>" \n- முழுத் திரைக் குறுக்கீட்டைத் தடுக்கும் \n- ஒருபோதும் நடப்புத் திரையின் மேல் பகுதியில் அறிவிப்புகளைக் காட்டாது \n- ஒருபோதும் ஒலி எழுப்பாது அல்லது அதிர்வுறாது \n- பூட்டுத்திரை மற்றும் நிலைப்பட்டியிலிருந்து மறைக்கும் \n- அறிவிப்புகள் பட்டியலின் கீழே காட்டும் \n\n"<b>"நிலை 0"</b>" \n- பயன்பாட்டின் எல்லா அறிவிப்புகளையும் தடுக்கும்"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"முக்கியத்துவம்: தானியங்கு"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"முக்கியத்துவம்: நிலை 0"</string>
- <string name="min_importance" msgid="560779348928574878">"முக்கியத்துவம்: நிலை 1"</string>
- <string name="low_importance" msgid="7571498511534140">"முக்கியத்துவம்: நிலை 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"முக்கியத்துவம்: நிலை 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"முக்கியத்துவம்: நிலை 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"முக்கியத்துவம்: நிலை 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"பயன்பாடானது ஒவ்வொரு அறிவிப்பிற்கும் முக்கியத்துவத்தைத் தீர்மானிக்கும்."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"இந்தப் பயன்பாட்டிலிருந்து ஒருபோதும் அறிவிப்புகளைக் காட்டாதே."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"திரை குறுக்கீடு, அறிவிப்புகள், ஒலி (அ) அதிர்வு வேண்டாம். பூட்டுத் திரை, நிலைப் பட்டியிலிருந்து மறை."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"முழுத் திரைக் குறுக்கீடு, திரையில் அறிவிப்பு காட்டுவது, ஒலி எழுப்புவது (அ) அதிர்வுறுவது வேண்டாம்."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"முழுத் திரைக் குறுக்கீடு வேண்டாம் (அ) நடப்புத் திரையின் மேல் பகுதியில் அறிவிப்பைக் காட்ட வேண்டாம்."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"அறிவிப்புகளை எப்போதும் நடப்புத் திரையின் மேல் பகுதியில் காட்டு. முழுத் திரைக் குறுக்கீடு வேண்டாம்."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"அறிவிப்புகளை எப்போதும் நடப்புத் திரையின் மேல் பகுதியில் காட்டு, முழுத் திரைக் குறுக்கீடுகளை அனுமதி."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"மேலும் அமைப்புகள்"</string>
<string name="notification_done" msgid="5279426047273930175">"முடிந்தது"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> அறிவிப்புக் கட்டுப்பாடுகள்"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"அமைப்புகளின் வரிசை முறையைத் திருத்து."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"பக்கம் <xliff:g id="ID_1">%1$d</xliff:g> / <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"விரி"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"சிறிதாக்கு"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"நிராகரி"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"மொபைல் சூடாகிறது"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"மொபைலின் வெப்ப அளவு குறையும் போது, சில அம்சங்களைப் பயன்படுத்த முடியாது"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"உங்கள் மொபைலின் வெப்ப அளவு தானாகவே குறையும். தொடர்ந்து நீங்கள் மொபைலைப் பயன்படுத்தலாம், ஆனால் அதன் வேகம் குறைவாக இருக்கக்கூடும்.\n\nமொபைலின் வெப்ப அளவு குறைந்தவுடன், அது இயல்பு நிலையில் இயங்கும்."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ta-rIN/strings_car.xml b/packages/SystemUI/res/values-ta/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-ta-rIN/strings_car.xml
rename to packages/SystemUI/res/values-ta/strings_car.xml
diff --git a/packages/SystemUI/res/values-ta-rIN/strings_tv.xml b/packages/SystemUI/res/values-ta/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-ta-rIN/strings_tv.xml
rename to packages/SystemUI/res/values-ta/strings_tv.xml
diff --git a/packages/SystemUI/res/values-te-rAP-land/strings.xml b/packages/SystemUI/res/values-te-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-te-rAP-land/strings.xml
rename to packages/SystemUI/res/values-te-land/strings.xml
diff --git a/packages/SystemUI/res/values-te-rIN-land/strings.xml b/packages/SystemUI/res/values-te-rIN-land/strings.xml
deleted file mode 100644
index cc9de13..0000000
--- a/packages/SystemUI/res/values-te-rIN-land/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"స్క్రీన్ ఇప్పుడు ల్యాండ్స్కేప్ దృగ్విన్యాసంలో లాక్ చేయబడింది."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-te-rIN/config.xml b/packages/SystemUI/res/values-te/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-te-rIN/config.xml
rename to packages/SystemUI/res/values-te/config.xml
diff --git a/packages/SystemUI/res/values-te-rIN/strings.xml b/packages/SystemUI/res/values-te/strings.xml
similarity index 92%
rename from packages/SystemUI/res/values-te-rIN/strings.xml
rename to packages/SystemUI/res/values-te/strings.xml
index f500fc2..2254043 100644
--- a/packages/SystemUI/res/values-te-rIN/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"బ్యాటరీ ఛార్జ్ అవుతోంది, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> శాతం."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"సిస్టమ్ సెట్టింగ్లు."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"నోటిఫికేషన్లు."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"అధిక నోటిఫికేషన్ల కంటైనర్"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"నోటిఫికేషన్ను క్లియర్ చేయండి."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ప్రారంభించబడింది."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPSని పొందడం."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"లాక్ స్క్రీన్."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"సెట్టింగ్లు"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"అవలోకనం."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"మూసివేస్తుంది"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"వైఫై ఆఫ్ చేయబడింది."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"అన్నీ క్లియర్ చేయండి"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"ఇప్పుడే ప్రారంభించు"</string>
<string name="empty_shade_text" msgid="708135716272867002">"నోటిఫికేషన్లు లేవు"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"పరికరం పర్యవేక్షించబడవచ్చు"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"ప్రొఫైల్ని పర్యవేక్షించవచ్చు"</string>
<string name="vpn_footer" msgid="2388611096129106812">"నెట్వర్క్ పర్యవేక్షించబడవచ్చు"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"నెట్వర్క్ పర్యవేక్షించబడవచ్చు"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"పరికర పర్యవేక్షణ"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"ప్రొఫైల్ పర్యవేక్షణ"</string>
<string name="monitoring_title" msgid="169206259253048106">"నెట్వర్క్ పర్యవేక్షణ"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"నెట్వర్క్ లాగింగ్"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPNని నిలిపివేయి"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPNను డిస్కనెక్ట్ చేయి"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"మీ పరికరం <xliff:g id="ORGANIZATION">%1$s</xliff:g> నిర్వహణలో ఉంది.\n\nమీ నిర్వాహకుడు సెట్టింగ్లు, కార్పొరేట్ ప్రాప్యత, అనువర్తనాలు, మీ పరికరంతో అనుబంధించబడిన డేటా మరియు మీ పరికరం స్థాన సమాచారాన్ని పర్యవేక్షించగలరు మరియు నిర్వహించగలరు. మరింత సమాచారం కోసం, మీ నిర్వాహకుడిని సంప్రదించండి."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"మీ పరికరం <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ద్వారా నిర్వహించబడుతోంది."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> మీ పరికరాన్ని నిర్వహించడానికి <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>ని ఉపయోగిస్తుంది."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"మీ నిర్వాహకులు సెట్టింగ్లు, కార్పొరేట్ ప్రాప్యత, అనువర్తనాలు, మీ పరికరం అనుబంధిత డేటా మరియు స్థాన సమాచారం పర్యవేక్షించగలరు మరియు నిర్వహించగలరు."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"మరింత తెలుసుకోండి"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"మీరు <xliff:g id="VPN_APP">%1$s</xliff:g>కి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్లు, అనువర్తనాలు మరియు వెబ్సైట్లతో సహా మీ వ్యక్తిగత నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN సెట్టింగ్లను తెరవండి"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"మీ నిర్వాహకులు మీ పరికరంలో ట్రాఫిక్ను పర్యవేక్షించే నెట్వర్క్ లాగింగ్ను ఆన్ చేసారు.\n\nమరింత సమాచారం కోసం మీ నిర్వాహకులను సంప్రదించండి."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"మీరు VPN కనెక్షన్ సెటప్ చేయడానికి ఒక అనువర్తనానికి అనుమతి ఇచ్చారు.\n\nఈ అనువర్తనం ఇమెయిల్లు, అనువర్తనాలు మరియు వెబ్సైట్లతో సహా మీ పరికరం మరియు నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"మీ పరికరం <xliff:g id="ORGANIZATION">%1$s</xliff:g> నిర్వహణలో ఉంది.\n\nమీ నిర్వాహకుడు సెట్టింగ్లు, కార్పొరేట్ ప్రాప్యత, అనువర్తనాలు, మీ పరికరంతో అనుబంధించబడిన డేటా మరియు పరికరం స్థాన సమాచారాన్ని పర్యవేక్షించగలరు మరియు నిర్వహించగలరు.\n\nమీరు VPNకి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్లు, అనువర్తనాలు మరియు వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకుడిని సంప్రదించండి."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"మీ కార్యాలయ ప్రొఫైల్ను <xliff:g id="ORGANIZATION">%1$s</xliff:g> నిర్వహిస్తోంది.\n\nమీ నిర్వాహకుడు ఇమెయిల్లు, అనువర్తనాలు మరియు వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలరు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకుడిని సంప్రదించండి.\n\nమీరు VPNకి కూడా కనెక్ట్ చేయబడ్డారు, ఇది మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"మీరు <xliff:g id="APPLICATION">%1$s</xliff:g>కి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్లు, అనువర్తనాలు మరియు వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"మీరు <xliff:g id="APPLICATION">%1$s</xliff:g>కి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్లు, అనువర్తనాలు మరియు వెబ్సైట్లతో సహా మీ వ్యక్తిగత నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"మీ కార్యాలయ ప్రొఫైల్ను <xliff:g id="ORGANIZATION">%1$s</xliff:g> నిర్వహిస్తోంది. అలాగే, మీ కార్యాలయ ప్రొఫైల్ <xliff:g id="APPLICATION">%2$s</xliff:g>కి కనెక్ట్ చేయబడింది, ఇది ఇమెయిల్లు, అనువర్తనాలు మరియు వెబ్సైట్లతో సహా మీ కార్యాలయ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకుడిని సంప్రదించండి."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"మీ కార్యాలయ ప్రొఫైల్ను <xliff:g id="ORGANIZATION">%1$s</xliff:g> నిర్వహిస్తోంది. అలాగే, మీ కార్యాలయ ప్రొఫైల్ <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>కి కనెక్ట్ చేయబడింది, ఇది ఇమెయిల్లు, అనువర్తనాలు మరియు వెబ్సైట్లతో సహా మీ కార్యాలయ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు.\n\nమీరు <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>కి కూడా కనెక్ట్ చేయబడ్డారు, ఇది మీ వ్యక్తిగత నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"మీ పరికరాన్ని <xliff:g id="ORGANIZATION">%1$s</xliff:g> నిర్వహిస్తోంది.\n\nమీ నిర్వాహకుడు సెట్టింగ్లను, కార్పొరేట్ ప్రాప్యతను, అనువర్తనాలను, మీ పరికరంతో అనుబంధించిన డేటాను మరియు మీ పరికర స్థాన సమాచారాన్ని పర్యవేక్షించగలరు మరియు నిర్వహించగలరు.\n\nమీరు <xliff:g id="APPLICATION">%2$s</xliff:g>కి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్లు, అనువర్తనాలు మరియు వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకుడిని సంప్రదించండి."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"మీరు మాన్యువల్గా అన్లాక్ చేస్తే మినహా పరికరం లాక్ చేయబడి ఉంటుంది"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"నోటిఫికేషన్లను వేగంగా పొందండి"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"వీటిని మీరు అన్లాక్ చేయకముందే చూడండి"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"విస్తరింపజేయండి"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"కుదించండి"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"స్క్రీన్ పిన్ చేయబడింది"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"ఇలా చేయడం వలన మీరు అన్పిన్ చేసే వరకు ఇది వీక్షణలో ఉంచబడుతుంది. అన్పిన్ చేయడానికి వెనుకకు తాకి, అలాగే పట్టుకోండి."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"అర్థమైంది"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"వద్దు, ధన్యవాదాలు"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g>ని దాచాలా?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"మీరు సెట్టింగ్ల్లో దీన్ని ఆన్ చేసిన తదుపరిసారి ఇది కనిపిస్తుంది."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"దాచు"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> అనేది వాల్యూమ్ డైలాగ్గా ఉండాలనుకుంటోంది."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"అనుమతించు"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"తిరస్కరించు"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> అనేది వాల్యూమ్ డైలాగ్"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"అసలు దాన్ని పునరుద్ధరించడానికి నొక్కండి."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"మీరు మీ కార్యాలయ ప్రొఫైల్ను ఉపయోగిస్తున్నారు"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"కాల్"</item>
- <item msgid="5997713001067658559">"సిస్టమ్"</item>
- <item msgid="7858983209929864160">"రింగ్"</item>
- <item msgid="1850038478268896762">"మీడియా"</item>
- <item msgid="8265110906352372092">"అలారం"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"బ్లూటూత్"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"ప్రాప్యత"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"కాల్"</string>
+ <string name="stream_system" msgid="7493299064422163147">"సిస్టమ్"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"రింగ్"</string>
+ <string name="stream_music" msgid="9086982948697544342">"మీడియా"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"అలారం"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"నోటిఫికేషన్"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"బ్లూటూత్"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"డ్యూయల్ మల్టీ టోన్ ఫ్రీక్వెన్సీ"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"ప్రాప్యత"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. అన్మ్యూట్ చేయడానికి నొక్కండి."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. వైబ్రేషన్కు సెట్ చేయడానికి నొక్కండి. ప్రాప్యత సేవలు మ్యూట్ చేయబడవచ్చు."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. మ్యూట్ చేయడానికి నొక్కండి. ప్రాప్యత సేవలు మ్యూట్ చేయబడవచ్చు."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"శీఘ్ర సెట్టింగ్లు"</string>
<string name="status_bar" msgid="4877645476959324760">"స్థితి పట్టీ"</string>
<string name="overview" msgid="4018602013895926956">"స్థూలదృష్టి"</string>
- <string name="demo_mode" msgid="2389163018533514619">"డెమో మోడ్"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"సిస్టమ్ UI డెమో మోడ్"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"డెమో మోడ్ ప్రారంభించండి"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"డెమో మోడ్ చూపు"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"ఈథర్నెట్"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"ఆన్లో ఉన్నాయి"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"ఆఫ్లో ఉన్నాయి"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"పవర్ నోటిఫికేషన్ నియంత్రణలతో, మీరు అనువర్తన నోటిఫికేషన్ల కోసం ప్రాముఖ్యత స్థాయిని 0 నుండి 5 వరకు సెట్ చేయవచ్చు. \n\n"<b>"స్థాయి 5"</b>" \n- నోటిఫికేషన్ జాబితా పైభాగంలో చూపబడతాయి \n- పూర్తి స్క్రీన్ అంతరాయం అనుమతించబడుతుంది \n- ఎల్లప్పుడూ త్వరిత వీక్షణ అందించబడుతుంది \n\n"<b>"స్థాయి 4"</b>" \n- పూర్తి స్క్రీన్ అంతరాయం నిరోధించబడుతుంది \n- ఎల్లప్పుడూ త్వరిత వీక్షణ అందించబడుతుంది \n\n"<b>"స్థాయి 3"</b>" \n- పూర్తి స్క్రీన్ అంతరాయం నిరోధించబడుతుంది \n- ఎప్పుడూ త్వరిత వీక్షణ అందించబడదు \n\n"<b>"స్థాయి 2"</b>" \n- పూర్తి స్క్రీన్ అంతరాయం నిరోధించబడుతుంది \n- ఎప్పుడూ త్వరిత వీక్షణ అందించబడదు \n- ఎప్పుడూ శబ్దం మరియు వైబ్రేషన్ చేయవు \n\n"<b>"స్థాయి 1"</b>" \n- పూర్తి స్క్రీన్ అంతరాయం నిరోధించబడుతుంది \n- ఎప్పుడూ త్వరిత వీక్షణ అందించబడదు \n- ఎప్పుడూ శబ్దం లేదా వైబ్రేట్ చేయవు \n- లాక్ స్క్రీన్ మరియు స్థితి పట్టీ నుండి దాచబడతాయి \n- నోటిఫికేషన్ జాబితా దిగువ భాగంలో చూపబడతాయి \n\n"<b>"స్థాయి 0"</b>" \n- అనువర్తనం నుండి అన్ని నోటిఫికేషన్లు బ్లాక్ చేయబడతాయి"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"ప్రాముఖ్యత: స్వయంచాలకం"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"ప్రాముఖ్యత: స్థాయి 0"</string>
- <string name="min_importance" msgid="560779348928574878">"ప్రాముఖ్యత: స్థాయి 1"</string>
- <string name="low_importance" msgid="7571498511534140">"ప్రాముఖ్యత: స్థాయి 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"ప్రాముఖ్యత: స్థాయి 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"ప్రాముఖ్యత: స్థాయి 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"ప్రాముఖ్యత: స్థాయి 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"అనువర్తనం ప్రతీ నోటిఫికేషన్ ప్రాముఖ్యతను నిశ్చయిస్తుంది."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"ఈ అనువర్తనం నుండి నోటిఫికేషన్లను ఎప్పుడూ చూపదు."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"పూర్తిస్క్రీన్ అంతరాయం,త్వరితవీక్షణ,శబ్దం,వైబ్రేషన్ఉండవు. లాక్ స్క్రీన్,స్థితిపట్టీ నుండి దాచబడతాయి."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"పూర్తి స్క్రీన్ అంతరాయం, త్వరిత వీక్షణ, శబ్దం లేదా వైబ్రేషన్ ఉండవు."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"పూర్తి స్క్రీన్ అంతరాయం లేదా త్వరిత వీక్షణ ఉండదు."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"ఎల్లప్పుడూ త్వరిత వీక్షణ అందించబడుతుంది. పూర్తి స్క్రీన్ అంతరాయం ఉండదు."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"ఎల్లప్పుడూ త్వరిత వీక్షణ మరియు పూర్తి స్క్రీన్ అంతరాయం అనుమతించబడతాయి."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"మరిన్ని సెట్టింగ్లు"</string>
<string name="notification_done" msgid="5279426047273930175">"పూర్తయింది"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> నోటిఫికేషన్ నియంత్రణలు"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"సెట్టింగ్ల క్రమాన్ని సవరించండి."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_2">%2$d</xliff:g>లో <xliff:g id="ID_1">%1$d</xliff:g>వ పేజీ"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"విస్తరింపజేయి"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"కనిష్టీకరించు"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"తీసివేయి"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"ఫోన్ వేడెక్కుతోంది"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"ఫోన్ను చల్లబరిచే క్రమంలో కొన్ని లక్షణాలు పరిమితం చేయబడ్డాయి"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"మీ ఫోన్ స్వయంచాలకంగా చల్లబడటానికి ప్రయత్నిస్తుంది. మీరు ఇప్పటికీ మీ ఫోన్ను ఉపయోగించవచ్చు, కానీ దాని పనితీరు నెమ్మదిగా ఉండవచ్చు.\n\nమీ ఫోన్ చల్లబడిన తర్వాత, అది సాధారణ రీతిలో పని చేస్తుంది."</string>
</resources>
diff --git a/packages/SystemUI/res/values-te-rIN/strings_car.xml b/packages/SystemUI/res/values-te/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-te-rIN/strings_car.xml
rename to packages/SystemUI/res/values-te/strings_car.xml
diff --git a/packages/SystemUI/res/values-te-rIN/strings_tv.xml b/packages/SystemUI/res/values-te/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-te-rIN/strings_tv.xml
rename to packages/SystemUI/res/values-te/strings_tv.xml
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index e4d39b7..258ccf6 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"กำลังชาร์จแบตเตอรี่ <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> เปอร์เซ็นต์"</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"การตั้งค่าระบบ"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"การแจ้งเตือน"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"คอนเทนเนอร์รายการเพิ่มเติมของการแจ้งเตือน"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"ล้างการแจ้งเตือน"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"เปิดใช้งาน GPS แล้ว"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"การดึงข้อมูล GPS"</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ล็อกหน้าจอ"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"การตั้งค่า"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"ภาพรวม"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"ปิด"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>"</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"ปิด Wi-Fi แล้ว"</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"ล้างทั้งหมด"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"เริ่มเลย"</string>
<string name="empty_shade_text" msgid="708135716272867002">"ไม่มีการแจ้งเตือน"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"อาจมีการตรวจสอบอุปกรณ์"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"อาจมีการตรวจสอบโปรไฟล์"</string>
<string name="vpn_footer" msgid="2388611096129106812">"เครือข่ายอาจได้รับการตรวจสอบ"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"เครือข่ายอาจถูกตรวจสอบ"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"การตรวจสอบอุปกรณ์"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"การตรวจสอบโปรไฟล์"</string>
<string name="monitoring_title" msgid="169206259253048106">"การตรวจสอบเครือข่าย"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"การทำบันทึกเครือข่าย"</string>
<string name="disable_vpn" msgid="4435534311510272506">"ปิดใช้ VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"ยกเลิกการเชื่อมต่อ VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"อุปกรณ์ของคุณได้รับการจัดการโดย <xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nผู้ดูแลระบบสามารถตรวจสอบและจัดการการตั้งค่า การเข้าถึงของบริษัท แอป ข้อมูลที่เชื่อมโยงกับอุปกรณ์ของคุณ และข้อมูลตำแหน่งของอุปกรณ์ สำหรับข้อมูลเพิ่มเติม โปรดติดต่อผู้ดูแลระบบ"</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"อุปกรณ์ของคุณได้รับการจัดการโดย <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>"</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ใช้ <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> เพื่อจัดการอุปกรณ์"</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"ผู้ดูแลระบบของคุณสามารถตรวจสอบและจัดการการตั้งค่า การเข้าถึงของบริษัท แอป และข้อมูลที่เชื่อมโยงกับอุปกรณ์ และข้อมูลตำแหน่งของอุปกรณ์ด้วย"</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"เรียนรู้เพิ่มเติม"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"คุณเชื่อมต่อกับ <xliff:g id="VPN_APP">%1$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายของคุณ รวมถึงอีเมล แอป และเว็บไซต์ได้"</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"เปิดการตั้งค่า VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"ผู้ดูแลระบบของคุณเปิดการทำบันทึกเครือข่าย ซึ่งจะติดตามดูการรับส่งข้อมูลบนอุปกรณ์ \n\nหากต้องการข้อมูลเพิ่มเติม ให้ติดต่อผู้ดูแลระบบของคุณ"</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"คุณได้ให้สิทธิ์แอปในการตั้งค่าการเชื่อมต่อ VPN\n\nแอปนี้จะสามารถตรวจสอบอุปกรณ์และกิจกรรมในเครือข่าย รวมถึงอีเมล แอป และเว็บไซต์ได้"</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"อุปกรณ์ของคุณได้รับการจัดการโดย <xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nผู้ดูแลระบบสามารถตรวจสอบและจัดการการตั้งค่า การเข้าถึงของบริษัท แอป ข้อมูลที่เชื่อมโยงกับอุปกรณ์ของคุณ และข้อมูลตำแหน่งของอุปกรณ์\n\nคุณยังได้เชื่อมต่อกับ VPN ซึ่งสามารถตรวจสอบกิจกรรมเครือข่ายของคุณ รวมถึง อีเมล แอป และเว็บไซต์\n\nสำหรับข้อมูลเพิ่มเติม โปรดติดต่อผู้ดูแลระบบ"</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"โปรไฟล์งานได้รับการจัดการโดย <xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nผู้ดูแลระบบของคุณสามารถตรวจสอบกิจกรรมในเครือข่ายรวมถึงอีเมล แอป และเว็บไซต์ได้\n\nสำหรับข้อมูลเพิ่มเติม โปรดติดต่อผู้ดูแลระบบ\n\nนอกจากนี้คุณยังมีการเชื่อมต่อ VPN ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายของคุณ"</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"คุณเชื่อมต่อกับ <xliff:g id="APPLICATION">%1$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายของคุณ รวมถึงอีเมล แอป และเว็บไซต์ได้"</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"คุณเชื่อมต่อกับ <xliff:g id="APPLICATION">%1$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายส่วนตัวของคุณ รวมถึงอีเมล แอป และเว็บไซต์ได้"</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"โปรไฟล์งานได้รับการจัดการโดย <xliff:g id="ORGANIZATION">%1$s</xliff:g> โดยมีการเชื่อมต่อกับ <xliff:g id="APPLICATION">%2$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่าย รวมถึงอีเมล แอป และเว็บไซต์ได้\n\nสำหรับข้อมูลเพิ่มเติม โปรดติดต่อผู้ดูแลระบบ"</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"โปรไฟล์งานได้รับการจัดการโดย <xliff:g id="ORGANIZATION">%1$s</xliff:g> โดยมีการเชื่อมต่อกับ <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่าย รวมถึงอีเมล แอป และเว็บไซต์ได้\n\nนอกจากนี้ คุณยังเชื่อมต่อกับ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายส่วนตัวได้"</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"อุปกรณ์ได้รับการจัดการโดย <xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nผู้ดูและรบบของคุณสามารถตรวจสอบและจัดการการตั้งค่า การเข้าถึงของบริษัท แอป ข้อมูลที่เชื่อมโยงกับอุปกรณ์ และข้อมูลตำแหน่งของอุปกรณ์ได้\n\nคุณมีการเชื่อมต่อกับ <xliff:g id="APPLICATION">%2$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายรวมถึงอีเมล แอป และเว็บไซต์ได้\n\nสำหรับข้อมูลเพิ่มเติม โปรดติดต่อผู้ดูแลระบบ"</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"อุปกรณ์จะล็อกจนกว่าคุณจะปลดล็อกด้วยตนเอง"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"รับการแจ้งเตือนเร็วขึ้น"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"ดูก่อนปลดล็อก"</string>
@@ -430,31 +440,23 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"ขยาย"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"ยุบ"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"ตรึงหน้าจอแล้ว"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"การดำเนินการนี้จะแสดงหน้าจอนี้ไว้เสมอจนกว่าคุณจะเลิกตรึง แตะ \"กลับ\" ค้างไว้เพื่อเลิกตรึง"</string>
+ <string name="screen_pinning_description" msgid="8909878447196419623">"การดำเนินการนี้จะแสดงหน้าจอนี้ไว้เสมอจนกว่าคุณจะเลิกตรึง แตะ \"กลับ\" และ \"ภาพรวม\" ค้างไว้เพื่อเลิกตรึง"</string>
+ <string name="screen_pinning_description_accessible" msgid="426190689254018656">"การดำเนินการนี้จะแสดงหน้าจอนี้ไว้เสมอจนกว่าคุณจะเลิกตรึง แตะ \"ภาพรวม\" ค้างไว้เพื่อเลิกตรึง"</string>
<string name="screen_pinning_positive" msgid="3783985798366751226">"รับทราบ"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"ไม่เป็นไร ขอบคุณ"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"ซ่อน <xliff:g id="TILE_LABEL">%1$s</xliff:g> ไหม"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"จะปรากฏอีกครั้งเมื่อคุณเปิดใช้ในการตั้งค่าครั้งถัดไป"</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"ซ่อน"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ต้องการเป็่นช่องโต้ตอบระดับเสียง"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"อนุญาต"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"ปฏิเสธ"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> เป็นช่องโต้ตอบระดับเสียง"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"แตะเพื่อคืนค่าเป็นค่าเดิม"</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"คุณกำลังใช้โปรไฟล์งานของคุณ"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"โทร"</item>
- <item msgid="5997713001067658559">"ระบบ"</item>
- <item msgid="7858983209929864160">"ทำให้ส่งเสียง"</item>
- <item msgid="1850038478268896762">"สื่อ"</item>
- <item msgid="8265110906352372092">"การปลุก"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"บลูทูธ"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"การเข้าถึง"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"การโทร"</string>
+ <string name="stream_system" msgid="7493299064422163147">"ระบบ"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"เสียงเรียกเข้า"</string>
+ <string name="stream_music" msgid="9086982948697544342">"สื่อ"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"การปลุก"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"การแจ้งเตือน"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"บลูทูธ"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"การส่งสัญญาณเสียงแบบ 2 เสียงพร้อมกัน"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"การเข้าถึง"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s แตะเพื่อเปิดเสียง"</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s แตะเพื่อตั้งค่าให้สั่น อาจมีการปิดเสียงบริการการเข้าถึง"</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s แตะเพื่อปิดเสียง อาจมีการปิดเสียงบริการการเข้าถึง"</string>
@@ -466,7 +468,7 @@
<string name="quick_settings" msgid="10042998191725428">"การตั้งค่าด่วน"</string>
<string name="status_bar" msgid="4877645476959324760">"แถบสถานะ"</string>
<string name="overview" msgid="4018602013895926956">"ภาพรวม"</string>
- <string name="demo_mode" msgid="2389163018533514619">"โหมดสาธิต"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"โหมดสาธิต UI ของระบบ"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"เปิดใช้โหมดสาธิต"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"แสดงโหมดสาธิต"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"อีเทอร์เน็ต"</string>
@@ -506,20 +508,17 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"เปิด"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"ปิด"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"ส่วนควบคุมการแจ้งเตือนแบบเปิด/ปิดช่วยให้คุณตั้งค่าระดับความสำคัญสำหรับการแจ้งเตือนของแอปได้ตั้งแต่ระดับ 0-5 \n\n"<b>"ระดับ 5"</b>" \n- แสดงที่ด้านบนของรายการแจ้งเตือน \n- อนุญาตให้รบกวนแบบเต็มหน้าจอ \n- อนุญาตให้แสดงชั่วครู่ \n\n"<b>"ระดับ 4"</b>" \n- ป้องกันการรบกวนแบบเต็มหน้าจอ \n- แสดงชั่วครู่เสมอ \n\n"<b>"ระดับ 3"</b>" \n- ป้องกันการรบกวนแบบเต็มหน้าจอ \n- ไม่แสดงชั่วครู่เลย \n\n"<b>"ระดับ 2"</b>" \n- ป้องกันการรบกวนแบบเต็มหน้าจอ \n- ไม่แสดงชั่วครู่เลย \n- ไม่ส่งเสียงหรือสั่นเลย \n\n"<b>"ระดับ 1"</b>" \n- ป้องกันการรบกวนแบบเต็มหน้าจอ \n- ไม่แสดงชั่วครู่เลย \n- ไม่ส่งเสียงหรือสั่นเลย \n- ซ่อนจากหน้าจอล็อกและแถบสถานะ \n- แสดงที่ด้านล่างของรายการแจ้งเตือน \n\n"<b>"ระดับ 0"</b>" \n- บล็อกการแจ้งเตือนทั้งหมดจากแอป"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"ความสำคัญ: อัตโนมัติ"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"ความสำคัญ: ระดับ 0"</string>
- <string name="min_importance" msgid="560779348928574878">"ความสำคัญ: ระดับ 1"</string>
- <string name="low_importance" msgid="7571498511534140">"ความสำคัญ: ระดับ 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"ความสำคัญ: ระดับ 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"ความสำคัญ: ระดับ 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"ความสำคัญ: ระดับ 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"แอปกำหนดความสำคัญของการแจ้งเตือนแต่ละรายการ"</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"ไม่ต้องแสดงการแจ้งเตือนจากแอปนี้"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"ไม่มีการรบกวนแบบเต็มหน้าจอ แสดงชั่วครู่ มีเสียง หรือสั่น ซ่อนจากหน้าจอล็อกและแถบสถานะ"</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"ไม่มีการรบกวนแบบเต็มหน้าจอ แสดงชั่วครู่ มีเสียง หรือสั่น"</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"ไม่มีการรบกวนแบบเต็มหน้าจอหรือการแสดงชั่วครู่"</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"แสดงชั่วครู่เสมอ ไม่มีการรบกวนแบบเต็มหน้าจอ"</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"แสดงชั่วครู่เสมอ และรบกวนแบบเต็มหน้าจอได้"</string>
+ <string name="notification_header_default_channel" msgid="7506845022070889909">"การแจ้งเตือน"</string>
+ <string name="notification_channel_disabled" msgid="5805874247999578073">"คุณจะไม่ได้รับการแจ้งเตือนเหล่านี้อีก"</string>
+ <string name="notification_importance_header_app" msgid="3572576545406258751">"การแจ้งเตือนของ <xliff:g id="APP">%s</xliff:g> สำหรับ"</string>
+ <string name="min_importance" msgid="7559703098688382595">"ต่ำ"</string>
+ <string name="low_importance" msgid="6891335321576225228">"ปานกลาง"</string>
+ <string name="default_importance" msgid="6400766013567512061">"สูง"</string>
+ <string name="high_importance" msgid="730741630855788381">"ด่วน"</string>
+ <string name="notification_importance_min" msgid="3237794091374404537">"ไม่มีภาพหรือเสียงรบกวน"</string>
+ <string name="notification_importance_low" msgid="8929105501798019743">"แสดงโดยไม่ส่งเสียง"</string>
+ <string name="notification_importance_default" msgid="9025125660733917469">"ส่งเสียง"</string>
+ <string name="notification_importance_high" msgid="3316555356062640222">"ส่งเสียงและแสดงบนหน้าจอ"</string>
<string name="notification_more_settings" msgid="816306283396553571">"การตั้งค่าเพิ่มเติม"</string>
<string name="notification_done" msgid="5279426047273930175">"เสร็จสิ้น"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"ส่วนควบคุมการแจ้งเตือนของ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -652,4 +651,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"แก้ไขลำดับการตั้งค่า"</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"หน้า <xliff:g id="ID_1">%1$d</xliff:g> จาก <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"ขยาย"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"ย่อเล็กสุด"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"ปิด"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"โทรศัพท์เริ่มเครื่องร้อน"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"คุณลักษณะบางอย่างจะใช้งานได้จำกัดขณะโทรศัพท์ลดอุณหภูมิลง"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"โทรศัพท์จะพยายามลดอุณหภูมิลงโดยอัตโนมัติ คุณยังสามารถใช้โทรศัพท์ได้ แต่โทรศัพท์อาจทำงานช้าลง\n\nโทรศัพท์จะทำงานตามปกติเมื่อเย็นลงแล้ว"</string>
</resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index de81f71..c156a8e 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Nagcha-charge ang baterya, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> (na) porsyento."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Mga setting ng system."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Mga Notification."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Container ng pag-overflow ng notification"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"I-clear ang notification."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"Pinapagana ang GPS."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Kumukuha ng GPS."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Lock screen."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Mga Setting"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Overview"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Isara"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Na-off ang wifi."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"I-clear lahat"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Magsimula ngayon"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Walang mga notification"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Maaaring subaybayan ang device"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Maaaring subaybayan ang profile"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Maaaring sinusubaybayan ang network"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Maaaring sinusubaybayan ang network"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Pagsubaybay sa device"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Pagsubaybay sa Profile"</string>
<string name="monitoring_title" msgid="169206259253048106">"Pagsubaybay sa network"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Pag-log sa Network"</string>
<string name="disable_vpn" msgid="4435534311510272506">"I-disable ang VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Idiskonekta ang VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Pinapamahalaan ang iyong device ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nMagagawa ng iyong administrator na subaybayan at pamahalaan ang iyong mga setting, corporate na access, mga app, data na nauugnay sa iyong device at ang impormasyon ng lokasyon ng iyong device. Para sa higit pang impormasyon, makipag-ugnayan sa iyong administrator."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Pinamamahalaan ng <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ang iyong device."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"Ginagamit ng <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ang <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> upang pamahalaan ang iyong device."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Masusubaybayan at mapapamahalaan ng admin mo ang mga setting, pangkorporasyong access, app, data sa device at impormasyon ng lokasyon ng device mo."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Matuto pa"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Kumonekta ka sa <xliff:g id="VPN_APP">%1$s</xliff:g>, na maaaring sumubaybay sa iyong aktibidad sa network, kasama ang mga email, app at website."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Buksan ang Mga Setting ng VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Na-on ng iyong admin ang pag-log sa network, na sumusubaybay sa trapiko sa device mo.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong admin."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Nagbigay ka ng pahintulot sa app upang mag-set up ng VPN na koneksyon.\n\nMaaaring subaybayan ng app na ito ang iyong aktibidad sa device at network, kabilang ang mga email, app at website."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Pinapamahalaan ang iyong device ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nMagagawa ng iyong administrator na subaybayan at pamahalaan ang iyong mga setting, corporate na access, mga app, data na nauugnay sa iyong device at ang impormasyon ng lokasyon ng iyong device.\n\nNakakonekta ka sa isang VPN, na maaaring subaybayan ang iyong aktibidad sa network, kasama ang mga email, app at website.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong administrator."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Pinapamahalaan ang iyong profile ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nMay kakayahan ang iyong administrator sa pagsubaybay ng iyong aktibidad sa network kabilang ang mga email, app at website.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong administrator.\n\nNakakonekta ka rin sa isang VPN, na maaaring sumubaybay sa iyong aktibidad sa network."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Nakakonekta ka sa <xliff:g id="APPLICATION">%1$s</xliff:g>, na maaaring sumubaybay sa iyong aktibidad sa network kabilang ang mga email, app at website."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Nakakonekta ka sa <xliff:g id="APPLICATION">%1$s</xliff:g>, na maaaring sumubaybay sa aktibidad sa iyong personal na network, kabilang ang mga email, app at website."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Ang iyong profile sa trabaho ay pinapamahalaan ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Nakakonekta ito sa <xliff:g id="APPLICATION">%2$s</xliff:g>, na maaaring sumubaybay sa iyong aktibidad sa network, kabilang ang mga email, app at website.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong administrator."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Ang iyong profile sa trabaho ay pinapamahalaan ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Nakakonekta ito sa <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, na maaaring sumubaybay sa iyong aktibidad sa network, kabilang ang mga email, app at website.\n\nNakakonekta ka rin sa <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, na maaaring sumubaybay sa iyong personal na aktibidad sa network."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Pinapamahalaan ang iyong device ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nMaaaring subaybayan at pamahalaan ng iyong administrator ang mga setting, corporate na access, app, data na nauugnay sa iyong device at ang impormasyon ng lokasyon ng iyong device.\n\nNakakonekta ka sa <xliff:g id="APPLICATION">%2$s</xliff:g>, na maaaring subaybayan ang iyong aktibidad sa network, kabilang ang mga email, app at website.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong administrator."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Mananatiling naka-lock ang device hanggang sa manu-mano mong i-unlock"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Kunin ang notification nang mas mabilis"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Tingnan ang mga ito bago ka mag-unlock"</string>
@@ -430,31 +440,23 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Palawakin"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"I-collapse"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Naka-pin ang screen"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Pinapanatili nitong nakikita ito hanggang sa mag-unpin ka. Pindutin nang matagal ang Bumalik upang mag-unpin."</string>
+ <string name="screen_pinning_description" msgid="8909878447196419623">"Pinapanatili nitong nakikita ito hanggang sa mag-unpin ka. Pindutin nang matagal ang Bumalik at Overview upang mag-unpin."</string>
+ <string name="screen_pinning_description_accessible" msgid="426190689254018656">"Pinapanatili nitong nakikita ito hanggang sa mag-unpin ka. Pindutin nang matagal ang Overview upang mag-unpin."</string>
<string name="screen_pinning_positive" msgid="3783985798366751226">"Nakuha ko"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Hindi, salamat na lang"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Itago ang <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Lalabas itong muli sa susunod na pagkakataon na i-on mo ito sa mga setting."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Itago"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"Gusto ng <xliff:g id="APP_NAME">%1$s</xliff:g> na maging volume dialog."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Payagan"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Tanggihan"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"Ang <xliff:g id="APP_NAME">%1$s</xliff:g> ang volume dialog"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"I-tap upang i-restore ang orihinal."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Ginagamit mo ang iyong profile sa trabaho"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Tawag"</item>
- <item msgid="5997713001067658559">"System"</item>
- <item msgid="7858983209929864160">"Ipa-ring"</item>
- <item msgid="1850038478268896762">"Media"</item>
- <item msgid="8265110906352372092">"Alarm"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Pagiging Naa-access"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Tumawag"</string>
+ <string name="stream_system" msgid="7493299064422163147">"System"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Ipa-ring"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Media"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarm"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Notification"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Dual multi tone frequency"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Pagiging Naa-access"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. I-tap upang i-unmute."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. I-tap upang itakda na mag-vibrate. Maaaring i-mute ang mga serbisyo sa Accessibility."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. I-tap upang i-mute. Maaaring i-mute ang mga serbisyo sa Accessibility."</string>
@@ -466,7 +468,7 @@
<string name="quick_settings" msgid="10042998191725428">"Mga Maikling Setting"</string>
<string name="status_bar" msgid="4877645476959324760">"Status bar"</string>
<string name="overview" msgid="4018602013895926956">"Pangkalahatang-ideya"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Demo mode"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Demo mode ng System UI"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"I-enable ang demo mode"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Ipakita ang demo mode"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +508,17 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Naka-on"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Naka-off"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Sa pamamagitan ng mga kontrol sa notification ng power, magagawa mong itakda ang antas ng kahalagahan ng mga notification ng isang app mula 0 hanggang 5. \n\n"<b>"Antas 5"</b>" \n- Ipakita sa itaas ng listahan ng notification \n- Payagan ang pag-istorbo kapag full screen \n- Palaging sumilip \n\n"<b>"Antas 4"</b>" \n- Pigilan ang pag-istorbo kapag full screen \n- Palaging sumilip \n\n"<b>"Antas 3"</b>" \n- Pigilan ang pag-istorbo kapag full screen \n- Huwag kailanman sumilip \n\n"<b>"Antas 2"</b>" \n- Pigilan ang pag-istorbo kapag full screen \n- Huwag kailanman sumilip \n- Huwag kailanman tumunog o mag-vibrate \n\n"<b>"Antas 1"</b>" \n- Pigilan ang pag-istorbo kapag full screen \n- Huwag kailanman sumilip \n- Huwag kailanman tumunog o mag-vibrate \n- Itago sa lock screen at status bar \n- Ipakita sa ibaba ng listahan ng notification \n\n"<b>"Antas 0"</b>" \n- I-block ang lahat ng notification mula sa app"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Kahalagahan: Awtomatiko"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Kahalagahan: Antas 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Kahalagahan: Antas 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Kahalagahan: Antas 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Kahalagahan: Antas 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Kahalagahan: Antas 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Kahalagahan: Antas 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Tinutukoy ng app ang kahalagahan ng bawat notification."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Huwag kailanman magpakita ng mga notification mula sa app na ito."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Walang pag-istorbo, pagsilip, pagtunog o pag-vibrate kapag full screen. Itago sa lock screen at status bar."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Walang pag-istorbo, pagsilip, pagtunog o pag-vibrate kapag full screen."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Walang pag-istorbo o pagsilip kapag full screen."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Palaging sumilip. Walang pag-istorbo kapag full screen."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Palaging sumilip at payagan ang pag-antala sa full screen."</string>
+ <string name="notification_header_default_channel" msgid="7506845022070889909">"Mga Notification"</string>
+ <string name="notification_channel_disabled" msgid="5805874247999578073">"Hindi mo na matatanggap ang mga notification na ito."</string>
+ <string name="notification_importance_header_app" msgid="3572576545406258751">"Mga notification ng <xliff:g id="APP">%s</xliff:g> para sa"</string>
+ <string name="min_importance" msgid="7559703098688382595">"Mababa"</string>
+ <string name="low_importance" msgid="6891335321576225228">"Katamtaman"</string>
+ <string name="default_importance" msgid="6400766013567512061">"Mataas"</string>
+ <string name="high_importance" msgid="730741630855788381">"Kinakailangan"</string>
+ <string name="notification_importance_min" msgid="3237794091374404537">"Walang tunog o visual na pag-abala"</string>
+ <string name="notification_importance_low" msgid="8929105501798019743">"Ipakita nang tahimik"</string>
+ <string name="notification_importance_default" msgid="9025125660733917469">"Gumawa ng tunog"</string>
+ <string name="notification_importance_high" msgid="3316555356062640222">"Gumawa ng tunog at mag-pop up sa screen"</string>
<string name="notification_more_settings" msgid="816306283396553571">"Higit pang mga setting"</string>
<string name="notification_done" msgid="5279426047273930175">"Tapos Na"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Mga kontrol sa notification ng <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -652,4 +651,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"I-edit ang pagkakasunud-sunod ng mga setting."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Page <xliff:g id="ID_1">%1$d</xliff:g> ng <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Palawakin"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"I-minimize"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"I-dismiss"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Umiinit ang telepono"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Limitado ang ilang feature habang nagku-cool down ang telepono"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Awtomatikong susubukan ng iyong telepono na mag-cool down. Magagamit mo pa rin ang iyong telepono, ngunit maaaring mas mabagal ang paggana nito.\n\nKapag nakapag-cool down na ang iyong telepono, gagana na ito nang normal."</string>
</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index c6e4909..e5dddbe 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Pil şarj oluyor, yüzde <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g>."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Sistem ayarları."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Bildirimler."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Bildirim taşma kapsayıcısı"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Bildirimi temizle."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS etkin."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS alınıyor."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Kilit ekranı"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Ayarlar"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Genel Bakış."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Kapat"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Kablosuz kapatıldı."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Tümünü temizle"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Şimdi başlat"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Bildirim yok"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Cihaz izlenebilir"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil izlenebilir"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Ağ etkinliği izlenebilir"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Ağ etkinliği izlenebilir"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Cihaz izleme"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profil izleme"</string>
<string name="monitoring_title" msgid="169206259253048106">"Ağ izleme"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Ağ Günlük Kaydı"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN\'yi devre dışı bırak"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN bağlantısını kes"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Cihazınız <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor.\n\nYöneticiniz; cihazınızla ilişkilendirilen ayarları, şirket erişimini, uygulamaları, verileri izleyebilir ve yönetebilir. Daha fazla bilgi için yöneticinize başvurun."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Cihazınız <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> tarafından yönetiliyor."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>, cihazınızı yönetmek için <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> kullanıyor."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Yöneticiniz ayarları, kurumsal erişimi, uygulamaları, cihazınızla ilişkilendirilen verileri ve cihazınızın konum bilgilerini takip edip yönetebilir."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Daha fazla bilgi"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"E-postalarınız, uygulamalarınız ve web siteleriniz de dahil olmak üzere ağ etkinliğinizi takip edebilen <xliff:g id="VPN_APP">%1$s</xliff:g> ağına bağlısınız."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN Ayarlarını aç"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Yöneticiniz,cihazınızdaki trafiği izleyen ağ günlük kaydını açtı.\n\nDaha fazla bilgi için yöneticinizle iletişim kurun."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"VPN bağlantısı kurması için bir uygulamaya izin verdiniz.\n\nBu uygulama, cihazınızın yanı sıra e-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilir."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Cihazınız <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor.\n\nYöneticiniz cihazınızla ilişkilendirilen ayarları, şirket erişimini, uygulamaları, verileri ve cihazınızın konum bilgilerini izleyebilir ve yönetebilir.\n\nE-postalar, uygulamalar ve web siteleri de dahil olmak üzere ağ etkinliğinizi izleyebilen bir VPN\'ye bağlısınız.\n\nDaha fazla bilgi için lütfen yöneticinize başvurun."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Cihazınız <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor.\n\nYöneticiniz; e-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilir.\n\nDaha fazla bilgi edinmek için yöneticinizle iletişim kurun.\n\nAyrıca ağ etkinliğinizi izleyebilen bir VPN\'ye bağlısınız."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"E-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION">%1$s</xliff:g> uygulamasına bağlısınız."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"E-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere kişisel ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION">%1$s</xliff:g> uygulamasına bağlısınız."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"İş profiliniz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor. E-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION">%2$s</xliff:g> uygulamasına bağlı.\n\nDaha fazla bilgi için yöneticinizle iletişim kurun."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"İş profiliniz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor. E-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> uygulamasına bağlı.\n\n Ayrıca kişisel ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> uygulamasına bağlısınız."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Cihazınız <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor.\n\nYöneticiniz; ayarları, şirket erişimini, uygulamaları, cihazınızla ilişkilendirilmiş verileri ve cihazınızın konum bilgilerini izleyebilir ve yönetebilir.\n\nE-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION">%2$s</xliff:g> uygulamasına bağlısınız.\n\nDaha fazla bilgi edinmek için yöneticinizle iletişim kurun."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Cihazınızın kilidini manuel olarak açmadıkça cihaz kilitli kalacak"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Bildirimleri daha hızlı alın"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Kilidi açmadan bildirimleri görün"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Genişlet"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Daralt"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Ekran sabitlendi"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Bu işlem, siz sabitlemeyi kaldırana kadar ekranı görünür durumda tutar. Sabitlemeyi kaldırmak için Geri\'ye dokunun ve basılı tutun."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Anladım"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Hayır, teşekkürler"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> gizlensin mi?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ayarlardan etkinleştirdiğiniz bir sonraki sefer tekrar görünür."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Gizle"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ses denetimi iletişim kutusu olmak istiyor."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"İzin ver"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Reddet"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ses denetimi iletişim kutusu olarak ayarlandı"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Orijinali geri yüklemek için dokunun."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"İş profilinizi kullanıyorsunuz"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Çağrı"</item>
- <item msgid="5997713001067658559">"Sistem"</item>
- <item msgid="7858983209929864160">"Zili Çaldır"</item>
- <item msgid="1850038478268896762">"Medya"</item>
- <item msgid="8265110906352372092">"Alarm"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Erişilebilirlik"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Çağrı"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Sistem"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Zili çaldır"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Medya"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Alarm"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Bildirim"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Çift ton çoklu frekans"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Erişilebilirlik"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Sesi açmak için hafifçe dokunun."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Titreşime ayarlamak için hafifçe dokunun. Erişilebilirlik hizmetlerinin sesi kapatılabilir."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Sesi kapatmak için hafifçe dokunun. Erişilebilirlik hizmetlerinin sesi kapatılabilir."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Hızlı Ayarlar"</string>
<string name="status_bar" msgid="4877645476959324760">"Durum çubuğu"</string>
<string name="overview" msgid="4018602013895926956">"Genel Bakış"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Demo modu"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Sistem kullanıcı arayüzü demo modu"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Demo modunu etkinleştir"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Demo modunu göster"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Açık"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Kapalı"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Güç bildirim kontrolleriyle, bir uygulamanın bildirimleri için 0 ile 5 arasında bir önem düzeyi ayarlayabilirsiniz. \n\n"<b>"5. Düzey"</b>" \n- Bildirim listesinin en üstünde gösterilsin \n- Tam ekran kesintisine izin verilsin \n- Ekranda her zaman kısaca belirsin \n\n"<b>"4. Düzey"</b>" \n- Tam ekran kesintisi engellensin \n- Ekranda her zaman kısaca belirsin \n\n"<b>"3. Düzey"</b>" \n- Tam ekran kesintisi engellensin \n- Ekranda hiçbir zaman kısaca belirmesin \n\n"<b>"2. Düzey"</b>" \n- Tam ekran kesintisi engellensin \n- Ekranda hiçbir zaman belirmesin \n- Hiçbir zaman ses çıkarmasın ve titreştirmesin \n\n"<b>"1. Düzey"</b>" \n- Tam ekran kesintisi engellensin \n- Ekranda hiçbir zaman kısaca belirmesin \n- Hiçbir zaman ses çıkarmasın veya titreştirmesin \n- Kilit ekranından ve durum çubuğundan gizlensin \n- Bildirim listesinin en altında gösterilsin \n\n"<b>"0. Düzey"</b>" \n- Uygulamadan gelen tüm bildirimler engellensin"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Önem düzeyi: Otomatik"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Önem düzeyi: 0. Düzey"</string>
- <string name="min_importance" msgid="560779348928574878">"Önem düzeyi: 1. Düzey"</string>
- <string name="low_importance" msgid="7571498511534140">"Önem düzeyi: 2. Düzey"</string>
- <string name="default_importance" msgid="7609889614553354702">"Önem düzeyi: 3. Düzey"</string>
- <string name="high_importance" msgid="3441537905162782568">"Önem düzeyi: 4. Düzey"</string>
- <string name="max_importance" msgid="4880179829869865275">"Önem düzeyi: 5. Düzey"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Her bir bildirimin önem düzeyini uygulama belirler."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Bu uygulamadan gelen bildirimleri asla gösterme."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Tam ekran kesintisi, ekranda kısaca belirme, ses veya titreşim yok. Kilit ekranından ve durum çubuğundan gizlensin."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Tam ekran kesintisi, ekranda kısaca belirme, ses veya titreşim yok."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Tam ekran kesintisi veya ekranda kısaca belirme yok."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Ekranda her zaman kısaca belirsin. Tam ekran kesintisi yok."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Ekranda her zaman kısaca belirsin ve tam ekran kesintisine izin verilsin."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Diğer ayarlar"</string>
<string name="notification_done" msgid="5279426047273930175">"Bitti"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> bildirim denetimleri"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Ayarların sırasını düzenle."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Sayfa <xliff:g id="ID_1">%1$d</xliff:g> / <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Genişlet"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Simge durumuna getir"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Kapat"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Telefon ısınıyor"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Telefon soğurken bazı özellikler sınırlı olarak kullanılabilir"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Telefonunuz otomatik olarak soğumaya çalışacak. Bu sırada telefonunuzu kullanmaya devam edebilirsiniz ancak uygulamalar daha yavaş çalışabilir.\n\nTelefonunuz soğuduktan sonra normal şekilde çalışacaktır."</string>
</resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 21f9e0e..50887c6 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -167,6 +167,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Налаштування системи."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Сповіщення."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Додатковий контейнер для сповіщень"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Очистити сповіщення."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS увімкнено."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Встановлення зв’язку з GPS."</string>
@@ -188,6 +189,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Заблокований екран."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Налаштування"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Огляд."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Закрити"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi вимкнено."</string>
@@ -406,18 +409,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Очистити все"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Почати зараз"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Сповіщень немає"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Дії на пристрої можуть відстежуватися"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Профіль може відстежуватись"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Дії в мережі можуть відстежуватися"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Мережа може відстежуватися"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Відстеження дій на пристрої"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Відстеження профілю"</string>
<string name="monitoring_title" msgid="169206259253048106">"Відстеження дій у мережі"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"Мережа VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Реєстрація в мережі"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Вимкнути VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Від’єднатися від мережі VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Вашим пристроєм керує <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдміністратор може відстежувати та контролювати налаштування, корпоративний доступ, додатки й дані, пов’язані з вашим пристроєм, а також геодані пристрою. Зв’яжіться з адміністратором, щоб дізнатися більше."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Вашим пристроєм керує додаток <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"Компанія <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> керує вашим пристроєм за допомогою додатка <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Адміністратор може відстежувати й контролювати налаштування, корпоративний доступ, додатки, дані на пристрої та дані про місцезнаходження пристрою."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Докладніше"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Під’єднано додаток <xliff:g id="VPN_APP">%1$s</xliff:g>, який може відстежувати вашу активність у мережі, як-от доступ до електронної пошти, додатків і веб-сайтів."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Відкрити налаштування мережі VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Ваш адміністратор увімкнув реєстрацію в мережі, під час якої на вашому пристрої відстежується трафік.\n\nЩоб дізнатися більше, зв’яжіться зі своїм адміністратором."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Ви дозволили додатку під’єднуватися до мережі VPN.\n\nЦей додаток може відстежувати вашу активність на пристрої та в мережі, зокрема в електронній пошті, додатках і на веб-сайтах."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Вашим пристроєм керує <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдміністратор може відстежувати та контролювати налаштування, корпоративний доступ, додатки й дані, пов’язані з вашим пристроєм, а також геодані пристрою.\n\nПристрій під’єднано до мережі VPN, постачальник послуг якої може відстежувати вашу активність у мережі, зокрема листування, роботу в додатках і на сайтах.\n\nЗв’яжіться з адміністратором, щоб дізнатися більше."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Вашим пристроєм керує організація <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдміністратор може відстежувати вашу активність у мережі, зокрема в електронній пошті, додатках і на веб-сайтах.\n\nЗв’яжіться з адміністратором, щоб дізнатися більше.\n\nПристрій під’єднано до мережі VPN, у якій ваша активність може відстежуватись."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Ваш профіль під’єднано до додатка <xliff:g id="APPLICATION">%1$s</xliff:g>, який може відстежувати вашу активність у мережі, зокрема в електронній пошті, додатках і на веб-сайтах."</string>
@@ -425,7 +436,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Ваш профіль під’єднано до додатка <xliff:g id="APPLICATION">%1$s</xliff:g>, який може відстежувати вашу особисту активність у мережі, зокрема доступ до електронної пошти, додатків і веб-сайтів."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Вашим робочим профілем керує <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Профіль під’єднано до додатка <xliff:g id="APPLICATION">%2$s</xliff:g>, який може відстежувати вашу робочу активність у мережі, зокрема в електронній пошті, додатках і на веб-сайтах.\n\nЗв’яжіться з адміністратором, щоб дізнатися більше."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Вашим робочим профілем керує <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Профіль під’єднано до додатка <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, який може відстежувати вашу робочу активність у мережі, зокрема в електронній пошті, додатках і на веб-сайтах.\n\nВаш профіль також під’єднано до додатка <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, який може відстежувати вашу особисту активність у мережі."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Вашим пристроєм керує організація <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдміністратор може відстежувати та контролювати налаштування, корпоративний доступ, додатки, геодані й інші дані, пов’язані з вашим пристроєм.\n\nВаш профіль під’єднано до додатка <xliff:g id="APPLICATION">%2$s</xliff:g>, який може відстежувати вашу активність у мережі, зокрема в електронній пошті, додатках і на веб-сайтах.\n\nЗв’яжіться з адміністратором, щоб дізнатися більше."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Пристрій залишатиметься заблокованим, доки ви не розблокуєте його вручну"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Швидше отримуйте сповіщення"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Переглядайте сповіщення, перш ніж розблокувати екран"</string>
@@ -436,31 +446,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Розгорнути"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Згорнути"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Екран закріплено"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Ви постійно бачитимете екран, доки не відкріпите його. Щоб відкріпити екран, натисніть і утримуйте кнопку \"Назад\"."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Зрозуміло"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Ні, дякую"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Сховати <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"З’явиться знову, коли ви ввімкнете його в налаштуваннях."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Сховати"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"Призначити додаток <xliff:g id="APP_NAME">%1$s</xliff:g> регулятором гучності?"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Дозволити"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Відхилити"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> призначено регулятором гучності"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Торкніться, щоб відновити оригінал."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Ви в робочому профілі"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Виклик"</item>
- <item msgid="5997713001067658559">"Система"</item>
- <item msgid="7858983209929864160">"Дзвонити"</item>
- <item msgid="1850038478268896762">"Медіа"</item>
- <item msgid="8265110906352372092">"Будильник"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Спеціальні можливості"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Виклик"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Система"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Дзвінок"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Медіа"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Сигнал"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Сповіщення"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Двотональний багаточастотний аналоговий сигнал"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Спеціальні можливості"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Торкніться, щоб увімкнути звук."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Торкніться, щоб налаштувати вібросигнал. Спеціальні можливості може бути вимкнено."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Торкніться, щоб вимкнути звук. Спеціальні можливості може бути вимкнено."</string>
@@ -472,7 +476,7 @@
<string name="quick_settings" msgid="10042998191725428">"Швидкі налаштування"</string>
<string name="status_bar" msgid="4877645476959324760">"Рядок стану"</string>
<string name="overview" msgid="4018602013895926956">"Огляд"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Демонстраційний режим"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Демо-режим інтерфейсу системи"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Увімкнути демонстраційний режим"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Показати демонстраційний режим"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -512,20 +516,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Увімк."</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Вимк."</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"За допомогою елементів керування сповіщеннями ви можете налаштувати пріоритет сповіщень додатка – від 0 до 5 рівня. \n\n"<b>"Рівень 5"</b>\n"- Показувати сповіщення вгорі списку \n- Виводити на весь екран \n- Завжди показувати короткі сповіщення \n\n"<b>"Рівень 4"</b>\n"- Не виводити на весь екран \n- Завжди показувати короткі сповіщення \n\n"<b>"Рівень 3"</b>\n"- Не виводити на весь екран \n- Не показувати короткі сповіщення \n\n"<b>"Рівень 2"</b>\n"- Не виводити на весь екран \n- Не показувати короткі сповіщення \n- Вимкнути звук і вібросигнал \n\n"<b>"Рівень 1"</b>\n"- Не виводити на весь екран \n- Не показувати короткі сповіщення \n- Вимкнути звук і вібросигнал \n- Не показувати на заблокованому екрані та в рядку стану \n- Показувати сповіщення внизу списку \n\n"<b>"Рівень 0"</b>\n"- Блокувати всі сповіщення з додатка"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Пріоритет: автоматично"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Пріоритет: рівень 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Пріоритет: рівень 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Пріоритет: рівень 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Пріоритет: рівень 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Пріоритет: рівень 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Пріоритет: рівень 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Додаток визначає пріоритет кожного сповіщення."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Не показувати сповіщення з цього додатка."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Не виводити на весь екран. Вимкнути короткі сповіщення, звук і вібросигнал. Не показувати на заблокованому екрані та в рядку стану."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Не виводити на весь екран. Вимкнути короткі сповіщення, звук і вібросигнал."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Не виводити на весь екран. Вимкнути короткі сповіщення."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Завжди показувати короткі сповіщення. Не виводити на весь екран."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Завжди показувати короткі сповіщення. Виводити на весь екран."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Більше налаштувань"</string>
<string name="notification_done" msgid="5279426047273930175">"Готово"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Елементи керування сповіщеннями додатка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -658,4 +670,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Змінити порядок налаштувань."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Сторінка <xliff:g id="ID_1">%1$d</xliff:g> з <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Розгорнути"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Згорнути"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Вимкнути"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Телефон нагрівається"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Під час охолодження деякі функції обмежуються"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Ваш телефон охолоджуватиметься автоматично. Ви можете далі користуватися телефоном, але він може працювати повільніше.\n\nКоли телефон охолоне, він працюватиме належним чином."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ur-rPK-land/strings.xml b/packages/SystemUI/res/values-ur-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-ur-rPK-land/strings.xml
rename to packages/SystemUI/res/values-ur-land/strings.xml
diff --git a/packages/SystemUI/res/values-ur-rPK/config.xml b/packages/SystemUI/res/values-ur/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-ur-rPK/config.xml
rename to packages/SystemUI/res/values-ur/config.xml
diff --git a/packages/SystemUI/res/values-ur-rPK/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
similarity index 93%
rename from packages/SystemUI/res/values-ur-rPK/strings.xml
rename to packages/SystemUI/res/values-ur/strings.xml
index 0bf112e..f9ca3b2 100644
--- a/packages/SystemUI/res/values-ur-rPK/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"بیٹری چارجنگ، <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> فیصد۔"</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"سسٹم کی ترتیبات۔"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"اطلاعات۔"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"اطلاعاتی اوورفلو کنٹینر"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"اطلاع صاف کریں۔"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS فعال ہے۔"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS حاصل کرنا۔"</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"مقفل اسکرین۔"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"ترتیبات"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"مجموعی جائزہ۔"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"بند کریں"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>۔"</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi کو آف کر دیا گیا۔"</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"سبھی کو صاف کریں"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"ابھی شروع کریں"</string>
<string name="empty_shade_text" msgid="708135716272867002">"کوئی اطلاعات نہیں ہیں"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"آلہ کو مانیٹر کیا جا سکتا ہے"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"پروفائل کو مانیٹر کیا جا سکتا ہے"</string>
<string name="vpn_footer" msgid="2388611096129106812">"نیٹ ورک کو مانیٹر کیا جا سکتا ہے"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"نیٹ ورک کو شاید مانیٹر کیا جائے"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"آلہ کو مانیٹر کرنا"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"پروفائل کو مانیٹر کرنا"</string>
<string name="monitoring_title" msgid="169206259253048106">"نیٹ ورک کو مانیٹر کرنا"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"نیٹ ورک لاگنگ"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN کو غیر فعال کریں"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN کو غیر منسلک کریں"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"آپ کے آلہ کا نظم کیا جاتا ہے بذریعہ <xliff:g id="ORGANIZATION">%1$s</xliff:g>۔\n\nآپ کا منتظم ترتیبات، کارپوریٹ رسائی، ایپس، آپ کے آلہ سے وابستہ ڈیٹا اور آپ کے آلہ کے مقام کی معلومات کو مانیٹر اور ان کا نظم کر سکتا ہے۔ مزید معلومات کیلئے، اپنے منتظم سے رابطہ کریں۔"</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"آپ کا آلہ <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> کے زیر انتظام ہے۔"</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> آپ کے آلہ کے نظم کیلئے <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> استعمال کرتا ہے۔"</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"آپ کا منتظم ترتیبات، کارپوریٹ رسائی، ایپس، آپ کے آلہ سے وابستہ ڈیٹا اور آپ کے آلہ کے مقام کی معلومات کو مانیٹر اور ان کا نظم کر سکتا ہے۔"</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"مزید جانیں"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"آپ <xliff:g id="VPN_APP">%1$s</xliff:g> سے منسلک ہیں جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔"</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN کی ترتیبات کھولیں"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"آپ کے ایڈمن نے نیٹ ورک لاگنگ آن کر دی ہے، جو آپ کے آلہ پر ٹریفک کو مانیٹر کرتی ہے۔\n\nمزید معلومات کیلئے اپنے ایڈمن سے رابطہ کریں۔"</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"آپ نے ایک ایپ کو VPN کنکشن ترتیب دینے کی اجازت دی ہے۔\n\nیہ ایپ ای میلز، ایپس اور ویب سائٹس سمیت آپ کے آلہ اور نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔"</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"آپ کے آلہ کا نظم کیا جاتا ہے بذریعہ <xliff:g id="ORGANIZATION">%1$s</xliff:g>۔\n\nآپ کا منتظم ترتیبات، کارپوریٹ رسائی، ایپس، آپ کے آلہ سے وابستہ ڈیٹا اور آپ کے آلہ کے مقام کی معلومات کو مانیٹر اور ان کا نظم کر سکتا ہے۔\n\nآپ ایک VPN سے منسلک ہیں، جو ای میلز، ایپس اور محفوظ ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتا ہے۔\n\nمزید معلومات کیلئے، اپنے منتظم سے رابطہ کریں۔"</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"آپ کا دفتری پروفائل <xliff:g id="ORGANIZATION">%1$s</xliff:g> کے زیر انتظام ہے۔\n\nآپ کا منتظم ای میلز، ایپس اور ویب سائٹس سیمت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتا ہے۔\n\nمزید معلومات کیلئے اپنے منتظم سے رابطہ کریں۔\n\nآپ ایک VPN سے بھی منسلک ہیں، جو آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتا ہے۔"</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"آپ <xliff:g id="APPLICATION">%1$s</xliff:g> سے منسلک ہیں، جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔"</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"آپ <xliff:g id="APPLICATION">%1$s</xliff:g> سے منسلک ہیں، جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نجی نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔"</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"آپ کا دفتری پروفائل <xliff:g id="ORGANIZATION">%1$s</xliff:g> کے زیر انتظام ہے۔ یہ <xliff:g id="APPLICATION">%2$s</xliff:g> سے منسلک ہے، جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔\n\nمزید معلومات کیلئے اپنے منتظم سے رابطہ کریں۔"</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"آپ کا دفتری پروفائل <xliff:g id="ORGANIZATION">%1$s</xliff:g> کے زیر انتظام ہے۔ یہ <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> سے منسلک ہے، جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔\n\nآپ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> سے بھی منسلک ہیں، جو آپ کے نجی نیٹ ورک کی سرگرمی کو مانیٹر کر سکتی ہے۔"</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"آپ کا آلہ <xliff:g id="ORGANIZATION">%1$s</xliff:g> کے زیر انتظام ہے۔\n\nآپ کا منتظم ترتیبات، کارپوریٹ رسائی، ایپس، آپ کے آلہ سے وابستہ ڈیٹا اور آپ کے آلہ کے مقام کی معلومات کو مانیٹر اور ان کا نظم کر سکتا ہے۔\n\nآپ <xliff:g id="APPLICATION">%2$s</xliff:g> سے منسلک ہیں، جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔\n\nمزید معلومات کیلئے اپنے منتظم سے رابطہ کریں۔"</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"آلہ اس وقت تک مقفل رہے گا جب تک آپ دستی طور پر اسے غیر مقفل نہ کریں"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"تیزی سے اطلاعات حاصل کریں"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"غیر مقفل کرنے سے پہلے انہیں دیکھیں"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"پھیلائیں"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"سکیڑیں"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"اسکرین پن کردہ ہے"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"یہ اسے اس وقت تک نظر میں رکھتا ہے جب تک آپ اس سے پن ہٹا نہیں دیتے۔ پن ہٹانے کیلئے پیچھے بٹن کو ٹچ کریں اور دبائے رکھیں۔"</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"سمجھ آ گئی"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"نہیں شکریہ"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> کو چھپائیں؟"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"اگلی بار جب آپ اسے ترتیبات میں آن کریں گے تو یہ ظاہر ہوگی۔"</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"چھپائیں"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> والیوم ڈائلاگ بننا چاہتی ہے۔"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"اجازت دیں"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"مسترد کریں"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> والیوم ڈائلاگ ہے"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"اصل بحال کرنے کیلئے تھپتھپائیں۔"</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"آپ اپنا دفتری پروفائل استعمال کر رہے ہیں۔"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"کال"</item>
- <item msgid="5997713001067658559">"سسٹم"</item>
- <item msgid="7858983209929864160">"رِنگ"</item>
- <item msgid="1850038478268896762">"میڈیا"</item>
- <item msgid="8265110906352372092">"الارم"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"بلوٹوتھ"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"ایکسیسبیلٹی"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"کال"</string>
+ <string name="stream_system" msgid="7493299064422163147">"سسٹم"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"رِنگ"</string>
+ <string name="stream_music" msgid="9086982948697544342">"میڈیا"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"الارم"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"اطلاع"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"بلوٹوتھ"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"دوہری ملٹی ٹون فریکوئنسی"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"ایکسیسبیلٹی"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s۔ آواز چالو کرنے کیلئے تھپتھپائیں۔"</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s۔ ارتعاش پر سیٹ کرنے کیلئے تھپتھپائیں۔ ایکسیسبیلٹی سروسز شاید خاموش ہوں۔"</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s۔ خاموش کرنے کیلئے تھپتھپائیں۔ ایکسیسبیلٹی سروسز شاید خاموش ہوں۔"</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"فوری ترتیبات"</string>
<string name="status_bar" msgid="4877645476959324760">"اسٹیٹس بار"</string>
<string name="overview" msgid="4018602013895926956">"مجموعی جائزہ"</string>
- <string name="demo_mode" msgid="2389163018533514619">"ڈیمو موڈ"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"سسٹم UI ڈیمو موڈ"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"ڈیمو موڈ فعال کریں"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"ڈیمو موڈ دکھائیں"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"ایتھرنیٹ"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"آن"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"آف"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"پاور اطلاع کنٹرولز کے ساتھ آپ کسی ایپ کی اطلاعات کیلئے 0 سے 5 تک اہمیت کی سطح سیٹ کر سکتے ہیں۔ \n\n"<b>"سطح 5"</b>\n"- اطلاعات کی فہرست کے اوپر دکھائیں \n- پوری اسکرین کی مداخلت کی اجازت دیں \n- ہمیشہ جھانکنا\n\n"<b>"سطح 4"</b>\n"- پوری اسکرین کی مداخلت کو روکیں \n- ہمیشہ جھانکنا\n\n"<b>"سطح 3"</b>\n"- پوری اسکرین کی مداخلت کو روکیں \n- کبھی نہ جھانکنا \n\n"<b>"سطح 2"</b>\n"- پوری اسکرین کی مداخلت کو روکیں \n- کبھی نہ جھانکنا \n- کبھی آواز اور ارتعاش پیدا نہ کرنا \n\n"<b>" سطح 1"</b>\n"- پوری اسکرین کی مداخلت کو روکنا \n- کبھی نہ جھانکنا \n- کبھی بھی آواز یا ارتعاش پیدا نہ کرنا\n- مقفل اسکرین اور اسٹیٹس بار سے چھپانا \n - اطلاع کی فہرست کی نیچے دکھانا \n\n"<b>"سطح 0"</b>\n"- ایپ سے تمام اطلاعات مسدود کریں"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"اہمیت: خود کار"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"اہمیت: سطح 0"</string>
- <string name="min_importance" msgid="560779348928574878">"اہمیت: سطح 1"</string>
- <string name="low_importance" msgid="7571498511534140">"اہمیت: سطح 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"اہمیت: سطح 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"اہمیت: سطح 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"اہمیت: سطح 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"ایپ ہر اطلاع کی اہمیت کا تعین کرتی ہے۔"</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"اس ایپ سے کبھی بھی اطلاعات نہ دکھائیں۔"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"کوئی پوری اسکرین مداخلت، جھانکنا، آواز یا ارتعاش نہیں۔ اسکرین قفل اور اسٹیٹس بار سے چھپائیں۔"</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"کوئی پوری اسکرین کی مداخلت، جھانکنا، آواز یا ارتعاش نہیں۔"</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"پوری اسکرین پر کوئی مداخلت یا جھانکنا نہیں۔"</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"ہمیشہ جھانک۔ کوئی پوری اسکرین مداخلت نہیں۔"</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"ہمیشہ جھانکنا اور پوری اسکرین مداخلت کی اجازت دیں۔"</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"مزید ترتیبات"</string>
<string name="notification_done" msgid="5279426047273930175">"ہوگیا"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے نوٹیفکیشن کنٹرولز"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"ترتیبات کی ترتیب میں ترمیم کریں۔"</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"صفحہ <xliff:g id="ID_1">%1$d</xliff:g> از <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"پھیلائیں"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"چھوٹی کریں"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"برخاست کریں"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"فون گرم ہو رہا ہے"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"فون کے ٹھنڈے ہو جانے تک کچھ خصوصیات محدود ہیں"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"آپ کا فون خودکار طور پر ٹھنڈا ہونے کی کوشش کرے گا۔ آپ ابھی بھی اپنا فون استعمال کر سکتے ہیں، مگر ہو سکتا ہے یہ سست چلے۔\n\nایک بار آپ کا فون ٹھنڈا ہوجائے تو یہ معمول کے مطابق چلے گا۔"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ur-rPK/strings_car.xml b/packages/SystemUI/res/values-ur/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-ur-rPK/strings_car.xml
rename to packages/SystemUI/res/values-ur/strings_car.xml
diff --git a/packages/SystemUI/res/values-ur-rPK/strings_tv.xml b/packages/SystemUI/res/values-ur/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-ur-rPK/strings_tv.xml
rename to packages/SystemUI/res/values-ur/strings_tv.xml
diff --git a/packages/SystemUI/res/values-uz-rUZ-land/strings.xml b/packages/SystemUI/res/values-uz-land/strings.xml
similarity index 100%
rename from packages/SystemUI/res/values-uz-rUZ-land/strings.xml
rename to packages/SystemUI/res/values-uz-land/strings.xml
diff --git a/packages/SystemUI/res/values-uz-rUZ/config.xml b/packages/SystemUI/res/values-uz/config.xml
similarity index 100%
rename from packages/SystemUI/res/values-uz-rUZ/config.xml
rename to packages/SystemUI/res/values-uz/config.xml
diff --git a/packages/SystemUI/res/values-uz-rUZ/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
similarity index 93%
rename from packages/SystemUI/res/values-uz-rUZ/strings.xml
rename to packages/SystemUI/res/values-uz/strings.xml
index 591b98a..413cd7a3 100644
--- a/packages/SystemUI/res/values-uz-rUZ/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -165,6 +165,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Tizim sozlamalari."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Eslatmalar."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Qalqib chiquvchi bildirishnomalar konteyneri"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Eslatmalarni tozalash."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS yoqildi."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS so‘rovi."</string>
@@ -186,6 +187,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Qulflash ekrani."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Sozlamalar"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Umumiy nazar."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Yopish"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi o‘chirildi."</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Hammasini tozalash"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Boshlash"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Bildirishnomalar yo‘q"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Qurilma kuzatilishi mumkin"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil kuzatilishi mumkin"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Tarmoqni kuzatish mumkin"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Tarmoq kuzatilishi mumkin"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Qurilmalarni kuzatish"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilni kuzatish"</string>
<string name="monitoring_title" msgid="169206259253048106">"Tarmoqlarni kuzatish"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Tarmoq jurnali"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN tarmog‘ini o‘chirish"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN ulanishini uzish"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Qurilmangiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi.\n\nAdministrator sozlamalar, korporativ kirish huquqi, ilovalar, qurilmangizdagi ma’lumotlar, jumladan, joylashuv ma’lumotlari hamda unga bog‘liq boshqa ma’lumotlarni boshqarishi mumkin. Ko‘proq ma’lumot olish uchun administrator bilan bog‘laning."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Qurilmangiz <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> tomonidan boshqariladi."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> qurilmangizni boshqarish uchun <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ilovasidan foydalanadi."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administratoringiz qurilmangiz bilan bog‘liq sozlamalar, korporativ kirish huquqi, ilova va ma’lumotlarni hamda qurilmangizning joylashuv axborotini kuzatishi va boshqarishi mumkin."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Batafsil"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"<xliff:g id="VPN_APP">%1$s</xliff:g> ilovasi ishga tushirilgan. U internetdagi harakatlaringiz, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN sozlamalarini ochish"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administrator qurilmangizdagi trafikni nazorat qiluvchi tarmoq jurnalini yoqdi.\n\nBatafsil ma’lumot olish uchun administratoringizga murojaat qiling."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Siz ilovaga VPN tarmog‘iga ulanishga ruxsat bergansiz.\n\nUshbu ilova qurilmangiz va internetdagi harakatlaringizni, jumladan, e-pochta, ilovalar va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Qurilmangiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi.\n\nAdministrator sozlamalar, korporativ kirish huquqi, ilovalar, qurilmangizdagi ma’lumotlar, jumladan, joylashuv ma’lumotlarini boshqarishi mumkin.\n\nShuningdek, siz Internetdagi harakatlaringizni, jumladan, e-pochta, ilova va veb-saytlar bilan ishlashingizni kuzata oladigan VPN tarmog‘iga ham ulangansiz.\n\nKo‘proq ma’lumot olish uchun administrator bilan bog‘laning."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Sizning ishchi profilingiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi.\n\nAdministrator internetdagi harakatlaringizni, jumladan, e-pochta, ilova va xavfsiz veb-saytlar bilan ishlashingizni kuzatishi mumkin.\n\nBatafsil ma’lumot olish uchun administrator bilan bog‘laning.\n\nShuningdek, siz VPN tarmog‘iga ham ulangansiz. U internetdagi harakatlaringizni kuzatishi mumkin."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"<xliff:g id="APPLICATION">%1$s</xliff:g> ilovasi ishga tushirilgan. U internetdagi harakatlaringiz, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin."</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"<xliff:g id="APPLICATION">%1$s</xliff:g> ilovasi ishga tushirilgan. U internetdagi harakatlaringiz, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Sizning ishchi profilingiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi. <xliff:g id="APPLICATION">%2$s</xliff:g> ilovasi ish tarmog‘idagi harakatlaringizni, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin.\n\nBatafsil ma’lumot olish uchun administrator bilan bog‘laning."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Sizning ishchi profilingiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi. <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> ilovasi ish tarmog‘idagi harakatlaringizni, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin.\n\nShuningdek, <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> ilovasi ham shaxsiy tarmoqdagi harakatlaringizni kuzatishi mumkin."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Qurilmangiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi.\n\nAdministrator sozlamalar, korporativ kirish huquqi, ilovalar, qurilmangizdagi ma’lumotlar, jumladan, joylashuv ma’lumotlarini boshqarishi mumkin.\n\nShuningdek, siz <xliff:g id="APPLICATION">%2$s</xliff:g> ilovasiga ham ulangansiz. Ushbu ilova internetdagi harakatlaringizni, jumladan, e-pochta, ilovalar va veb-saytlar bilan ishlashingizni kuzata oladi.\n\nBatafsil ma’lumot olish uchun administrator bilan bog‘laning."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Qurilma qo‘lda qulfdan chiqarilmaguncha qulflangan holatda qoladi"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Bildirishnomalarni tezroq oling"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Ularni qulfdan chiqarishdan oldin ko‘ring"</string>
@@ -432,31 +442,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Yoyish"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Yig‘ish"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Ekran qadaldi"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Ekran yechilmaguncha u o‘zgarmas holatda qoladi. Uni yechish uchun “Orqaga” tugmasini bosib turing."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"OK"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Yo‘q, kerakmas"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> berkitilsinmi?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Keyingi safar sozlamalardan yoqilgan paydo bo‘ladi."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Berkitish"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ovoz balandligini boshqarmoqchi."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Ruxsat berish"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Rad etish"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ovoz balandligini boshqaradi"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Aslini tiklash uchun bosing."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Siz ishchi profildan foydalanmoqdasiz"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Qo‘ng‘iroq"</item>
- <item msgid="5997713001067658559">"Tizim"</item>
- <item msgid="7858983209929864160">"Jiringlatish"</item>
- <item msgid="1850038478268896762">"Multimedia"</item>
- <item msgid="8265110906352372092">"Signal"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Maxsus imkoniyatlar"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Qo‘ng‘iroq qilish"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Tizim"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Jiringlatish"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Multimedia"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Signal"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Bildirishnoma"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Ikkitali ko‘pchastotali ovoz"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Maxsus imkoniyatlar"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Ovozini yoqish uchun ustiga bosing."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Tebranishni yoqish uchun ustiga bosing. Maxsus imkoniyatlar ishlamasligi mumkin."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Ovozini o‘chirish uchun ustiga bosing. Maxsus imkoniyatlar ishlamasligi mumkin."</string>
@@ -468,7 +472,7 @@
<string name="quick_settings" msgid="10042998191725428">"Tezkor sozlamalar"</string>
<string name="status_bar" msgid="4877645476959324760">"Holat qatori"</string>
<string name="overview" msgid="4018602013895926956">"Umumiy ma’lumot"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Demo rejim"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Tizim interfeysi demo rejimi"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Demo rejimni yoqish"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Demo rejimni ko‘rsatish"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -508,20 +512,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Yoniq"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"O‘chiq"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Bildirishnomalar uchun kengaytirilgan boshqaruv yordamida ilova bildirishnomalarining muhimlik darajasini (0-5) sozlash mumkin. \n\n"<b>"5-daraja"</b>" \n- Bildirishnomani ro‘yxatning boshida ko‘rsatish \n- To‘liq ekranli bildirishnomalarni ko‘rsatish \n- Qalqib chiquvchi bildirishnomalarni ko‘rsatish \n\n"<b>"4-daraja"</b>" \n- To‘liq ekranli bildirishnomalarni ko‘rsatmaslik \n- Qalqib chiquvchi bildirishnomalarni ko‘rsatish \n\n"<b>"3-daraja"</b>" \n- To‘liq ekranli bildirishnomalarni ko‘rsatmaslik \n- Qalqib chiquvchi bildirishnomalarni ko‘rsatmaslik \n\n"<b>"2-daraja"</b>" \n- To‘liq ekranli bildirishnomalarni ko‘rsatmaslik \n- Qalqib chiquvchi bildirishnomalarni ko‘rsatmaslik \n- Ovoz va tebranishdan foydalanmaslik \n\n"<b>"1-daraja"</b>" \n- To‘liq ekranli bildirishnomalarni ko‘rsatmaslik \n- Qalqib chiquvchi bildirishnomalarni ko‘rsatmaslik \n- Ovoz va tebranishdan foydalanmaslik \n- Ekran qulfi va holat qatorida ko‘rsatmaslik \n- Bildirishnomani ro‘yxatning oxirida ko‘rsatish \n\n"<b>"0-daraja"</b>" \n- Ilovadan keladigan barcha bildirishnomalarni bloklash"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Muhimligi: avtomatik"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Muhimligi: 0-daraja"</string>
- <string name="min_importance" msgid="560779348928574878">"Muhimligi: 1-daraja"</string>
- <string name="low_importance" msgid="7571498511534140">"Muhimligi: 2-daraja"</string>
- <string name="default_importance" msgid="7609889614553354702">"Muhimligi: 3-daraja"</string>
- <string name="high_importance" msgid="3441537905162782568">"Muhimligi: 4-daraja"</string>
- <string name="max_importance" msgid="4880179829869865275">"Muhimligi: 5-daraja"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Ilova har bir bildirishnomaning muhimligini o‘zi aniqlaydi."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Bu ilovadan keladigan bildirishnomalarni hech qachon ko‘rsatilmaslik."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Qalqib chiquvchi va to‘liq ekranli bildirishnomalarni ko‘rsatilmaslik. Ovoz va tebranishdan foydalanmaslik. Ekran qulfi va holat qatorida ko‘rsatmaslik."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Qalqib chiquvchi va to‘liq ekranli bildirishnomalar ko‘rsatmaslik. Ovoz va tebranishdan foydalanmaslik."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Qalqib chiquvchi va to‘liq ekranli bildirishnomalarni ko‘rsatmaslik."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Qalqib chiquvchi bildirishnomalarni ko‘rsatish, to‘liq ekranli bildirishnomalarni esa ko‘rsatmaslik."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Qalqib chiquvchi va to‘liq ekranli bildirishnomalarni ko‘rsatish."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Boshqa sozlamalar"</string>
<string name="notification_done" msgid="5279426047273930175">"Tayyor"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> bildirishnomalarini boshqarish"</string>
@@ -654,4 +666,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Sozlamalar tartibini o‘zgartirish."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_1">%1$d</xliff:g>-sahifa, jami: <xliff:g id="ID_2">%2$d</xliff:g> ta sahifa"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Yoyish"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Yig‘ish"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Yopish"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Telefon qizib ketdi"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Telefon sovish paytida ayrim funksiyalar ishlamasligi mumkin"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Telefon avtomatik ravishda o‘zini sovitadi. Telefoningizdan foydalanishda davom etishingiz mumkin, lekin u sekinroq ishlashi mumkin.\n\nTelefon sovishi bilan normal holatda ishlashni boshlaydi."</string>
</resources>
diff --git a/packages/SystemUI/res/values-uz-rUZ/strings_car.xml b/packages/SystemUI/res/values-uz/strings_car.xml
similarity index 100%
rename from packages/SystemUI/res/values-uz-rUZ/strings_car.xml
rename to packages/SystemUI/res/values-uz/strings_car.xml
diff --git a/packages/SystemUI/res/values-uz-rUZ/strings_tv.xml b/packages/SystemUI/res/values-uz/strings_tv.xml
similarity index 100%
rename from packages/SystemUI/res/values-uz-rUZ/strings_tv.xml
rename to packages/SystemUI/res/values-uz/strings_tv.xml
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 8b6ea67..dde279b 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Đang sạc pin, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> phần trăm."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Cài đặt hệ thống"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Thông báo."</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Vùng chứa bổ sung cho thông báo"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Xóa thông báo"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"Đã bật GPS."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Nhận GPS."</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Màn hình khóa."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Cài đặt"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Tổng quan."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Đóng"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Đã tắt Wifi."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Xóa tất cả"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Bắt đầu ngay"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Không có thông báo nào"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Thiết bị có thể được giám sát"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Hồ sơ có thể được giám sát"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Mạng có thể được giám sát"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Mạng có thể được giám sát"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Giám sát thiết bị"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Giám sát hồ sơ"</string>
<string name="monitoring_title" msgid="169206259253048106">"Giám sát mạng"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Ghi nhật ký mạng"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Tắt VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Ngắt kết nối VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Thiết bị của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nQuản trị viên của bạn có thể giám sát và quản lý cài đặt, quyền truy cập của công ty, ứng dụng và dữ liệu được liên kết với thiết bị của bạn và thông tin về vị trí của thiết bị. Để biết thêm thông tin, hãy liên hệ với quản trị viên của bạn."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Thiết bị của bạn do <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> quản lý."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> sử dụng <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> để quản lý thiết bị của bạn."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Quản trị viên có thể giám sát & q.lý cài đặt, quyền truy cập d.liệu công ty, ứng dụng, d.liệu được liên kết với thiết bị & thông tin vị trí thiết bị của bạn."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Tìm hiểu thêm"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Bạn đang kết nối với <xliff:g id="VPN_APP">%1$s</xliff:g>. Ứng dụng này có thể giám sát hoạt động mạng của bạn, bao gồm email, ứng dụng và trang web."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Mở cài đặt VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Quản trị viên đã bật tính năng ghi nhật ký mạng. Tính năng này giám sát lưu lượng truy cập trên thiết bị của bạn.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Bạn đã cấp cho ứng dụng quyền thiết lập kết nối VPN.\n\nỨng dụng này có thể giám sát hoạt động mạng và thiết bị của bạn, bao gồm email, ứng dụng và trang web."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Thiết bị của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nQuản trị viên của bạn có thể giám sát và quản lý cài đặt, quyền truy cập của công ty, ứng dụng, dữ liệu được liên kết với thiết bị của bạn và thông tin về vị trí của thiết bị.\n\nBạn được kết nối với VPN, mạng này có thể giám sát hoạt động mạng của bạn, bao gồm email, ứng dụng và trang web.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Hồ sơ Android Work của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nQuản trị viên có thể giám sát hoạt động mạng của bạn bao gồm email, ứng dụng và trang web.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn.\n\nBạn cũng được kết nối với VPN, có thể giám sát hoạt động mạng của bạn."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Bạn đang kết nối với <xliff:g id="APPLICATION">%1$s</xliff:g>. Ứng dụng này có thể giám sát hoạt động mạng của bạn bao gồm email, ứng dụng và trang web."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Bạn đang kết nối với <xliff:g id="APPLICATION">%1$s</xliff:g>. Ứng dụng này có thể giám sát hoạt động mạng cá nhân của bạn bao gồm email, ứng dụng và trang web."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Hồ sơ công việc của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Hồ sơ được kết nối với <xliff:g id="APPLICATION">%2$s</xliff:g>, ứng dụng này có thể giám sát hoạt động mạng cơ quan của bạn, bao gồm email, ứng dụng và trang web.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Hồ sơ công việc của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Hồ sơ được kết nối với <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, ứng dụng này có thể giám sát hoạt động mạng cơ quan của bạn, bao gồm email, ứng dụng và trang web.\n\nBạn cũng được kết nối với <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, có thể giám sát hoạt động mạng cá nhân của bạn."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Thiết bị của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nQuản trị viên có thể giám sát và quản lý cài đặt, quyền truy cập của công ty, ứng dụng, dữ liệu được liên kết với thiết bị của bạn và thông tin về vị trí của thiết bị.\n\nBạn được kết nối với <xliff:g id="APPLICATION">%2$s</xliff:g>. Ứng dụng này có thể giám sát hoạt động mạng của bạn, bao gồm email, ứng dụng và trang web.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Thiết bị sẽ vẫn bị khóa cho tới khi bạn mở khóa theo cách thủ công"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Nhận thông báo nhanh hơn"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Xem thông báo trước khi bạn mở khóa"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Mở rộng"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Thu gọn"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Màn hình được ghim"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Thao tác này sẽ duy trì hiển thị màn hình cho đến khi bạn bỏ ghim. Chạm và giữ Quay lại để bỏ ghim."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Ok"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Không, cảm ơn"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Ẩn <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Thông báo này sẽ xuất hiện lại vào lần tiếp theo bạn bật thông báo trong cài đặt."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ẩn"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> muốn trở thành hộp thoại khối lượng."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Cho phép"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Từ chối"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> là hộp thoại khối lượng"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Nhấn để khôi phục ảnh chụp màn hình gốc."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Bạn đang sử dụng hồ sơ công việc của mình"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Gọi"</item>
- <item msgid="5997713001067658559">"Hệ thống"</item>
- <item msgid="7858983209929864160">"Chuông"</item>
- <item msgid="1850038478268896762">"Phương tiện"</item>
- <item msgid="8265110906352372092">"Báo thức"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Trợ năng"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Gọi"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Hệ thống"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Chuông"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Phương tiện"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"Báo thức"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Thông báo"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Tần số đa chuông kép"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Trợ năng"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Nhấn để bật tiếng."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Nhấn để đặt chế độ rung. Bạn có thể tắt tiếng dịch vụ trợ năng."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Nhấn để tắt tiếng. Bạn có thể tắt tiếng dịch vụ trợ năng."</string>
@@ -468,7 +472,7 @@
<string name="quick_settings" msgid="10042998191725428">"Cài đặt nhanh"</string>
<string name="status_bar" msgid="4877645476959324760">"Thanh trạng thái"</string>
<string name="overview" msgid="4018602013895926956">"Tổng quan"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Chế độ trình diễn"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Chế độ trình diễn giao diện người dùng hệ thống"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Bật chế độ trình diễn"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Hiển thị chế độ trình diễn"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
@@ -508,20 +512,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Bật"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Tắt"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Với các kiểm soát thông báo nguồn, bạn có thể đặt cấp độ quan trọng từ 0 đến 5 cho các thông báo của ứng dụng. \n\n"<b>"Cấp 5"</b>" \n- Hiển thị ở đầu danh sách thông báo \n- Cho phép gián đoạn ở chế độ toàn màn hình \n- Luôn xem nhanh \n\n"<b>"Cấp 4"</b>" \n- Ngăn gián đoạn ở chế độ toàn màn hình \n- Luôn xem nhanh \n\n"<b>"Cấp 3"</b>" \n- Ngăn gián đoạn ở chế độ toàn màn hình \n- Không bao giờ xem nhanh \n\n"<b>"Cấp 2"</b>" \n- Ngăn gián đoạn ở chế độ toàn màn hình \n- Không bao giờ xem nhanh \n- Không bao giờ có âm báo và rung \n\n"<b>"Cấp 1"</b>" \n- Ngăn gián đoạn ở chế độ toàn màn hình \n- Không bao giờ xem nhanh \n- Không bao giờ có âm báo và rung \n- Ẩn khỏi màn hình khóa và thanh trạng thái \n- Hiển thị ở cuối danh sách thông báo \n\n"<b>"Cấp 0"</b>" \n- Chặn tất cả các thông báo từ ứng dụng"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Tầm quan trọng: Tự động"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Tầm quan trọng: Cấp 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Tầm quan trọng: Cấp 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Tầm quan trọng: Cấp 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Tầm quan trọng: Cấp 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Tầm quan trọng: Cấp 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Tầm quan trọng: Cấp 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Ứng dụng xác định tầm quan trọng cho từng thông báo."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Không bao giờ hiển thị thông báo từ ứng dụng này."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Ko có rung, âm báo, xem nhanh, gián đoạn ở toàn màn hình. Ẩn khỏi màn hình khóa và thanh trạng thái."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Không có rung, âm báo, xem nhanh hoặc gián đoạn ở chế độ toàn màn hình."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Không có xem nhanh hoặc gián đoạn ở chế độ toàn màn hình."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Luôn xem nhanh. Không có gián đoạn ở chế độ toàn màn hình."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Luôn xem nhanh và cho phép gián đoạn ở chế độ toàn màn hình."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Cài đặt khác"</string>
<string name="notification_done" msgid="5279426047273930175">"Xong"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"Điều khiển thông báo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -654,4 +666,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Chỉnh sửa thứ tự cài đặt."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Trang <xliff:g id="ID_1">%1$d</xliff:g> / <xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Mở rộng"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Thu nhỏ"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Loại bỏ"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Điện thoại đang nóng lên"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Một số tính năng bị hạn chế trong khi điện thoại nguội dần"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Điện thoại của bạn sẽ tự động nguội dần. Bạn vẫn có thể sử dụng điện thoại, nhưng điện thoại có thể chạy chậm hơn. \n\nSau khi đã nguội, điện thoại sẽ chạy bình thường."</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 172c107..4f5518b 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"正在充电,已完成百分之<xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g>。"</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"系统设置。"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"通知。"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"通知溢出容器"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"清除通知。"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS已启用。"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"正在获取GPS信号。"</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"锁定屏幕。"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"设置"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"概览。"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"关闭"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>。"</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"WLAN已关闭。"</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"全部清除"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"立即开始"</string>
<string name="empty_shade_text" msgid="708135716272867002">"没有通知"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"设备可能会受到监控"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"资料可能会受到监控"</string>
<string name="vpn_footer" msgid="2388611096129106812">"网络可能会受到监控"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"网络可能会受到监控"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"设备监测"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"资料监控"</string>
<string name="monitoring_title" msgid="169206259253048106">"网络监控"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"网络日志"</string>
<string name="disable_vpn" msgid="4435534311510272506">"关闭VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"断开VPN连接"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"您的设备由以下单位管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您单位的管理员可以监控和管理与此设备相关的设置、企业权限、应用、数据以及设备位置信息。若要了解详情,请与您单位的管理员联系。"</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"您的设备由<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>管理。"</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>会使用<xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>管理您的设备。"</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"您的管理员能够监控和管理与您的设备相关的设置、企业权限、应用、数据以及您设备的位置信息。"</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"了解详情"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"您已连接到<xliff:g id="VPN_APP">%1$s</xliff:g>,该应用可以监控您的网络活动,包括收发电子邮件、使用应用和浏览网站。"</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"打开 VPN 设置"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"您的管理员已开启网络日志功能,该功能会监控您设备上的流量。\n\n要了解详情,请与您的管理员联系。"</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"您已授权应用设置 VPN 连接。\n\n该应用可以监控您的设备和网络活动,包括收发电子邮件、使用应用和浏览网站。"</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"您的设备由以下单位管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您单位的管理员可以监控和管理与此设备相关的设置、企业权限、应用、数据以及设备位置信息。\n\n您已连接到 VPN,此 VPN 也可以监控您的网络活动,包括收发电子邮件、使用应用和浏览网站。\n\n若要了解详情,请与您单位的管理员联系。"</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"您的工作资料由以下单位管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您单位的管理员可以监控您的网络活动,包括收发电子邮件、使用应用和浏览网站。\n\n若要了解详情,请与您单位的管理员联系。\n\n此外,您还连接到了 VPN,此 VPN 也可以监控您的网络活动。"</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"您已连接到<xliff:g id="APPLICATION">%1$s</xliff:g>,该应用可以监控您的网络活动,包括收发电子邮件、使用应用和浏览网站。"</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"您已连接到<xliff:g id="APPLICATION">%1$s</xliff:g>,该应用可以监控您的个人网络活动,包括收发电子邮件、使用应用和浏览网站。"</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"您的工作资料由以下单位管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。您已连接到<xliff:g id="APPLICATION">%2$s</xliff:g>,该应用可以监控您的工作网络活动,包括收发电子邮件、使用应用和浏览网站。\n\n若要了解详情,请与您单位的管理员联系。"</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"您的工作资料由以下单位管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。您已连接到<xliff:g id="APPLICATION_WORK">%2$s</xliff:g>,该应用可以监控您的工作网络活动,包括收发电子邮件、使用应用和浏览网站。\n\n此外,您还连接到了<xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>,该应用可以监控您的个人网络活动。"</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"您的设备由以下单位管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您单位的管理员可以监控和管理与此设备相关的设置、企业权限、应用、数据以及设备位置信息。\n\n您已连接到<xliff:g id="APPLICATION">%2$s</xliff:g>,该应用可以监控您的网络活动,包括收发电子邮件、使用应用和浏览网站。\n\n若要了解详情,请与您单位的管理员联系。"</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"在您手动解锁之前,设备会保持锁定状态"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"更快捷地查看通知"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"无需解锁即可查看通知"</string>
@@ -430,31 +440,23 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"展开"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"收起"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"已固定屏幕"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"这将会固定显示此屏幕,直到您取消固定为止。触摸并按住“返回”即可取消固定屏幕。"</string>
+ <string name="screen_pinning_description" msgid="8909878447196419623">"这将会固定显示此屏幕,直到您取消固定为止。触摸并按住“返回”和“概览”即可取消固定屏幕。"</string>
+ <string name="screen_pinning_description_accessible" msgid="426190689254018656">"这将会固定显示此屏幕,直到您取消固定为止。触摸并按住“概览”即可取消固定屏幕。"</string>
<string name="screen_pinning_positive" msgid="3783985798366751226">"知道了"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"不用了"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"要隐藏“<xliff:g id="TILE_LABEL">%1$s</xliff:g>”吗?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"下次在设置中将其开启后,此快捷设置条目将会重新显示。"</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"隐藏"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”请求用作音量控制对话框。"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"允许"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"拒绝"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”已用作音量控制对话框"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"点按即可恢复原始设置。"</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"您当前正在使用工作资料"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"通话"</item>
- <item msgid="5997713001067658559">"系统"</item>
- <item msgid="7858983209929864160">"铃声"</item>
- <item msgid="1850038478268896762">"媒体"</item>
- <item msgid="8265110906352372092">"闹钟"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"蓝牙"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"无障碍"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"通话"</string>
+ <string name="stream_system" msgid="7493299064422163147">"系统"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"铃声"</string>
+ <string name="stream_music" msgid="9086982948697544342">"媒体"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"闹钟"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"通知"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"蓝牙"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"双音多频"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"无障碍"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s。点按即可取消静音。"</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s。点按即可设为振动,但可能会同时将无障碍服务设为静音。"</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s。点按即可设为静音,但可能会同时将无障碍服务设为静音。"</string>
@@ -466,7 +468,7 @@
<string name="quick_settings" msgid="10042998191725428">"快捷设置"</string>
<string name="status_bar" msgid="4877645476959324760">"状态栏"</string>
<string name="overview" msgid="4018602013895926956">"概览"</string>
- <string name="demo_mode" msgid="2389163018533514619">"演示模式"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"系统界面演示模式"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"启用演示模式"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"显示演示模式"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"以太网"</string>
@@ -506,20 +508,17 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"开启"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"关闭"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"利用高级通知设置,您可以为应用通知设置从 0 级到 5 级的重要程度等级。\n\n"<b>"5 级"</b>" \n- 在通知列表顶部显示 \n- 允许全屏打扰 \n- 一律短暂显示通知 \n\n"<b>"4 级"</b>" \n- 禁止全屏打扰 \n- 一律短暂显示通知 \n\n"<b>"3 级"</b>" \n- 禁止全屏打扰 \n- 一律不短暂显示通知 \n\n"<b>"2 级"</b>" \n- 禁止全屏打扰 \n- 一律不短暂显示通知 \n- 一律不发出声音或振动 \n\n"<b>"1 级"</b>" \n- 禁止全屏打扰 \n- 一律不短暂显示通知 \n- 一律不发出声音或振动 \n- 不在锁定屏幕和状态栏中显示 \n- 在通知列表底部显示 \n\n"<b>"0 级"</b>" \n- 屏蔽应用的所有通知"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"重要程度:自动"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"重要程度:0 级"</string>
- <string name="min_importance" msgid="560779348928574878">"重要程度:1 级"</string>
- <string name="low_importance" msgid="7571498511534140">"重要程度:2 级"</string>
- <string name="default_importance" msgid="7609889614553354702">"重要程度:3 级"</string>
- <string name="high_importance" msgid="3441537905162782568">"重要程度:4 级"</string>
- <string name="max_importance" msgid="4880179829869865275">"重要程度:5 级"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"应用会自行确定每条通知的重要程度。"</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"一律不显示来自此应用的通知。"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"禁止全屏打扰、禁止短暂显示通知、禁止发出声音或振动;不在锁定屏幕和状态栏中显示。"</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"禁止全屏打扰、禁止短暂显示通知、禁止发出声音或振动。"</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"禁止全屏打扰或短暂显示通知。"</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"一律允许短暂显示通知。禁止全屏打扰。"</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"一律允许短暂显示通知,并允许全屏打扰。"</string>
+ <string name="notification_header_default_channel" msgid="7506845022070889909">"通知"</string>
+ <string name="notification_channel_disabled" msgid="5805874247999578073">"您将不会再收到这类通知。"</string>
+ <string name="notification_importance_header_app" msgid="3572576545406258751">"以下频道的<xliff:g id="APP">%s</xliff:g>通知:"</string>
+ <string name="min_importance" msgid="7559703098688382595">"低"</string>
+ <string name="low_importance" msgid="6891335321576225228">"中"</string>
+ <string name="default_importance" msgid="6400766013567512061">"高"</string>
+ <string name="high_importance" msgid="730741630855788381">"紧急"</string>
+ <string name="notification_importance_min" msgid="3237794091374404537">"不发出提示音,也不在屏幕上弹出通知"</string>
+ <string name="notification_importance_low" msgid="8929105501798019743">"显示通知但不发出提示音"</string>
+ <string name="notification_importance_default" msgid="9025125660733917469">"发出提示音"</string>
+ <string name="notification_importance_high" msgid="3316555356062640222">"发出提示音并在屏幕上弹出通知"</string>
<string name="notification_more_settings" msgid="816306283396553571">"更多设置"</string>
<string name="notification_done" msgid="5279426047273930175">"完成"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g>通知设置"</string>
@@ -652,4 +651,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"修改设置顺序。"</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"第 <xliff:g id="ID_1">%1$d</xliff:g> 页,共 <xliff:g id="ID_2">%2$d</xliff:g> 页"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"展开"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"最小化"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"关闭"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"手机温度上升中"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"手机降温时,部分功能的使用会受限制"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"您的手机将自动尝试降温。您依然可以使用您的手机,但是手机运行速度可能会更慢。\n\n手机降温后,就会恢复正常的运行速度。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index afae1ee..947848e 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -165,6 +165,7 @@
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"系統設定"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"通知。"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"通知溢出容器"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"清除通知。"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS 已啟用。"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"正在取得 GPS 訊號。"</string>
@@ -186,6 +187,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"上鎖畫面。"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"設定"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"概覽"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"關閉"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>。"</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"WiFi 已關閉。"</string>
@@ -402,18 +405,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"全部清除"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"立即開始"</string>
<string name="empty_shade_text" msgid="708135716272867002">"沒有通知"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"裝置可能會受到監控"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"個人檔案可能受到監控"</string>
<string name="vpn_footer" msgid="2388611096129106812">"網絡可能會受到監控"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"網絡可能會受到監控"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"裝置監控"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"個人檔案監控"</string>
<string name="monitoring_title" msgid="169206259253048106">"網絡監控"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"網絡記錄"</string>
<string name="disable_vpn" msgid="4435534311510272506">"停用 VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"中斷 VPN 連線"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"您的裝置由 <xliff:g id="ORGANIZATION">%1$s</xliff:g> 管理。\n\n您的管理員可以監控及管理您裝置的設定、企業存取、應用程式、資料及位置資訊。如需更多資訊,請聯絡您的管理員。"</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"您的裝置由「<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>」管理。"</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>使用「<xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>」管理您的裝置。"</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"您的管理員可以監控及管理您裝置的設定、企業存取、應用程式、資料及位置資訊。"</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"瞭解詳情"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"您已連接至「<xliff:g id="VPN_APP">%1$s</xliff:g>」,此應用程式可以監控您的網絡活動,包括電郵、應用程式及網站。"</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"開啟 VPN 設定"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"您的管理員已開啟網絡記錄功能,以監控您裝置上的流量。\n\n如需瞭解詳情,請聯絡您的管理員。"</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"您已授權應用程式設定 VPN 連線。\n\n這個應用程式能夠監控您的裝置和網絡活動,包括電郵、應用程式和網站。"</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"您的裝置由 <xliff:g id="ORGANIZATION">%1$s</xliff:g> 管理。\n\n您的管理員可以監控及管理您裝置的設定、企業存取、應用程式、資料及位置資訊。\n\n此外,由於您的裝置連至 VPN,因此 VPN 服務供應商也能監控您的個人網絡活動,包括電郵、應用程式及網站。\n\n如需更多資訊,請聯絡您的管理員。"</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"您的裝置由 <xliff:g id="ORGANIZATION">%1$s</xliff:g> 管理。\n\n您的管理員可以監控您的網絡活動,包括電郵、應用程式及網站。\n\n如需瞭解更多資訊,請聯絡管理員。\n\n由於您的裝置連至 VPN,因此 VPN 服務供應商也可監控您的網絡活動。"</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"您已連結至<xliff:g id="APPLICATION">%1$s</xliff:g> ,它能夠監控您的網絡活動,包括電郵、應用程式和網站。"</string>
@@ -421,7 +432,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"您已連接至「<xliff:g id="APPLICATION">%1$s</xliff:g>」,此應用程式可以監控您的個人網絡活動,包括電郵、應用程式及網站。"</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"您的工作設定檔由<xliff:g id="ORGANIZATION">%1$s</xliff:g>管理。它已連結至<xliff:g id="APPLICATION">%2$s</xliff:g>,能夠監控您的工作網絡活動,包括電郵、應用程式和網站。\n\n如需進一步資訊,請聯絡您的管理員。"</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"您的工作設定檔由<xliff:g id="ORGANIZATION">%1$s</xliff:g>管理。它已連結至<xliff:g id="APPLICATION_WORK">%2$s</xliff:g>,能夠監控您的工作網絡活動,包括電郵、應用程式和網站。\n\n此外,您亦連結至<xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>,因此它亦能夠監控您的個人網絡活動。"</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"您的裝置由 <xliff:g id="ORGANIZATION">%1$s</xliff:g> 管理。\n\n您的管理員可以監控及管理您裝置的設定、企業存取、應用程式、資料及位置資訊。\n\n此外,您的裝置連至 <xliff:g id="APPLICATION">%2$s</xliff:g>,它能監控您的網絡活動,包括電郵、應用程式及網站。\n\n如需更多資訊,請聯絡您的管理員。"</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"裝置將保持上鎖,直到您手動解鎖"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"更快取得通知"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"解鎖前顯示"</string>
@@ -432,31 +442,23 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"展開"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"收合"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"螢幕已固定"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"畫面將會繼續顯示,直至您取消固定。按住 [返回] 即可取消固定。"</string>
+ <string name="screen_pinning_description" msgid="8909878447196419623">"這會讓目前的螢幕畫面保持顯示狀態,直到取消固定為止。按住 [返回] 按鈕和 [總覽] 按鈕即可取消固定。"</string>
+ <string name="screen_pinning_description_accessible" msgid="426190689254018656">"這會讓目前的螢幕畫面保持顯示狀態,直到取消固定為止。按住 [總覽] 按鈕即可取消固定。"</string>
<string name="screen_pinning_positive" msgid="3783985798366751226">"知道了"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"不用了,謝謝"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"隱藏 <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"下一次您在設定開啟它時,它將再次出現。"</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"隱藏"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」想成為音量對話框。"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"允許"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"拒絕"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」為音量對話框"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"輕按即可復原。"</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"您正在使用工作設定檔"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"通話"</item>
- <item msgid="5997713001067658559">"系統"</item>
- <item msgid="7858983209929864160">"鈴聲"</item>
- <item msgid="1850038478268896762">"媒體"</item>
- <item msgid="8265110906352372092">"鬧鐘"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"藍牙"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"無障礙功能"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"通話"</string>
+ <string name="stream_system" msgid="7493299064422163147">"系統"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"鈴聲"</string>
+ <string name="stream_music" msgid="9086982948697544342">"媒體"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"鬧鐘"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"通知"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"藍牙"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"雙音多頻訊號"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"無障礙功能"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s。輕按即可取消靜音。"</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s。輕按即可設為震動。無障礙功能服務可能已經設為靜音。"</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s。輕按即可設為靜音。無障礙功能服務可能已經設為靜音。"</string>
@@ -468,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"快速設定"</string>
<string name="status_bar" msgid="4877645476959324760">"狀態列"</string>
<string name="overview" msgid="4018602013895926956">"概覽"</string>
- <string name="demo_mode" msgid="2389163018533514619">"示範模式"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"系統使用者介面示範模式"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"啟用示範模式"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"顯示示範模式"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"以太網"</string>
@@ -508,20 +510,17 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"開啟"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"關閉"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"通知控制項讓您設定應用程式通知的重要性 (0 至 5 級)。\n\n"<b>"第 5 級"</b>" \n- 在通知清單頂部顯示 \n- 允許全螢幕騷擾 \n- 一律顯示通知 \n\n"<b>"第 4 級"</b>" \n- 阻止全螢幕騷擾 \n- 一律顯示通知 \n\n"<b>"第 3 級"</b>" \n- 阻止全螢幕騷擾 \n- 永不顯示通知 \n\n"<b>"第 2 級"</b>" \n- 阻止全螢幕騷擾 \n- 永不顯示通知 \n- 永不發出聲響和震動 \n\n"<b>"第 1 級"</b>" \n- 阻止全螢幕騷擾 \n- 永不顯示通知 \n- 永不發出聲響和震動 \n- 從上鎖畫面和狀態列中隱藏 \n- 在通知清單底部顯示 \n\n"<b>"第 0 級"</b>" \n- 封鎖所有應用程式通知"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"重要性:自動"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"重要性:第 0 級"</string>
- <string name="min_importance" msgid="560779348928574878">"重要性:第 1 級"</string>
- <string name="low_importance" msgid="7571498511534140">"重要性:第 2 級"</string>
- <string name="default_importance" msgid="7609889614553354702">"重要性:第 3 級"</string>
- <string name="high_importance" msgid="3441537905162782568">"重要性:第 4 級"</string>
- <string name="max_importance" msgid="4880179829869865275">"重要性:第 5 級"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"由應用程式決定每個通知的重要性。"</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"永不顯示此應用程式的通知。"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"不允許全螢幕騷擾、顯示通知、發出聲響或震動。從上鎖畫面及狀態列中隱藏。"</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"不允許全螢幕騷擾、顯示通知、發出聲響或震動。"</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"不允許全螢幕騷擾或顯示通知。"</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"一律顯示通知。不允許全螢幕騷擾。"</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"一律顯示通知,並允許全螢幕騷擾。"</string>
+ <string name="notification_header_default_channel" msgid="7506845022070889909">"通知"</string>
+ <string name="notification_channel_disabled" msgid="5805874247999578073">"你不會再收到這類通知。"</string>
+ <string name="notification_importance_header_app" msgid="3572576545406258751">"以下頻道的「<xliff:g id="APP">%s</xliff:g>」通知:"</string>
+ <string name="min_importance" msgid="7559703098688382595">"低"</string>
+ <string name="low_importance" msgid="6891335321576225228">"中"</string>
+ <string name="default_importance" msgid="6400766013567512061">"高"</string>
+ <string name="high_importance" msgid="730741630855788381">"緊急"</string>
+ <string name="notification_importance_min" msgid="3237794091374404537">"不發出音效或顯示通知"</string>
+ <string name="notification_importance_low" msgid="8929105501798019743">"顯示通知但不發出音效"</string>
+ <string name="notification_importance_default" msgid="9025125660733917469">"發出音效"</string>
+ <string name="notification_importance_high" msgid="3316555356062640222">"發出音效並在畫面上彈出通知"</string>
<string name="notification_more_settings" msgid="816306283396553571">"更多設定"</string>
<string name="notification_done" msgid="5279426047273930175">"完成"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」通知控制項"</string>
@@ -654,4 +653,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"編輯設定次序。"</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"第 <xliff:g id="ID_1">%1$d</xliff:g> 頁 (共 <xliff:g id="ID_2">%2$d</xliff:g> 頁)"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"展開"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"最小化"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"關閉"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"手機溫度正在上升"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"手機降溫時,部分功能會受限制"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"手機會自動嘗試降溫。您仍可以使用手機,但手機的運作速度可能較慢。\n\n手機降溫後便會恢復正常。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 17946f3..b0aa942 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"充電中,已完成百分之 <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g>。"</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"系統設定"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"通知。"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"通知溢位容器"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"清除通知。"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS 已啟用。"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"正在取得 GPS 訊號。"</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"螢幕鎖定。"</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"設定"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"總覽。"</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"關閉"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>。"</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"WiFi 已關閉。"</string>
@@ -350,7 +353,7 @@
<string name="speed_bump_explanation" msgid="1288875699658819755">"較不緊急的通知會顯示在下方"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"再次輕觸即可開啟"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"向上滑動即可解鎖"</string>
- <string name="do_disclosure_generic" msgid="8498005633306135779">"這個裝置受到管理"</string>
+ <string name="do_disclosure_generic" msgid="8498005633306135779">"這是受機構管理的裝置"</string>
<string name="do_disclosure_with_name" msgid="5640615509915445501">"這個裝置是由 <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> 所管理"</string>
<string name="phone_hint" msgid="4872890986869209950">"滑動手機圖示即可啟用"</string>
<string name="voice_hint" msgid="8939888732119726665">"滑動語音小幫手圖示即可啟用"</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"全部清除"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"立即開始"</string>
<string name="empty_shade_text" msgid="708135716272867002">"沒有通知"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"裝置可能會受到監控"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"設定檔可能會受到監控"</string>
<string name="vpn_footer" msgid="2388611096129106812">"網路可能會受到監控"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"網路可能會受到監控"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"裝置監控"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"設定檔監控"</string>
<string name="monitoring_title" msgid="169206259253048106">"網路監控"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"網路紀錄"</string>
<string name="disable_vpn" msgid="4435534311510272506">"停用 VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"中斷 VPN 連線"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"您的裝置由下列機構管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您的管理員可以監控及管理與裝置相關的設定、企業網路存取權、應用程式和資料,以及裝置的位置資訊。如需詳細資訊,請洽您的管理員。"</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"你的裝置是由「<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>」所管理。"</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> 使用「<xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>」管理你的裝置。"</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"你的管理員可以監控及管理與你的裝置相關聯的設定、公司系統權限、應用程式和資料,以及裝置的位置資訊。"</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"瞭解詳情"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"由於你已連結至「<xliff:g id="VPN_APP">%1$s</xliff:g>」,你的網路活動 (包括收發電子郵件、使用應用程式及瀏覽網站) 可能會受到這個應用程式監控。"</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"開啟 VPN 設定"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"你的管理員已啟用網路紀錄功能,可監控你裝置上的流量。\n\n如需詳細資訊,請與你的管理員聯絡。"</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"您已授權一個應用程式設定 VPN 連線。\n\n這個應用程式可以監控您的裝置和網路活動,包括收發電子郵件、使用應用程式和瀏覽網站。"</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"您的裝置由下列機構管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您的管理員可以監控及管理與裝置相關的設定、企業網路存取權、應用程式和資料,以及裝置的位置資訊。\n\n由於您的裝置已連線至 VPN,您的網路活動也會受到 VPN 監控,包括收發電子郵件、使用應用程式和瀏覽網站。\n\n如需詳細資訊,請洽您的管理員。"</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"您的 Work 設定檔由下列機構管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您的管理員可以監控您的網路活動,包括收發電子郵件、使用應用程式及瀏覽網站。\n\n如需詳細資訊,請洽您的管理員。\n\n同時,由於您的裝置已連線至 VPN,您的網路活動也會受到 VPN 監控。"</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"由於您已連線至 <xliff:g id="APPLICATION">%1$s</xliff:g>,您的網路活動也會受到這個應用程式監控,包括收發電子郵件、使用應用程式和瀏覽網站。"</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"由於你已連結至「<xliff:g id="APPLICATION">%1$s</xliff:g>」,你的個人網路活動 (包括收發電子郵件、使用應用程式及瀏覽網站) 可能會受到這個應用程式監控。"</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"您的 Work 設定檔是由下列機構管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。由於設定檔已連線至 <xliff:g id="APPLICATION">%2$s</xliff:g>,您的工作網路活動也會受到這個應用程式監控,包括收發電子郵件、使用應用程式和瀏覽網站。\n\n詳情請洽您的管理員。"</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"您的 Work 設定檔是由下列機構管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。由於設定檔已連線至 <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>,您的工作網路活動也會受到這個應用程式監控,包括收發電子郵件、使用應用程式和瀏覽網站。\n\n同時由於您也連線至<xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>,您的個人網路活動也會受到這個應用程式監控。"</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"您的裝置由下列機構管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您的管理員可以監控及管理與裝置相關的設定、企業網路存取權、應用程式和資料,以及裝置的位置資訊。\n\n由於您的裝置已連線至 <xliff:g id="APPLICATION">%2$s</xliff:g>,您的網路活動也會受到這個應用程式監控,包括收發電子郵件、使用應用程式和瀏覽網站。\n\n如需詳細資訊,請洽您的管理員。"</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"在您手動解鎖前,裝置將保持鎖定狀態"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"更快取得通知"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"解鎖前顯示"</string>
@@ -430,31 +440,23 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"展開"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"收合"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"螢幕已固定"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"這會讓目前的螢幕畫面保持顯示狀態,直到取消固定為止。按住「返回」按鈕即可取消固定。"</string>
+ <string name="screen_pinning_description" msgid="8909878447196419623">"這會讓目前的螢幕畫面保持顯示狀態,直到取消固定為止。按住 [返回] 按鈕和 [總覽] 按鈕即可取消固定。"</string>
+ <string name="screen_pinning_description_accessible" msgid="426190689254018656">"這會讓目前的螢幕畫面保持顯示狀態,直到取消固定為止。按住 [總覽] 按鈕即可取消固定。"</string>
<string name="screen_pinning_positive" msgid="3783985798366751226">"知道了"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"不用了,謝謝"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"隱藏<xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"只要在設定頁面中重新啟用,就能再次看到快捷設定選項。"</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"隱藏"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」要求成為預設的音量控制對話方塊。"</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"允許"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"拒絕"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」現在是預設的音量控制對話方塊。"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"輕觸即可恢復原始設定。"</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"您正在使用 Work 設定檔"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"通話"</item>
- <item msgid="5997713001067658559">"系統"</item>
- <item msgid="7858983209929864160">"鈴聲"</item>
- <item msgid="1850038478268896762">"媒體"</item>
- <item msgid="8265110906352372092">"鬧鐘"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"藍牙"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"協助工具"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"通話"</string>
+ <string name="stream_system" msgid="7493299064422163147">"系統"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"鈴響"</string>
+ <string name="stream_music" msgid="9086982948697544342">"媒體"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"鬧鐘"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"通知"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"藍牙"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"雙音多頻"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"協助工具"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s。輕觸即可取消靜音。"</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s。輕觸即可設為震動,但系統可能會將無障礙服務一併設為靜音。"</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s。輕觸即可設為靜音,但系統可能會將無障礙服務一併設為靜音。"</string>
@@ -466,7 +468,7 @@
<string name="quick_settings" msgid="10042998191725428">"快速設定"</string>
<string name="status_bar" msgid="4877645476959324760">"狀態列"</string>
<string name="overview" msgid="4018602013895926956">"總覽"</string>
- <string name="demo_mode" msgid="2389163018533514619">"示範模式"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"系統 UI 示範模式"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"啟用示範模式"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"顯示示範模式"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"乙太網路"</string>
@@ -506,20 +508,17 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"開啟"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"關閉"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"只要使用電源通知控制項,您就能為應用程式通知設定從 0 到 5 的重要性等級。\n\n"<b>"等級 5"</b>" \n- 顯示在通知清單頂端 \n- 允許全螢幕通知 \n- 一律允許短暫顯示通知 \n\n"<b>"等級 4"</b>" \n- 禁止全螢幕通知 \n- 一律允許短暫顯示通知 \n\n"<b>"等級 3"</b>" \n- 禁止全螢幕通知 \n- 一律不允許短暫顯示通知 \n\n"<b>"等級 2"</b>" \n- 禁止全螢幕通知 \n- 一律不允許短暫顯示通知 \n- 一律不發出音效或震動 \n\n"<b>"等級 1"</b>" \n- 禁止全螢幕通知 \n- 一律不允許短暫顯示通知 \n- 一律不發出音效或震動 \n- 在鎖定畫面和狀態列中隱藏 \n- 顯示在通知清單底端 \n\n"<b>"等級 0"</b>" \n- 封鎖應用程式的所有通知"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"重要性:自動"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"重要性:等級 0"</string>
- <string name="min_importance" msgid="560779348928574878">"重要性:等級 1"</string>
- <string name="low_importance" msgid="7571498511534140">"重要性:等級 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"重要性:等級 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"重要性:等級 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"重要性:等級 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"應用程式會判定每則通知的重要性。"</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"一律不顯示這個應用程式的通知。"</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"禁止全螢幕通知、短暫顯示通知、音效或震動。不在鎖定畫面和狀態列中顯示。"</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"禁止全螢幕通知、短暫顯示通知、音效或震動。"</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"禁止全螢幕通知或短暫顯示通知。"</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"一律允許短暫顯示通知,禁止全螢幕通知。"</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"一律允許短暫顯示通知,同時允許全螢幕通知。"</string>
+ <string name="notification_header_default_channel" msgid="7506845022070889909">"通知"</string>
+ <string name="notification_channel_disabled" msgid="5805874247999578073">"你不會再收到這類通知。"</string>
+ <string name="notification_importance_header_app" msgid="3572576545406258751">"以下頻道的「<xliff:g id="APP">%s</xliff:g>」通知:"</string>
+ <string name="min_importance" msgid="7559703098688382595">"低"</string>
+ <string name="low_importance" msgid="6891335321576225228">"中"</string>
+ <string name="default_importance" msgid="6400766013567512061">"高"</string>
+ <string name="high_importance" msgid="730741630855788381">"緊急"</string>
+ <string name="notification_importance_min" msgid="3237794091374404537">"不發出音效或顯示通知"</string>
+ <string name="notification_importance_low" msgid="8929105501798019743">"顯示通知但不發出音效"</string>
+ <string name="notification_importance_default" msgid="9025125660733917469">"發出音效"</string>
+ <string name="notification_importance_high" msgid="3316555356062640222">"發出音效並在畫面上彈出通知"</string>
<string name="notification_more_settings" msgid="816306283396553571">"更多設定"</string>
<string name="notification_done" msgid="5279426047273930175">"完成"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」通知控制項"</string>
@@ -652,4 +651,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"編輯設定順序。"</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"第 <xliff:g id="ID_1">%1$d</xliff:g> 頁,共 <xliff:g id="ID_2">%2$d</xliff:g> 頁"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"展開"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"最小化"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"關閉"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"手機變熱"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"手機降溫時,部分功能會受限"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"手機會自動嘗試降溫。你仍可繼續使用手機,但是手機的運作速度可能會較慢。\n\n手機降溫完畢後,就會恢復正常的運作速度。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 9d76dc3..d5f98c2 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -163,6 +163,7 @@
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Ibhethri liyashaja, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> iphesenti."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Izilungiselelo zesistimu"</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Izaziso"</string>
+ <string name="notification_shelf_content_description" msgid="5511922384591583913">"Isiqukathi sokugeleza kwesaziso"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Sula isaziso"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"i-GPS inikwe amandla"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"i-GPS iyafuna"</string>
@@ -184,6 +185,8 @@
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Khiya isikrini."</string>
<string name="accessibility_desc_settings" msgid="3417884241751434521">"Izilungiselelo"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Buka konke."</string>
+ <!-- no translation found for accessibility_desc_work_lock (4288774420752813383) -->
+ <skip />
<string name="accessibility_desc_close" msgid="7479755364962766729">"Vala"</string>
<string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"I-Wifi ivaliwe."</string>
@@ -400,18 +403,26 @@
<string name="clear_all_notifications_text" msgid="814192889771462828">"Sula konke"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Qala manje"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Azikho izaziso"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"Idivayisi inganganyelwa"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Iphrofayela ingaqashwa"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Inethiwekhi kungenzeka iqashiwe"</string>
<string name="branded_vpn_footer" msgid="2168111859226496230">"Inethiwekhi kungenzeka iqashiwe"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Ukwengamela idivayisi"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Ukuqapha iphrofayela"</string>
<string name="monitoring_title" msgid="169206259253048106">"Ukuqashwa kwenethiwekhi"</string>
+ <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"I-VPN"</string>
+ <string name="monitoring_subtitle_network_logging" msgid="5569072711320784030">"Ukungena kwenethiwekhi"</string>
<string name="disable_vpn" msgid="4435534311510272506">"Khubaza i-VPN"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"Nqamula i-VPN"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Idivayisi yakho iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nUmlawuli wakho angaqapha aphinde aphathe izilungiselelo, ukufinyelela kwenkampani, izinhlelo zokusebenza, idatha ehlotshaniswa nedivayisi yakho, kanye nolwazi lwendawo yedivayisi yakho. Ukuze uthole olunye ulwazi xhumana nomlawuli wakho."</string>
+ <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Idivayisi yakho iphethwe yi-<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+ <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"I-<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> isebenzisa i-<xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ukuze iphathe idivayisi yakho."</string>
+ <string name="monitoring_description_do_body" msgid="6764108354701060766">"Umlawuli wakho angaqaphela aphinde aphathe izilungiselelo, ukufinyelela kwezinkampani, izinhlelo zokusebenza, idatha ehlotshaniswa nedivayisi yakho, nolwazi lwendawo yedivayisi yakho."</string>
+ <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+ <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Funda kabanzi"</string>
+ <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Uxhumeke ku-<xliff:g id="VPN_APP">%1$s</xliff:g>, engaqapha umsebenzi wenethiwekhi yakho, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi."</string>
+ <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+ <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Vula izilungiselelo ze-VPN"</string>
+ <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Umlawuli wakho uvule ukungena kwenethiwekhi, okuhlola ithrafikhi kudivayisi yakho.\n\nNgolwazi olubanzi xhumana nomlawuli wakho."</string>
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Unikeze uhlelo lokusebenza imvume yokusetha ukuxhumana kwe-VPN.\n\nLolu hlelo lokusebenza lungahlola idivayisi yakho nomsebenzi wenethiwekhi, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi."</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Idivayisi yakho iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nUmlawuli wakho angaqapha aphinde aphathe izilungiselelo, ukufinyelela kwezinkampani, izinhlelo zokusebenza, idatha ehlotshaniswa nedivayisi yakho, kanye nolwazi lwendawo yedivayisi yakho.\n\nUxhumeke ku-VPN, engaqapha umsebenzi wakho wenethiwekhi, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi.\n\nUkuze uthole olunye ulwazi, xhumana nomlawuli wakho."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Iphrofayela yakho yomsebenzi iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nUmqondisi wakho unamandla wokuqaphela umsebenzi wenethiwekhi yakho ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi.\n\nUkuze uthole olunye ulwazi, xhumana nomqondisi wakho.\n\nFuthi uxhumeke ku-VPN, engaqaphela umsebenzi wenethiwekhi yakho."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"I-VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Uxhumeke ku-<xliff:g id="APPLICATION">%1$s</xliff:g>, engahlola umsebenzi wakho wenethiwekhi ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi."</string>
@@ -419,7 +430,6 @@
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Uxhumeke ku-<xliff:g id="APPLICATION">%1$s</xliff:g>, engaqapha umsebenzi wakho womuntu siqu wenethiwekhi, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Iphrofayela yakho yomsebenzi iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ixhumeke ku-<xliff:g id="APPLICATION">%2$s</xliff:g>, engahlola umsebenzi wenethiwekhi yakho yokusebenza, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi.\n\nUkuze uthole olunye ulwazi, xhumana nomqondisi wakho."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Iphrofayela yakho yomsebenzi iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ixhumeke ku-<xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, engahlola umsebenzi wenethiwekhi yakho yomsebenzi, ofaka ama-imeyili, izinhlelo zokusebenza namawebhusayithi.\n\nFuthi uxhumeke ku-<xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, engahlola umsebenzi wenethiwekhi yakho yomuntu siqu."</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Idivayisi yakho iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nUmqondisi wakho angaqaphela aphinde aphathe izilungiselelo, ukufinyelela kwezinkampani, izinhlelo zokusebenza, idatha ehlotshaniswa nedivayisi yakho, nolwazi lendawo yedivayisi yakho.\n\nUxhumeke ku-<xliff:g id="APPLICATION">%2$s</xliff:g>, engaqaphela umsebenzi wakho wenethiwekhi, ofaka ama-imeyili, izinhlelo zokusebenza namawebhusayithi.\n\nUkuze uthole olunye ulwazi, xhumana nomqondisi wakho."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Idivayisi izohlala ikhiyekile uze uyivule ngokwenza"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Thola izaziso ngokushesha"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"Ibone ngaphambi kokuthi uyivule"</string>
@@ -430,31 +440,25 @@
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Nweba"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Goqa"</string>
<string name="screen_pinning_title" msgid="3273740381976175811">"Isikrini siphiniwe"</string>
- <string name="screen_pinning_description" msgid="7238941806855968768">"Lokhu kuyigcina ekubukekeni uze ususe ukuphinda. Thinta uphinde ubambe okuthi Emuva ukuze ususe ukuphina."</string>
+ <!-- no translation found for screen_pinning_description (8909878447196419623) -->
+ <skip />
+ <!-- no translation found for screen_pinning_description_accessible (426190689254018656) -->
+ <skip />
<string name="screen_pinning_positive" msgid="3783985798366751226">"Ngiyitholile"</string>
<string name="screen_pinning_negative" msgid="3741602308343880268">"Cha ngiyabonga"</string>
<string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Fihla i-<xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
<string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Izovela ngesikhathi esilandelayo uma uvule lesi silungiselelo."</string>
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Fihla"</string>
- <string name="volumeui_prompt_message" msgid="918680947433389110">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> ifuna ukuba yingxoxo yevolumu."</string>
- <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Vumela"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Phika"</string>
- <string name="volumeui_notification_title" msgid="4906770126345910955">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> yingxoxo yevolumu"</string>
- <string name="volumeui_notification_text" msgid="8819536904234337445">"Thepha ukuze ubuyisele okwasekuqaleni."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Usebenzisa iphrofayela yakho yomsebenzi"</string>
- <string-array name="volume_stream_titles">
- <item msgid="5841843895402729630">"Shayela"</item>
- <item msgid="5997713001067658559">"Isistimu"</item>
- <item msgid="7858983209929864160">"Khalisa"</item>
- <item msgid="1850038478268896762">"Abezindaba"</item>
- <item msgid="8265110906352372092">"I-Alamu"</item>
- <item msgid="5339394737636839168"></item>
- <item msgid="2951313578278086204">"I-Bluetooth"</item>
- <item msgid="2919807739709798970"></item>
- <item msgid="150349973435223405"></item>
- <item msgid="6761963760295549099"></item>
- <item msgid="8119402510273906841">"Ukufinyeleleka"</item>
- </string-array>
+ <string name="stream_voice_call" msgid="4410002696470423714">"Shaya"</string>
+ <string name="stream_system" msgid="7493299064422163147">"Isistimu"</string>
+ <string name="stream_ring" msgid="8213049469184048338">"Khalisa"</string>
+ <string name="stream_music" msgid="9086982948697544342">"Imidiya"</string>
+ <string name="stream_alarm" msgid="5209444229227197703">"I-alamu"</string>
+ <string name="stream_notification" msgid="2563720670905665031">"Isaziso"</string>
+ <string name="stream_bluetooth_sco" msgid="2055645746402746292">"I-Bluetooth"</string>
+ <string name="stream_dtmf" msgid="2447177903892477915">"Ifrikhwensi yethoni engakuningi"</string>
+ <string name="stream_accessibility" msgid="301136219144385106">"Ukufinyeleleka"</string>
<string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Thepha ukuze ususe ukuthula."</string>
<string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Thepha ukuze usethe ukudlidliza. Amasevisi okufinyelela angathuliswa."</string>
<string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Thepha ukuze uthulise. Amasevisi okufinyelela angathuliswa."</string>
@@ -466,7 +470,7 @@
<string name="quick_settings" msgid="10042998191725428">"Izilungiselelo ezisheshayo"</string>
<string name="status_bar" msgid="4877645476959324760">"Ibha yesimo"</string>
<string name="overview" msgid="4018602013895926956">"Okufingqiwe"</string>
- <string name="demo_mode" msgid="2389163018533514619">"Imodi yedemo"</string>
+ <string name="demo_mode" msgid="2532177350215638026">"Imodi yedemo ye-UI yesistimu"</string>
<string name="enable_demo_mode" msgid="4844205668718636518">"Nika amandla imodi yedemo"</string>
<string name="show_demo_mode" msgid="2018336697782464029">"Bonisa imodi yedemo"</string>
<string name="status_bar_ethernet" msgid="5044290963549500128">"I-Ethernet"</string>
@@ -506,20 +510,28 @@
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Vuliwe"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Valiwe"</string>
<string name="power_notification_controls_description" msgid="4372459941671353358">"Ngezilawuli zesaziso zamandla, ungasetha ileveli ebalulekile kusuka ku-0 kuya ku-5 kusuka kuzaziso zohlelo lokusebenza. \n\n"<b>"Ileveli 5"</b>" \n- Ibonisa phezulu kuhlu lwesaziso \n- Vumela ukuphazamiseka kwesikrini esigcwele \n- Ukuhlola njalo \n\n"<b>"Ileveli 4"</b>" \n- Gwema ukuphazamiseka kwesikrini esigcwele \n- Ukuhlola njalo \n\n"<b>"Ileveli 3"</b>" \n- Gwema ukuphazamiseka kwesikrini esigcwele \n- Ukungahloli \n\n"<b>"Ileveli 2"</b>" \n- Gwema ukuphazamiseka kwesikrini esigcwele \n- Ukungahloli \n- Ungenzi umsindo nokudlidliza \n\n"<b>"Ileveli 1"</b>" \n- Gwema ukuphazamiseka kwesikrini esigcwele \n- Ukungahloli \n- Ungenzi umsindo noma ukudlidliza \n- Fihla kusuka kusikrini sokukhiya nebha yesimo \n- Bonisa phansi kohlu lwesaziso \n\n"<b>"Ileveli 0"</b>" \n- Vimbela zonke izaziso kusuka kuhlelo lokusebenza"</string>
- <string name="user_unspecified_importance" msgid="361613856933432117">"Okubalulekile: Ukuzenzakalela"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Okubalulekile: Ileveli 0"</string>
- <string name="min_importance" msgid="560779348928574878">"Okubalulekile: Ileveli 1"</string>
- <string name="low_importance" msgid="7571498511534140">"Okubalulekile: Ileveli 2"</string>
- <string name="default_importance" msgid="7609889614553354702">"Okubalulekile: Ileveli 3"</string>
- <string name="high_importance" msgid="3441537905162782568">"Okubalulekile: Ileveli 4"</string>
- <string name="max_importance" msgid="4880179829869865275">"Okubalulekile: Ileveli 5"</string>
- <string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Uhlelo lokusebenza linquma ukubaluleka kwesaziso ngasinye."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Ungalokothi ubonise izaziso kusuka kulolu hlelo lokusebenza."</string>
- <string name="notification_importance_min" msgid="7844224511187027155">"Akukho ukuphazamisa kwesikrini esigcwele, ukuhlola, umsindo, noma ukudlidliza. Fihla kusuka esikrinini sokukhiya nebha yesimo."</string>
- <string name="notification_importance_low" msgid="7950291702044409847">"Akukho ukuphazamiseka kwesikrini esigcwele, ukuhlola umsindo, noma ukudlidliza."</string>
- <string name="notification_importance_default" msgid="5924405820269074915">"Akukho ukuphazamiseka kwesikrini esigcwele noma ukuvimbela."</string>
- <string name="notification_importance_high" msgid="1729480727023990427">"Njalo hlola. Akukho ukuphazamisa kwesikrini esigcwele."</string>
- <string name="notification_importance_max" msgid="2508384624461849111">"Njalo hlola, futhi vumela ukuphazamisa kwesikrini esigcwele."</string>
+ <!-- no translation found for notification_header_default_channel (7506845022070889909) -->
+ <skip />
+ <!-- no translation found for notification_channel_disabled (5805874247999578073) -->
+ <skip />
+ <!-- no translation found for notification_importance_header_app (3572576545406258751) -->
+ <skip />
+ <!-- no translation found for min_importance (7559703098688382595) -->
+ <skip />
+ <!-- no translation found for low_importance (6891335321576225228) -->
+ <skip />
+ <!-- no translation found for default_importance (6400766013567512061) -->
+ <skip />
+ <!-- no translation found for high_importance (730741630855788381) -->
+ <skip />
+ <!-- no translation found for notification_importance_min (3237794091374404537) -->
+ <skip />
+ <!-- no translation found for notification_importance_low (8929105501798019743) -->
+ <skip />
+ <!-- no translation found for notification_importance_default (9025125660733917469) -->
+ <skip />
+ <!-- no translation found for notification_importance_high (3316555356062640222) -->
+ <skip />
<string name="notification_more_settings" msgid="816306283396553571">"Izilungiselelo eziningi"</string>
<string name="notification_done" msgid="5279426047273930175">"Kwenziwe"</string>
<string name="notification_gear_accessibility" msgid="94429150213089611">"<xliff:g id="APP_NAME">%1$s</xliff:g> izilawuli zasaziso"</string>
@@ -652,4 +664,9 @@
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Hlela uhlelo lwezilungiselelo."</string>
<string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Ikhasi <xliff:g id="ID_1">%1$d</xliff:g> kwangu-<xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"Nweba"</string>
+ <string name="pip_phone_minimize" msgid="1079119422589131792">"Nciphisa"</string>
+ <string name="pip_phone_dismiss" msgid="1305916715402775904">"Cashisa"</string>
+ <string name="high_temp_title" msgid="4589508026407318374">"Ifoni iyafudumala"</string>
+ <string name="high_temp_notif_message" msgid="5642466103153429279">"Ezinye izici zikhawulelwe ngenkathi ifoni iphola"</string>
+ <string name="high_temp_dialog_message" msgid="6840700639374113553">"Ifoni yakho izozama ngokuzenzakalela ukuphola. Ungasasebenzisa ifoni yakho, kodwa ingasebenza ngokungasheshi.\n\nUma ifoni yakho isipholile, izosebenza ngokuvamile."</string>
</resources>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index c025f93..50ef392 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -290,6 +290,11 @@
<bool name="quick_settings_show_full_alarm">false</bool>
+ <!-- Whether to show a warning notification when the device reaches a certain temperature. -->
<bool name="config_showTemperatureWarning">false</bool>
+ <!-- Temp at which to show a warning notification if config_showTemperatureWarning is true.
+ If < 0, uses the value from HardwarePropertiesManager#getDeviceTemperatures. -->
+ <integer name="config_warningTemperature">-1</integer>
+
</resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index ca4214b..78d211f 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -724,10 +724,7 @@
<!-- The alpha to apply to the recents row when it doesn't have focus -->
<item name="recents_recents_row_dim_alpha" format="float" type="dimen">0.5</item>
- <!-- The size of the PIP dismiss target. -->
+ <!-- The size of the PIP drag-to-dismiss target. -->
<dimen name="pip_dismiss_target_size">48dp</dimen>
- <!-- The size of a PIP menu action icon. -->
- <dimen name="pip_menu_action_icon_size">32dp</dimen>
-
</resources>
diff --git a/packages/SystemUI/res/values/ids.xml b/packages/SystemUI/res/values/ids.xml
index 56cd8c7..4a19dde 100644
--- a/packages/SystemUI/res/values/ids.xml
+++ b/packages/SystemUI/res/values/ids.xml
@@ -52,7 +52,6 @@
<item type="id" name="notification_power"/>
<item type="id" name="notification_screenshot"/>
<item type="id" name="notification_hidden"/>
- <item type="id" name="notification_volumeui"/>
<item type="id" name="notification_temperature"/>
<item type="id" name="notification_plugin"/>
<item type="id" name="transformation_start_x_tag"/>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index d7033b2..05963ac 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -460,6 +460,8 @@
<string name="accessibility_desc_settings">Settings</string>
<!-- Content description for the recent apps panel (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_desc_recent_apps">Overview.</string>
+ <!-- Content description for the graphic shown instead of an activity window while the activity is locked (not shown on the screen). [CHAR LIMIT=NONE] -->
+ <string name="accessibility_desc_work_lock">Work lock screen</string>
<!-- Content description for the close button in the zen mode panel introduction message. [CHAR LIMIT=NONE] -->
<string name="accessibility_desc_close">Close</string>
@@ -1125,21 +1127,6 @@
<!-- Hide quick settings tile confirmation button -->
<string name="quick_settings_reset_confirmation_button">Hide</string>
- <!-- VolumeUI activation dialog: warning message -->
- <string name="volumeui_prompt_message"><xliff:g id="app_name" example="Volume Prototype 1">%1$s</xliff:g> wants to be the volume dialog.</string>
-
- <!-- VolumeUI activation dialog: allow button label -->
- <string name="volumeui_prompt_allow">Allow</string>
-
- <!-- VolumeUI activation dialog: deny button label -->
- <string name="volumeui_prompt_deny">Deny</string>
-
- <!-- VolumeUI restoration notification: title -->
- <string name="volumeui_notification_title"><xliff:g id="app_name" example="Volume Prototype 1">%1$s</xliff:g> is the volume dialog</string>
-
- <!-- VolumeUI restoration notification: text -->
- <string name="volumeui_notification_text">Tap to restore the original.</string>
-
<!-- Toast shown when user unlocks screen and managed profile activity is in the foreground -->
<string name="managed_profile_foreground_toast">You\'re using your work profile</string>
@@ -1719,14 +1706,6 @@
not appear on production builds ever. -->
<string name="picture_in_picture" translatable="false">Picture-in-Picture</string>
- <!-- PIP swipe to dismiss title. Non-translatable since it should
- not appear on production builds ever. -->
- <string name="pip_swipe_to_dismiss_title" translatable="false">Swipe to dismiss</string>
-
- <!-- PIP swipe to dismiss description. Non-translatable since it should
- not appear on production builds ever. -->
- <string name="pip_swipe_to_dismiss_summary" translatable="false">Swipe left or right off screen to close the PIP</string>
-
<!-- PIP drag to dismiss title. Non-translatable since it should
not appear on production builds ever. -->
<string name="pip_drag_to_dismiss_title" translatable="false">Drag to dismiss</string>
@@ -1735,22 +1714,6 @@
not appear on production builds ever. -->
<string name="pip_drag_to_dismiss_summary" translatable="false">Drag to the dismiss target at the bottom of the screen to close the PIP</string>
- <!-- PIP tap once to break through to the activity title. Non-translatable since it should
- not appear on production builds ever. -->
- <string name="pip_tap_through_title" translatable="false">Tap to interact</string>
-
- <!-- PIP tap once to break through to the activity description. Non-translatable since it should
- not appear on production builds ever. -->
- <string name="pip_tap_through_summary" translatable="false">Tap once to interact with the activity</string>
-
- <!-- PIP snap to closest edge title. Non-translatable since it should
- not appear on production builds ever. -->
- <string name="pip_snap_mode_edge_title" translatable="false">Snap to closest edge</string>
-
- <!-- PIP snap to closest edge description. Non-translatable since it should
- not appear on production builds ever. -->
- <string name="pip_snap_mode_edge_summary" translatable="false">Snap to the closest edge</string>
-
<!-- PIP allow minimize title. Non-translatable since it should
not appear on production builds ever. -->
<string name="pip_allow_minimize_title" translatable="false">Allow PIP to minimize</string>
@@ -1768,7 +1731,7 @@
<!-- Title for notification (and dialog) that user's phone has reached a certain temperature and may start to slow down in order to cool down. [CHAR LIMIT=30] -->
<string name="high_temp_title">Phone is getting warm</string>
- <!-- Message body for notification that user's phone has reached a certain temperature and may start to slow down in order to cool down. [CHAR LIMIT=70] -->
+ <!-- Message body for notification that user's phone has reached a certain temperature and may start to slow down in order to cool down. [CHAR LIMIT=100] -->
<string name="high_temp_notif_message">Some features limited while phone cools down</string>
<!-- Text body for dialog alerting user that their phone has reached a certain temperature and may start to slow down in order to cool down. [CHAR LIMIT=300] -->
<string name="high_temp_dialog_message">Your phone will automatically try to cool down. You can still use your phone, but it may run slower.\n\nOnce your phone has cooled down, it will run normally.</string>
diff --git a/packages/SystemUI/res/xml/tuner_prefs.xml b/packages/SystemUI/res/xml/tuner_prefs.xml
index 74d5d6c..59a10da 100644
--- a/packages/SystemUI/res/xml/tuner_prefs.xml
+++ b/packages/SystemUI/res/xml/tuner_prefs.xml
@@ -126,34 +126,16 @@
android:title="@string/picture_in_picture">
<com.android.systemui.tuner.TunerSwitch
- android:key="pip_swipe_to_dismiss"
- android:title="@string/pip_swipe_to_dismiss_title"
- android:summary="@string/pip_swipe_to_dismiss_summary"
- sysui:defValue="true" />
-
- <com.android.systemui.tuner.TunerSwitch
android:key="pip_drag_to_dismiss"
android:title="@string/pip_drag_to_dismiss_title"
android:summary="@string/pip_drag_to_dismiss_summary"
- sysui:defValue="true" />
-
- <com.android.systemui.tuner.TunerSwitch
- android:key="pip_tap_through"
- android:title="@string/pip_tap_through_title"
- android:summary="@string/pip_tap_through_summary"
- sysui:defValue="false" />
-
- <com.android.systemui.tuner.TunerSwitch
- android:key="pip_snap_mode_edge"
- android:title="@string/pip_snap_mode_edge_title"
- android:summary="@string/pip_snap_mode_edge_summary"
- sysui:defValue="false" />
+ sysui:defValue="false" />
<com.android.systemui.tuner.TunerSwitch
android:key="pip_allow_minimize"
android:title="@string/pip_allow_minimize_title"
android:summary="@string/pip_allow_minimize_summary"
- sysui:defValue="false" />
+ sysui:defValue="true" />
</PreferenceScreen>
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
index b207984..1988023 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
@@ -42,6 +42,7 @@
import com.android.systemui.recents.Recents;
import com.android.systemui.shortcut.ShortcutKeyDispatcher;
import com.android.systemui.stackdivider.Divider;
+import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.SystemBars;
import com.android.systemui.statusbar.phone.PhoneStatusBar;
import com.android.systemui.tuner.TunerService;
@@ -65,6 +66,7 @@
private final Class<?>[] SERVICES = new Class[] {
FragmentService.class,
TunerService.class,
+ CommandQueue.CommandQueueStart.class,
KeyguardViewMediator.class,
Recents.class,
VolumeUI.class,
@@ -78,7 +80,6 @@
ShortcutKeyDispatcher.class,
VendorServices.class,
LatencyTester.class,
- DozeFactory.Initializer.class,
};
/**
diff --git a/packages/SystemUI/src/com/android/systemui/SysuiRestartReceiver.java b/packages/SystemUI/src/com/android/systemui/SysuiRestartReceiver.java
new file mode 100644
index 0000000..cdeef2f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/SysuiRestartReceiver.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package com.android.systemui;
+
+import android.app.NotificationManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Process;
+
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
+
+public class SysuiRestartReceiver extends BroadcastReceiver {
+
+ public static String ACTION = "com.android.systemui.action.RESTART";
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (ACTION.equals(intent.getAction())) {
+ String pkg = intent.getData().toString().substring(10);
+ NotificationManager.from(context).cancel(pkg, SystemMessage.NOTE_PLUGIN);
+ Process.killProcess(Process.myPid());
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java b/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java
index 5b10756..aa22618 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java
@@ -34,31 +34,10 @@
public class DozeFactory {
- private static DozeFactory sInstance;
+ private final DozeProvider mDozePlugin;
- private DozeProvider mDozePlugin;
-
- /** Returns the singleton instance. */
- public static DozeFactory getInstance(Context context) {
- if (sInstance == null) {
- sInstance = new DozeFactory();
- PluginManager.getInstance(context).addPluginListener(DozeProvider.ACTION,
- new PluginListener<DozeProvider>() {
- @Override
- public void onPluginConnected(DozeProvider plugin) {
- sInstance.mDozePlugin = plugin;
- }
-
- @Override
- public void onPluginDisconnected(DozeProvider plugin) {
- if (sInstance.mDozePlugin == plugin) {
- sInstance.mDozePlugin = null;
- }
- }
- },
- DozeProvider.VERSION, false /* Only one */);
- }
- return sInstance;
+ public DozeFactory(DozeProvider plugin) {
+ mDozePlugin = plugin;
}
/** Creates a DozeMachine with its parts for {@code dozeService}. */
@@ -173,7 +152,7 @@
}
}
- private static DozeHost getHost(DozeService service) {
+ public static DozeHost getHost(DozeService service) {
Application appCandidate = service.getApplication();
final SystemUIApplication app = (SystemUIApplication) appCandidate;
return app.getComponent(DozeHost.class);
@@ -202,13 +181,4 @@
return mInner.wrap(runnable);
}
}
-
- /** Hack: We need to initialize the plugin listener before doze actually starts.
- * This will be unnecessary once we have proper one-shot support */
- public static class Initializer extends SystemUI {
- @Override
- public void start() {
- getInstance(mContext);
- }
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java
index 78b96b3..828728f 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java
@@ -19,6 +19,10 @@
import android.service.dreams.DreamService;
import android.util.Log;
+import com.android.systemui.plugins.Plugin;
+import com.android.systemui.plugins.PluginManager;
+import com.android.systemui.plugins.doze.DozeProvider;
+
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -38,7 +42,14 @@
setWindowless(true);
- mDozeMachine = DozeFactory.getInstance(getApplication()).assembleMachine(this);
+ if (DozeFactory.getHost(this) == null) {
+ finish();
+ return;
+ }
+
+ DozeProvider provider = PluginManager.getInstance(this)
+ .getOneShotPlugin(DozeProvider.ACTION, DozeProvider.VERSION);
+ mDozeMachine = new DozeFactory(provider).assembleMachine(this);
}
@Override
@@ -56,6 +67,8 @@
@Override
protected void dumpOnHandler(FileDescriptor fd, PrintWriter pw, String[] args) {
- mDozeMachine.dump(pw);
+ if (mDozeMachine != null) {
+ mDozeMachine.dump(pw);
+ }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index 8e5db97..ce89aab 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -326,6 +326,12 @@
*/
private boolean mPendingLock;
+ /**
+ * Controller for showing individual "work challenge" lock screen windows inside managed profile
+ * tasks when the current user has been unlocked but the profile is still locked.
+ */
+ private WorkLockActivityController mWorkLockController;
+
private boolean mLockLater;
private boolean mWakeAndUnlocking;
@@ -708,6 +714,8 @@
mHideAnimation = AnimationUtils.loadAnimation(mContext,
com.android.internal.R.anim.lock_screen_behind_enter);
+
+ mWorkLockController = new WorkLockActivityController(mContext);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivity.java b/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivity.java
new file mode 100644
index 0000000..63d1cc2
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivity.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.systemui.keyguard;
+
+import static android.app.ActivityManager.TaskDescription;
+
+import android.annotation.ColorInt;
+import android.annotation.UserIdInt;
+import android.app.Activity;
+import android.app.ActivityManager;
+import android.app.ActivityOptions;
+import android.app.KeyguardManager;
+import android.app.PendingIntent;
+import android.app.admin.DevicePolicyManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.util.Log;
+import android.view.View;
+
+/**
+ * Bouncer between work activities and the activity used to confirm credentials before unlocking
+ * a managed profile.
+ * <p>
+ * Shows a solid color when started, based on the organization color of the user it is supposed to
+ * be blocking. Once focused, it switches to a screen to confirm credentials and auto-dismisses if
+ * credentials are accepted.
+ */
+public class WorkLockActivity extends Activity {
+ private static final String TAG = "WorkLockActivity";
+
+ /**
+ * ID of the locked user that this activity blocks access to.
+ */
+ @UserIdInt
+ private int mUserId;
+
+ /**
+ * {@see KeyguardManager}
+ */
+ private KeyguardManager mKgm;
+
+ /**
+ * {@see DevicePolicyManager}
+ */
+ private DevicePolicyManager mDpm;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ mUserId = getIntent().getIntExtra(Intent.EXTRA_USER_ID, UserHandle.myUserId());
+ mDpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
+ mKgm = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
+
+ final IntentFilter lockFilter = new IntentFilter();
+ lockFilter.addAction(Intent.ACTION_DEVICE_LOCKED_CHANGED);
+ registerReceiverAsUser(mLockEventReceiver, UserHandle.ALL, lockFilter,
+ /* permission */ null, /* scheduler */ null);
+
+ // Once the receiver is registered, check whether anything happened between now and the time
+ // when this activity was launched. If it did and the user is unlocked now, just quit.
+ if (!mKgm.isDeviceLocked(mUserId)) {
+ finish();
+ return;
+ }
+
+ // Get the organization color; this is a 24-bit integer provided by a DPC, guaranteed to
+ // be completely opaque.
+ final @ColorInt int color = mDpm.getOrganizationColorForUser(mUserId);
+
+ // Draw captions overlaid on the content view, so the whole window is one solid color.
+ setOverlayWithDecorCaptionEnabled(true);
+
+ // Match task description to the task stack we are replacing so it's still recognizably the
+ // original task stack with the same icon and title text.
+ setTaskDescription(new TaskDescription(null, null, color));
+
+ // Blank out the activity. When it is on-screen it will look like a Recents thumbnail with
+ // redaction switched on.
+ final View blankView = new View(this);
+ blankView.setBackgroundColor(color);
+ setContentView(blankView);
+ }
+
+ /**
+ * Respond to focus events by showing the prompt to confirm credentials.
+ * <p>
+ * We don't have anything particularly interesting to show here (just a solid-colored page) so
+ * there is no sense in sitting in the foreground doing nothing.
+ */
+ @Override
+ public void onWindowFocusChanged(boolean hasFocus) {
+ if (hasFocus) {
+ showConfirmCredentialActivity();
+ }
+ }
+
+ @Override
+ public void onDestroy() {
+ unregisterReceiver(mLockEventReceiver);
+ super.onDestroy();
+ }
+
+ @Override
+ public void onBackPressed() {
+ // Ignore back presses.
+ return;
+ }
+
+ private final BroadcastReceiver mLockEventReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, mUserId);
+ if (userId == mUserId && !mKgm.isDeviceLocked(mUserId)) {
+ finish();
+ }
+ }
+ };
+
+ private void showConfirmCredentialActivity() {
+ if (isFinishing() || !mKgm.isDeviceLocked(mUserId)) {
+ // Don't show the confirm credentials screen if we are already unlocked / unlocking.
+ return;
+ }
+
+ final Intent credential = mKgm.createConfirmDeviceCredentialIntent(null, null, mUserId);
+ if (credential == null) {
+ return;
+ }
+
+ final ActivityOptions options = ActivityOptions.makeBasic();
+ options.setLaunchTaskId(getTaskId());
+
+ // Bring this activity back to the foreground after confirming credentials.
+ final PendingIntent target = PendingIntent.getActivity(this, /* request */ -1, getIntent(),
+ PendingIntent.FLAG_CANCEL_CURRENT |
+ PendingIntent.FLAG_ONE_SHOT |
+ PendingIntent.FLAG_IMMUTABLE, options.toBundle());
+
+ credential.putExtra(Intent.EXTRA_INTENT, target.getIntentSender());
+ try {
+ ActivityManager.getService().startConfirmDeviceCredentialIntent(credential);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to start confirm credential intent", e);
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivityController.java b/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivityController.java
new file mode 100644
index 0000000..22fceff
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivityController.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.systemui.keyguard;
+
+import android.app.Activity;
+import android.app.ActivityOptions;
+import android.app.KeyguardManager;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.UserHandle;
+
+import com.android.systemui.recents.events.EventBus;
+import com.android.systemui.recents.misc.SystemServicesProxy;
+import com.android.systemui.recents.misc.SystemServicesProxy.TaskStackListener;
+
+public class WorkLockActivityController {
+ private final Context mContext;
+
+ public WorkLockActivityController(Context context) {
+ mContext = context;
+ EventBus.getDefault().register(this);
+ SystemServicesProxy.getInstance(context).registerTaskStackListener(mLockListener);
+ }
+
+ private void startWorkChallengeInTask(int taskId, int userId) {
+ Intent intent = new Intent(KeyguardManager.ACTION_CONFIRM_DEVICE_CREDENTIAL_WITH_USER)
+ .setComponent(new ComponentName(mContext, WorkLockActivity.class))
+ .putExtra(Intent.EXTRA_USER_ID, userId)
+ .addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
+ | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
+ | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+
+ final ActivityOptions options = ActivityOptions.makeBasic();
+ options.setLaunchTaskId(taskId);
+ options.setTaskOverlay(true);
+ mContext.startActivityAsUser(intent, options.toBundle(), UserHandle.CURRENT);
+ }
+
+ private final TaskStackListener mLockListener = new TaskStackListener() {
+ @Override
+ public void onTaskProfileLocked(int taskId, int userId) {
+ startWorkChallengeInTask(taskId, userId);
+ }
+ };
+}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java
index e4f7816..1798730 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java
@@ -66,7 +66,6 @@
private final List<RemoteAction> mActions = new ArrayList<>();
private View mMenuContainer;
private View mDismissButton;
- private View mExpandButton;
private ObjectAnimator mMenuContainerAnimator;
@@ -126,10 +125,6 @@
mDismissButton.setOnClickListener((v) -> {
dismissPip();
});
- mExpandButton = findViewById(R.id.expand);
- mExpandButton.setOnClickListener((v) -> {
- expandPip();
- });
notifyActivityCallback(mMessenger);
showMenu();
@@ -245,29 +240,35 @@
}
private void updateActionViews() {
- ViewGroup actionsContainer = (ViewGroup) findViewById(R.id.actions);
- if (actionsContainer != null) {
- actionsContainer.removeAllViews();
+ ViewGroup actionsContainer = (ViewGroup) findViewById(R.id.actions_container);
+ actionsContainer.setOnTouchListener((v, ev) -> {
+ // Do nothing, prevent click through to parent
+ return true;
+ });
- // Recreate the layout
- final LayoutInflater inflater = LayoutInflater.from(this);
- for (int i = 0; i < mActions.size(); i++) {
- final RemoteAction action = mActions.get(i);
- final ViewGroup actionContainer = (ViewGroup) inflater.inflate(
- R.layout.pip_menu_action, actionsContainer, false);
- actionContainer.setOnClickListener((v) -> {
- action.sendActionInvoked();
- });
+ if (mActions.isEmpty()) {
+ actionsContainer.setVisibility(View.INVISIBLE);
+ } else {
+ actionsContainer.setVisibility(View.VISIBLE);
+ ViewGroup actionsGroup = (ViewGroup) findViewById(R.id.actions);
+ if (actionsGroup != null) {
+ actionsGroup.removeAllViews();
- final TextView title = (TextView) actionContainer.findViewById(R.id.title);
- title.setText(action.getTitle());
- title.setContentDescription(action.getContentDescription());
-
- final ImageView icon = (ImageView) actionContainer.findViewById(R.id.icon);
- action.getIcon().loadDrawableAsync(this, (d) -> {
- icon.setImageDrawable(d);
- }, mHandler);
- actionsContainer.addView(actionContainer);
+ // Recreate the layout
+ final LayoutInflater inflater = LayoutInflater.from(this);
+ for (int i = 0; i < mActions.size(); i++) {
+ final RemoteAction action = mActions.get(i);
+ final ImageView actionView = (ImageView) inflater.inflate(
+ R.layout.pip_menu_action, actionsGroup, false);
+ action.getIcon().loadDrawableAsync(this, d -> {
+ actionView.setImageDrawable(d);
+ }, mHandler);
+ actionView.setContentDescription(action.getContentDescription());
+ actionView.setOnClickListener(v -> {
+ action.sendActionInvoked();
+ });
+ actionsGroup.addView(actionView);
+ }
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
index 380e4683..d5ae3ad 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
@@ -58,10 +58,7 @@
private static final String TAG = "PipTouchHandler";
private static final boolean DEBUG_ALLOW_OUT_OF_BOUNDS_STACK = false;
- private static final String TUNER_KEY_SWIPE_TO_DISMISS = "pip_swipe_to_dismiss";
private static final String TUNER_KEY_DRAG_TO_DISMISS = "pip_drag_to_dismiss";
- private static final String TUNER_KEY_TAP_THROUGH = "pip_tap_through";
- private static final String TUNER_KEY_SNAP_MODE_EDGE = "pip_snap_mode_edge";
private static final String TUNER_KEY_ALLOW_MINIMIZE = "pip_allow_minimize";
private static final int SNAP_STACK_DURATION = 225;
@@ -71,8 +68,6 @@
// The fraction of the stack width that the user has to drag offscreen to minimize the PIP
private static final float MINIMIZE_OFFSCREEN_FRACTION = 0.15f;
- // The fraction of the stack width that the user has to move when flinging to dismiss the PIP
- private static final float DISMISS_FLING_DISTANCE_FRACTION = 0.3f;
private final Context mContext;
private final IActivityManager mActivityManager;
@@ -87,16 +82,10 @@
private final PipSnapAlgorithm mSnapAlgorithm;
private PipMotionHelper mMotionHelper;
- // Allow swiping offscreen to dismiss the PIP
- private boolean mEnableSwipeToDismiss = true;
// Allow dragging the PIP to a location to close it
- private boolean mEnableDragToDismiss = true;
- // Allow tapping on the PIP to show additional controls
- private boolean mEnableTapThrough = false;
- // Allow snapping the PIP to the closest edge and not the corners of the screen
- private boolean mEnableSnapToEdge = false;
+ private boolean mEnableDragToDismiss = false;
// Allow the PIP to be "docked" slightly offscreen
- private boolean mEnableMinimizing = false;
+ private boolean mEnableMinimizing = true;
private final Rect mPinnedStackBounds = new Rect();
private final Rect mBoundedPinnedStackBounds = new Rect();
@@ -192,16 +181,15 @@
mSnapAlgorithm = new PipSnapAlgorithm(mContext);
mTouchState = new PipTouchState(mViewConfig);
mFlingAnimationUtils = new FlingAnimationUtils(context, 2f);
- mGestures = new PipTouchGesture[]{
- mDragToDismissGesture, mSwipeToDismissGesture, mTapThroughGesture, mMinimizeGesture,
- mDefaultMovementGesture
+ mGestures = new PipTouchGesture[] {
+ mDragToDismissGesture, mTapThroughGesture, mMinimizeGesture, mDefaultMovementGesture
};
mMotionHelper = new PipMotionHelper(BackgroundThread.getHandler());
registerInputConsumer();
+ setSnapToEdge(true);
// Register any tuner settings changes
- TunerService.get(context).addTunable(this, TUNER_KEY_SWIPE_TO_DISMISS,
- TUNER_KEY_DRAG_TO_DISMISS, TUNER_KEY_TAP_THROUGH, TUNER_KEY_SNAP_MODE_EDGE,
+ TunerService.get(context).addTunable(this, TUNER_KEY_DRAG_TO_DISMISS,
TUNER_KEY_ALLOW_MINIMIZE);
}
@@ -209,34 +197,18 @@
public void onTuningChanged(String key, String newValue) {
if (newValue == null) {
// Reset back to default
- mEnableSwipeToDismiss = true;
- mEnableDragToDismiss = true;
- mEnableMinimizing = false;
+ mEnableDragToDismiss = false;
+ mEnableMinimizing = true;
setMinimizedState(false);
- mEnableTapThrough = false;
- mIsTappingThrough = false;
- mEnableSnapToEdge = false;
- setSnapToEdge(false);
return;
}
switch (key) {
- case TUNER_KEY_SWIPE_TO_DISMISS:
- mEnableSwipeToDismiss = Integer.parseInt(newValue) != 0;
- break;
case TUNER_KEY_DRAG_TO_DISMISS:
mEnableDragToDismiss = Integer.parseInt(newValue) != 0;
break;
case TUNER_KEY_ALLOW_MINIMIZE:
mEnableMinimizing = Integer.parseInt(newValue) != 0;
break;
- case TUNER_KEY_TAP_THROUGH:
- mEnableTapThrough = Integer.parseInt(newValue) != 0;
- mIsTappingThrough = false;
- break;
- case TUNER_KEY_SNAP_MODE_EDGE:
- mEnableSnapToEdge = Integer.parseInt(newValue) != 0;
- setSnapToEdge(mEnableSnapToEdge);
- break;
}
}
@@ -481,45 +453,6 @@
}
/**
- * @return whether the velocity is coincident with the current pinned stack bounds to be
- * considered a fling to dismiss.
- */
- private boolean isFlingToDismiss(float velocityX) {
- Point displaySize = new Point();
- mContext.getDisplay().getRealSize(displaySize);
- return (mPinnedStackBounds.right > displaySize.x && velocityX > 0) ||
- (mPinnedStackBounds.left < 0 && velocityX < 0);
- }
-
- /**
- * Flings the PIP to dismiss it offscreen.
- */
- private void flingToDismiss(float velocityX) {
- Point displaySize = new Point();
- mContext.getDisplay().getRealSize(displaySize);
- float offsetX = velocityX > 0
- ? displaySize.x + mPinnedStackBounds.width()
- : -mPinnedStackBounds.width();
-
- Rect toBounds = new Rect(mPinnedStackBounds);
- toBounds.offsetTo((int) offsetX, toBounds.top);
- if (!mPinnedStackBounds.equals(toBounds)) {
- mPinnedStackBoundsAnimator = mMotionHelper.createAnimationToBounds(mPinnedStackBounds,
- toBounds, 0, FAST_OUT_SLOW_IN, mUpdatePinnedStackBoundsListener);
- mFlingAnimationUtils.apply(mPinnedStackBoundsAnimator, 0,
- distanceBetweenRectOffsets(mPinnedStackBounds, toBounds),
- velocityX);
- mPinnedStackBoundsAnimator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- BackgroundThread.getHandler().post(PipTouchHandler.this::dismissPinnedStack);
- }
- });
- mPinnedStackBoundsAnimator.start();
- }
- }
-
- /**
* Animates the dismissal of the PIP over the dismiss target bounds.
*/
private void animateDismissPinnedStack(Rect dismissBounds) {
@@ -643,57 +576,6 @@
/**** Gestures ****/
/**
- * Gesture controlling swiping offscreen to dismiss the PIP.
- */
- private PipTouchGesture mSwipeToDismissGesture = new PipTouchGesture() {
- @Override
- boolean onMove(PipTouchState touchState) {
- if (mEnableSwipeToDismiss) {
- boolean isDraggingOffscreen = isDraggingOffscreen(touchState);
-
- if (touchState.startedDragging() && isDraggingOffscreen) {
- // Reset the minimized state once we drag horizontally
- setMinimizedState(false);
- }
-
- if (touchState.allowDraggingOffscreen() && isDraggingOffscreen) {
- // Move the pinned stack, but ignore the vertical movement
- float left = mPinnedStackBounds.left + touchState.getLastTouchDelta().x;
- mTmpBounds.set(mPinnedStackBounds);
- mTmpBounds.offsetTo((int) left, mPinnedStackBounds.top);
- if (!mTmpBounds.equals(mPinnedStackBounds)) {
- mPinnedStackBounds.set(mTmpBounds);
- mMotionHelper.resizeToBounds(mPinnedStackBounds);
- }
- return true;
- }
- }
- return false;
- }
-
- @Override
- public boolean onUp(PipTouchState touchState) {
- if (mEnableSwipeToDismiss && touchState.isDragging()) {
- PointF vel = touchState.getVelocity();
- PointF downDelta = touchState.getDownTouchDelta();
- float minFlingVel = mFlingAnimationUtils.getMinVelocityPxPerSecond();
- float flingVelScale = mEnableMinimizing ? 3f : 2f;
- if (Math.abs(vel.x) > (flingVelScale * minFlingVel)) {
- // Determine if this gesture is actually a fling to dismiss
- if (isFlingToDismiss(vel.x) && Math.abs(downDelta.x) >=
- (DISMISS_FLING_DISTANCE_FRACTION * mPinnedStackBounds.width())) {
- flingToDismiss(vel.x);
- } else {
- flingToSnapTarget(vel.length(), vel.x, vel.y);
- }
- return true;
- }
- }
- return false;
- }
- };
-
- /**
* Gesture controlling dragging the PIP slightly offscreen to minimize it.
*/
private PipTouchGesture mMinimizeGesture = new PipTouchGesture() {
@@ -771,8 +653,7 @@
@Override
public boolean onUp(PipTouchState touchState) {
- if (mEnableTapThrough && !touchState.isDragging() && !mIsMinimized &&
- !mIsTappingThrough) {
+ if (!touchState.isDragging() && !mIsMinimized && !mIsTappingThrough) {
mMenuController.showMenu();
mIsTappingThrough = true;
return true;
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
index 848fe9d..71dda2d 100644
--- a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
+++ b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
@@ -38,6 +38,7 @@
import android.provider.Settings;
import android.util.Slog;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.systemui.R;
import com.android.systemui.SystemUI;
import com.android.systemui.statusbar.phone.PhoneStatusBar;
@@ -50,8 +51,8 @@
private static final String TAG = PowerUI.TAG + ".Notification";
private static final boolean DEBUG = PowerUI.DEBUG;
- private static final String TAG_NOTIFICATION_BATTERY = "low_battery";
- private static final String TAG_NOTIFICATION_TEMPERATURE = "high_temp";
+ private static final String TAG_BATTERY = "low_battery";
+ private static final String TAG_TEMPERATURE = "high_temp";
private static final int SHOWING_NOTHING = 0;
private static final int SHOWING_WARNING = 1;
@@ -136,7 +137,8 @@
showWarningNotification();
mShowing = SHOWING_WARNING;
} else {
- mNoMan.cancelAsUser(TAG_NOTIFICATION_BATTERY, R.id.notification_power, UserHandle.ALL);
+ mNoMan.cancelAsUser(TAG_BATTERY, SystemMessage.NOTE_BAD_CHARGER, UserHandle.ALL);
+ mNoMan.cancelAsUser(TAG_BATTERY, SystemMessage.NOTE_POWER_LOW, UserHandle.ALL);
mShowing = SHOWING_NOTHING;
}
}
@@ -155,7 +157,8 @@
com.android.internal.R.color.system_notification_accent_color));
SystemUI.overrideNotificationAppName(mContext, nb);
final Notification n = nb.build();
- mNoMan.notifyAsUser(TAG_NOTIFICATION_BATTERY, R.id.notification_power, n, UserHandle.ALL);
+ mNoMan.cancelAsUser(TAG_BATTERY, SystemMessage.NOTE_POWER_LOW, UserHandle.ALL);
+ mNoMan.notifyAsUser(TAG_BATTERY, SystemMessage.NOTE_BAD_CHARGER, n, UserHandle.ALL);
}
private void showWarningNotification() {
@@ -185,8 +188,9 @@
mPlaySound = false;
}
SystemUI.overrideNotificationAppName(mContext, nb);
- mNoMan.notifyAsUser(
- TAG_NOTIFICATION_BATTERY, R.id.notification_power, nb.build(), UserHandle.ALL);
+ final Notification n = nb.build();
+ mNoMan.cancelAsUser(TAG_BATTERY, SystemMessage.NOTE_BAD_CHARGER, UserHandle.ALL);
+ mNoMan.notifyAsUser(TAG_BATTERY, SystemMessage.NOTE_POWER_LOW, n, UserHandle.ALL);
}
private PendingIntent pendingBroadcast(String action) {
@@ -213,8 +217,8 @@
return;
}
mTempWarning = false;
- mNoMan.cancelAsUser(
- TAG_NOTIFICATION_TEMPERATURE, R.id.notification_temperature, UserHandle.ALL);
+ mNoMan.cancelAsUser(TAG_TEMPERATURE, SystemMessage.NOTE_HIGH_TEMP,
+ UserHandle.ALL);
}
@Override
@@ -237,8 +241,7 @@
com.android.internal.R.color.battery_saver_mode_color));
SystemUI.overrideNotificationAppName(mContext, nb);
final Notification n = nb.build();
- mNoMan.notifyAsUser(
- TAG_NOTIFICATION_TEMPERATURE, R.id.notification_temperature, n, UserHandle.ALL);
+ mNoMan.notifyAsUser(TAG_TEMPERATURE, SystemMessage.NOTE_HIGH_TEMP, n, UserHandle.ALL);
}
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
index d4bb994..8988801 100644
--- a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
+++ b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
@@ -225,16 +225,20 @@
return;
}
- // Get the throttling temperature. No need to check if we're not throttling.
- float[] throttlingTemps = mHardwarePropertiesManager.getDeviceTemperatures(
- HardwarePropertiesManager.DEVICE_TEMPERATURE_SKIN,
- HardwarePropertiesManager.TEMPERATURE_THROTTLING);
- if (throttlingTemps == null
- || throttlingTemps.length == 0
- || throttlingTemps[0] == HardwarePropertiesManager.UNDEFINED_TEMPERATURE) {
- return;
+ mThrottlingTemp = mContext.getResources().getInteger(R.integer.config_warningTemperature);
+
+ if (mThrottlingTemp < 0f) {
+ // Get the throttling temperature. No need to check if we're not throttling.
+ float[] throttlingTemps = mHardwarePropertiesManager.getDeviceTemperatures(
+ HardwarePropertiesManager.DEVICE_TEMPERATURE_SKIN,
+ HardwarePropertiesManager.TEMPERATURE_THROTTLING);
+ if (throttlingTemps == null
+ || throttlingTemps.length == 0
+ || throttlingTemps[0] == HardwarePropertiesManager.UNDEFINED_TEMPERATURE) {
+ return;
+ }
+ mThrottlingTemp = throttlingTemps[0];
}
- mThrottlingTemp = throttlingTemps[0];
// We have passed all of the checks, start checking the temp
updateTemperatureWarning();
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java
index 03cd959..fb3b1d9 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java
@@ -196,6 +196,9 @@
profileVpn, deviceOwnerOrganization, hasProfileOwner, isBranded);
if (deviceOwnerPackage == null) {
mDialog.setMessage(msg);
+ if (mSecurityController.isVpnEnabled() && !mSecurityController.isVpnRestricted()) {
+ mDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getSettingsButton(), this);
+ }
} else {
View dialogView = LayoutInflater.from(mContext)
.inflate(R.layout.quick_settings_footer_dialog, null, false);
@@ -213,10 +216,12 @@
final SpannableStringBuilder message = new SpannableStringBuilder();
message.append(mContext.getString(R.string.monitoring_description_do_body_vpn,
primaryVpn));
- message.append(mContext.getString(
- R.string.monitoring_description_vpn_settings_separator));
- message.append(mContext.getString(R.string.monitoring_description_vpn_settings),
- new VpnSpan(), 0);
+ if (!mSecurityController.isVpnRestricted()) {
+ message.append(mContext.getString(
+ R.string.monitoring_description_vpn_settings_separator));
+ message.append(mContext.getString(R.string.monitoring_description_vpn_settings),
+ new VpnSpan(), 0);
+ }
TextView vpnWarning = (TextView) dialogView.findViewById(R.id.vpn_warning);
vpnWarning.setText(message);
@@ -280,7 +285,7 @@
return mContext.getString(R.string.monitoring_description_app_work,
profileOwnerPackage, profileVpn);
} else if (profileOwnerPackage != null && hasProfileOwner) {
- return mContext.getString(R.string.monitoring_description_device_owned,
+ return mContext.getString(R.string.do_disclosure_with_name,
profileOwnerPackage);
} else {
// No device owner, no personal VPN, no work VPN, no user owner. Why are we here?
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
index d86aebf..416c7ce 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
@@ -47,13 +47,11 @@
public FlashlightTile(Host host) {
super(host);
mFlashlightController = host.getFlashlightController();
- mFlashlightController.addCallback(this);
}
@Override
protected void handleDestroy() {
super.handleDestroy();
- mFlashlightController.removeCallback(this);
}
@Override
@@ -63,6 +61,11 @@
@Override
public void setListening(boolean listening) {
+ if (listening) {
+ mFlashlightController.addCallback(this);
+ } else {
+ mFlashlightController.removeCallback(this);
+ }
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
index ddffea2..3587b89 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
@@ -28,7 +28,7 @@
import android.app.ActivityOptions;
import android.app.AppGlobals;
import android.app.IActivityManager;
-import android.app.ITaskStackListener;
+import android.app.KeyguardManager;
import android.app.UiModeManager;
import android.content.ComponentName;
import android.content.ContentResolver;
@@ -74,7 +74,6 @@
import android.view.WindowManager.KeyboardShortcutsReceiver;
import android.view.WindowManagerGlobal;
import android.view.accessibility.AccessibilityManager;
-import android.app.KeyguardManager;
import com.android.internal.app.AssistUtils;
import com.android.internal.os.BackgroundThread;
@@ -154,6 +153,7 @@
public void onPinnedStackAnimationEnded() { }
public void onActivityForcedResizable(String packageName, int taskId) { }
public void onActivityDismissingDockedStack() { }
+ public void onTaskProfileLocked(int taskId, int userId) { }
}
/**
@@ -197,6 +197,11 @@
public void onActivityDismissingDockedStack() throws RemoteException {
mHandler.sendEmptyMessage(H.ON_ACTIVITY_DISMISSING_DOCKED_STACK);
}
+
+ @Override
+ public void onTaskProfileLocked(int taskId, int userId) {
+ mHandler.obtainMessage(H.ON_TASK_PROFILE_LOCKED, taskId, userId).sendToTarget();
+ }
};
/**
@@ -561,10 +566,10 @@
* Cancels the current window transtion to/from Recents for the given task id.
*/
public void cancelWindowTransition(int taskId) {
- if (mWm == null) return;
+ if (mIam == null) return;
try {
- WindowManagerGlobal.getWindowManagerService().cancelTaskWindowTransition(taskId);
+ mIam.cancelTaskWindowTransition(taskId);
} catch (RemoteException e) {
e.printStackTrace();
}
@@ -574,10 +579,10 @@
* Cancels the current thumbnail transtion to/from Recents for the given task id.
*/
public void cancelThumbnailTransition(int taskId) {
- if (mWm == null) return;
+ if (mIam == null) return;
try {
- WindowManagerGlobal.getWindowManagerService().cancelTaskThumbnailTransition(taskId);
+ mIam.cancelTaskThumbnailTransition(taskId);
} catch (RemoteException e) {
e.printStackTrace();
}
@@ -597,7 +602,7 @@
}
getThumbnail(taskId, thumbnailData);
- if (thumbnailData.thumbnail != null) {
+ if (thumbnailData.thumbnail != null && !ActivityManager.ENABLE_TASK_SNAPSHOTS) {
thumbnailData.thumbnail.setHasAlpha(false);
// We use a dumb heuristic for now, if the thumbnail is purely transparent in the top
// left pixel, then assume the whole thumbnail is transparent. Generally, proper
@@ -621,25 +626,42 @@
return;
}
- ActivityManager.TaskThumbnail taskThumbnail = mAm.getTaskThumbnail(taskId);
- if (taskThumbnail == null) {
- return;
- }
-
- Bitmap thumbnail = taskThumbnail.mainThumbnail;
- ParcelFileDescriptor descriptor = taskThumbnail.thumbnailFileDescriptor;
- if (thumbnail == null && descriptor != null) {
- thumbnail = BitmapFactory.decodeFileDescriptor(descriptor.getFileDescriptor(),
- null, sBitmapOptions);
- }
- if (descriptor != null) {
+ if (ActivityManager.ENABLE_TASK_SNAPSHOTS) {
+ ActivityManager.TaskSnapshot snapshot = null;
try {
- descriptor.close();
- } catch (IOException e) {
+ snapshot = ActivityManager.getService().getTaskSnapshot(taskId);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Failed to retrieve snapshot", e);
}
+ if (snapshot != null) {
+ thumbnailDataOut.thumbnail = Bitmap.createHardwareBitmap(snapshot.getSnapshot());
+ thumbnailDataOut.orientation = snapshot.getOrientation();
+ thumbnailDataOut.insets.set(snapshot.getContentInsets());
+ } else {
+ thumbnailDataOut.thumbnail = null;
+ }
+ } else {
+ ActivityManager.TaskThumbnail taskThumbnail = mAm.getTaskThumbnail(taskId);
+ if (taskThumbnail == null) {
+ return;
+ }
+
+ Bitmap thumbnail = taskThumbnail.mainThumbnail;
+ ParcelFileDescriptor descriptor = taskThumbnail.thumbnailFileDescriptor;
+ if (thumbnail == null && descriptor != null) {
+ thumbnail = BitmapFactory.decodeFileDescriptor(descriptor.getFileDescriptor(),
+ null, sBitmapOptions);
+ }
+ if (descriptor != null) {
+ try {
+ descriptor.close();
+ } catch (IOException e) {
+ }
+ }
+ thumbnailDataOut.thumbnail = thumbnail;
+ thumbnailDataOut.orientation = taskThumbnail.thumbnailInfo.screenOrientation;
+ thumbnailDataOut.insets.setEmpty();
}
- thumbnailDataOut.thumbnail = thumbnail;
- thumbnailDataOut.thumbnailInfo = taskThumbnail.thumbnailInfo;
}
/**
@@ -1155,6 +1177,7 @@
private static final int ON_PINNED_STACK_ANIMATION_ENDED = 4;
private static final int ON_ACTIVITY_FORCED_RESIZABLE = 5;
private static final int ON_ACTIVITY_DISMISSING_DOCKED_STACK = 6;
+ private static final int ON_TASK_PROFILE_LOCKED = 7;
@Override
public void handleMessage(Message msg) {
@@ -1196,6 +1219,12 @@
}
break;
}
+ case ON_TASK_PROFILE_LOCKED: {
+ for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
+ mTaskStackListeners.get(i).onTaskProfileLocked(msg.arg1, msg.arg2);
+ }
+ break;
+ }
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
index 5877440..5c7496d 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
@@ -38,6 +38,7 @@
import com.android.systemui.recents.RecentsDebugFlags;
import com.android.systemui.recents.misc.SystemServicesProxy;
+import com.android.systemui.recents.views.grid.TaskGridLayoutAlgorithm;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -150,11 +151,19 @@
Task.TaskKey taskKey = new Task.TaskKey(t.persistentId, t.stackId, t.baseIntent,
t.userId, t.firstActiveTime, t.lastActiveTime);
- // This task is only shown in the stack if it statisfies the historical time or min
+ // This task is only shown in the stack if it satisfies the historical time or min
// number of tasks constraints. Freeform tasks are also always shown.
boolean isFreeformTask = SystemServicesProxy.isFreeformStack(t.stackId);
- boolean isStackTask = isFreeformTask || !isHistoricalTask(t) ||
+ boolean isStackTask;
+ if (Recents.getConfiguration().isGridEnabled) {
+ // When grid layout is enabled, we only show the first
+ // TaskGridLayoutAlgorithm.MAX_LAYOUT_TASK_COUNT} tasks.
+ isStackTask = t.lastActiveTime >= lastStackActiveTime &&
+ i >= taskCount - TaskGridLayoutAlgorithm.MAX_LAYOUT_TASK_COUNT;
+ } else {
+ isStackTask = isFreeformTask || !isHistoricalTask(t) ||
(t.lastActiveTime >= lastStackActiveTime && i >= (taskCount - MIN_NUM_TASKS));
+ }
boolean isLaunchTarget = taskKey.id == runningTaskId;
// The last stack active time is the baseline for which we show visible tasks. Since
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java
index ba31e3e..6ea51e5 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java
@@ -220,8 +220,7 @@
mMainThreadHandler.post(new Runnable() {
@Override
public void run() {
- t.notifyTaskDataLoaded(newThumbnailData.thumbnail, newIcon,
- newThumbnailData.thumbnailInfo);
+ t.notifyTaskDataLoaded(newThumbnailData, newIcon);
}
});
}
@@ -364,11 +363,9 @@
public void loadTaskData(Task t) {
Drawable icon = mIconCache.getAndInvalidateIfModified(t.key);
Bitmap thumbnail = null;
- ActivityManager.TaskThumbnailInfo thumbnailInfo = null;
ThumbnailData thumbnailData = mThumbnailCache.getAndInvalidateIfModified(t.key);
if (thumbnailData != null) {
thumbnail = thumbnailData.thumbnail;
- thumbnailInfo = thumbnailData.thumbnailInfo;
}
// Grab the thumbnail/icon from the cache, if either don't exist, then trigger a reload and
@@ -378,8 +375,7 @@
if (requiresLoad) {
mLoadQueue.addTask(t);
}
- t.notifyTaskDataLoaded(thumbnail == mDefaultThumbnail ? null : thumbnail, icon,
- thumbnailInfo);
+ t.notifyTaskDataLoaded(thumbnail == mDefaultThumbnail ? null : thumbnailData, icon);
}
/** Releases the task resource data back into the pool. */
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/Task.java b/packages/SystemUI/src/com/android/systemui/recents/model/Task.java
index 53f713a..2f2e866 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/model/Task.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/Task.java
@@ -45,7 +45,7 @@
/* Task callbacks */
public interface TaskCallbacks {
/* Notifies when a task has been bound */
- public void onTaskDataLoaded(Task task, ActivityManager.TaskThumbnailInfo thumbnailInfo);
+ public void onTaskDataLoaded(Task task, ThumbnailData thumbnailData);
/* Notifies when a task has been unbound */
public void onTaskDataUnloaded();
/* Notifies when a task's stack id has changed. */
@@ -299,13 +299,12 @@
}
/** Notifies the callback listeners that this task has been loaded */
- public void notifyTaskDataLoaded(Bitmap thumbnail, Drawable applicationIcon,
- ActivityManager.TaskThumbnailInfo thumbnailInfo) {
+ public void notifyTaskDataLoaded(ThumbnailData thumbnailData, Drawable applicationIcon) {
this.icon = applicationIcon;
- this.thumbnail = thumbnail;
+ this.thumbnail = thumbnailData != null ? thumbnailData.thumbnail : null;
int callbackCount = mCallbacks.size();
for (int i = 0; i < callbackCount; i++) {
- mCallbacks.get(i).onTaskDataLoaded(this, thumbnailInfo);
+ mCallbacks.get(i).onTaskDataLoaded(this, thumbnailData);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/ThumbnailData.java b/packages/SystemUI/src/com/android/systemui/recents/model/ThumbnailData.java
index d0cdae5..18735ac 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/model/ThumbnailData.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/ThumbnailData.java
@@ -16,13 +16,14 @@
package com.android.systemui.recents.model;
-import android.app.ActivityManager;
import android.graphics.Bitmap;
+import android.graphics.Rect;
/**
* Data for a single thumbnail.
*/
public class ThumbnailData {
public Bitmap thumbnail;
- public ActivityManager.TaskThumbnailInfo thumbnailInfo;
+ public int orientation;
+ public final Rect insets = new Rect();
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
index 36d5f83..5f37349 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
@@ -57,6 +57,7 @@
import com.android.systemui.recents.misc.Utilities;
import com.android.systemui.recents.model.Task;
import com.android.systemui.recents.model.TaskStack;
+import com.android.systemui.recents.model.ThumbnailData;
import java.io.PrintWriter;
import java.util.ArrayList;
@@ -620,9 +621,9 @@
}
@Override
- public void onTaskDataLoaded(Task task, ActivityManager.TaskThumbnailInfo thumbnailInfo) {
+ public void onTaskDataLoaded(Task task, ThumbnailData thumbnailData) {
// Update each of the views to the new task data
- mThumbnailView.onTaskDataLoaded(thumbnailInfo);
+ mThumbnailView.onTaskDataLoaded(thumbnailData);
mHeaderView.onTaskDataLoaded();
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java
index 58b929a..3ae51b0 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java
@@ -16,7 +16,6 @@
package com.android.systemui.recents.views;
-import android.app.ActivityManager;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Bitmap;
@@ -37,7 +36,7 @@
import com.android.systemui.R;
import com.android.systemui.recents.misc.Utilities;
import com.android.systemui.recents.model.Task;
-
+import com.android.systemui.recents.model.ThumbnailData;
import java.io.PrintWriter;
@@ -65,12 +64,12 @@
private float mFullscreenThumbnailScale;
private boolean mSizeToFit = false;
private boolean mOverlayHeaderOnThumbnailActionBar = true;
- private ActivityManager.TaskThumbnailInfo mThumbnailInfo;
+ private ThumbnailData mThumbnailData;
private int mCornerRadius;
@ViewDebug.ExportedProperty(category="recents")
private float mDimAlpha;
- private Matrix mScaleMatrix = new Matrix();
+ private Matrix mMatrix = new Matrix();
private Paint mDrawPaint = new Paint();
private Paint mLockedPaint = new Paint();
private Paint mBgFillPaint = new Paint();
@@ -125,7 +124,7 @@
mTaskViewRect.set(0, 0, width, height);
setLeftTopRightBottom(0, 0, width, height);
- updateThumbnailScale();
+ updateThumbnailMatrix();
}
@Override
@@ -174,19 +173,22 @@
}
/** Sets the thumbnail to a given bitmap. */
- void setThumbnail(Bitmap bm, ActivityManager.TaskThumbnailInfo thumbnailInfo) {
- if (bm != null) {
+ void setThumbnail(ThumbnailData thumbnailData) {
+ if (thumbnailData != null && thumbnailData.thumbnail != null) {
+ Bitmap bm = thumbnailData.thumbnail;
bm.prepareToDraw();
mBitmapShader = new BitmapShader(bm, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
mDrawPaint.setShader(mBitmapShader);
- mThumbnailRect.set(0, 0, bm.getWidth(), bm.getHeight());
- mThumbnailInfo = thumbnailInfo;
- updateThumbnailScale();
+ mThumbnailRect.set(0, 0,
+ bm.getWidth() - thumbnailData.insets.left - thumbnailData.insets.right,
+ bm.getHeight() - thumbnailData.insets.top - thumbnailData.insets.bottom);
+ mThumbnailData = thumbnailData;
+ updateThumbnailMatrix();
} else {
mBitmapShader = null;
mDrawPaint.setShader(null);
mThumbnailRect.setEmpty();
- mThumbnailInfo = null;
+ mThumbnailData = null;
}
}
@@ -233,21 +235,21 @@
/**
* Updates the scale of the bitmap relative to this view.
*/
- public void updateThumbnailScale() {
+ public void updateThumbnailMatrix() {
mThumbnailScale = 1f;
- if (mBitmapShader != null) {
+ if (mBitmapShader != null && mThumbnailData != null) {
// We consider this a stack task if it is not freeform (ie. has no bounds) or has been
// dragged into the stack from the freeform workspace
boolean isStackTask = !mTask.isFreeformTask() || mTask.bounds == null;
- if (mTaskViewRect.isEmpty() || mThumbnailInfo == null ||
- mThumbnailInfo.taskWidth == 0 || mThumbnailInfo.taskHeight == 0) {
- // If we haven't measured or the thumbnail is invalid, skip the thumbnail drawing
- // and only draw the background color
+ int xOffset, yOffset = 0;
+ if (mTaskViewRect.isEmpty()) {
+ // If we haven't measured , skip the thumbnail drawing and only draw the background
+ // color
mThumbnailScale = 0f;
} else if (isStackTask && !mSizeToFit) {
float invThumbnailScale = 1f / mFullscreenThumbnailScale;
if (mDisplayOrientation == Configuration.ORIENTATION_PORTRAIT) {
- if (mThumbnailInfo.screenOrientation == Configuration.ORIENTATION_PORTRAIT) {
+ if (mThumbnailData.orientation == Configuration.ORIENTATION_PORTRAIT) {
// If we are in the same orientation as the screenshot, just scale it to the
// width of the task view
mThumbnailScale = (float) mTaskViewRect.width() / mThumbnailRect.width();
@@ -268,8 +270,9 @@
(float) mTaskViewRect.width() / mThumbnailRect.width(),
(float) mTaskViewRect.height() / mThumbnailRect.height());
}
- mScaleMatrix.setScale(mThumbnailScale, mThumbnailScale);
- mBitmapShader.setLocalMatrix(mScaleMatrix);
+ mMatrix.setTranslate(-mThumbnailData.insets.left, -mThumbnailData.insets.top);
+ mMatrix.postScale(mThumbnailScale, mThumbnailScale);
+ mBitmapShader.setLocalMatrix(mMatrix);
}
if (!mInvisible) {
invalidate();
@@ -333,18 +336,14 @@
* Called when the bound task's data has loaded and this view should update to reflect the
* changes.
*/
- void onTaskDataLoaded(ActivityManager.TaskThumbnailInfo thumbnailInfo) {
- if (mTask.thumbnail != null) {
- setThumbnail(mTask.thumbnail, thumbnailInfo);
- } else {
- setThumbnail(null, null);
- }
+ void onTaskDataLoaded(ThumbnailData thumbnailData) {
+ setThumbnail(thumbnailData);
}
/** Unbinds the thumbnail view from the task */
void unbindFromTask() {
mTask = null;
- setThumbnail(null, null);
+ setThumbnail(null);
}
public void dump(String prefix, PrintWriter writer) {
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/grid/GridTaskView.java b/packages/SystemUI/src/com/android/systemui/recents/views/grid/GridTaskView.java
index 6300400..a86abf6 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/grid/GridTaskView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/grid/GridTaskView.java
@@ -51,7 +51,7 @@
// Show the full thumbnail and don't overlap with the header.
mThumbnailView.setSizeToFit(true);
mThumbnailView.setOverlayHeaderOnThumbnailActionBar(false);
- mThumbnailView.updateThumbnailScale();
+ mThumbnailView.updateThumbnailMatrix();
mThumbnailView.setTranslationY(mHeaderHeight);
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/grid/TaskGridLayoutAlgorithm.java b/packages/SystemUI/src/com/android/systemui/recents/views/grid/TaskGridLayoutAlgorithm.java
index be3af040..5d969f9 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/grid/TaskGridLayoutAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/grid/TaskGridLayoutAlgorithm.java
@@ -30,7 +30,7 @@
public class TaskGridLayoutAlgorithm {
private final String TAG = "TaskGridLayoutAlgorithm";
- private final int MAX_LAYOUT_TASK_COUNT = 8;
+ public static final int MAX_LAYOUT_TASK_COUNT = 8;
/** The horizontal padding around the whole recents view. */
private int mPaddingLeftRight;
@@ -135,6 +135,16 @@
updateAppAspectRatio();
}
+ /**
+ * Returns the proper task view transform of a certain task view, according to its index and the
+ * amount of task views.
+ * @param taskIndex The index of the task view whose transform we want. It's never greater
+ * than {@link MAX_LAYOUT_TASK_COUNT}.
+ * @param taskCount The current amount of task views.
+ * @param transformOut The result transform that this method returns.
+ * @param stackLayout The base stack layout algorithm.
+ * @return The expected transform of the (taskIndex)th task view.
+ */
public TaskViewTransform getTransform(int taskIndex, int taskCount,
TaskViewTransform transformOut, TaskStackLayoutAlgorithm stackLayout) {
@@ -145,8 +155,11 @@
int y = gridInfo.yOffsets[taskIndex];
float z = stackLayout.mMaxTranslationZ;
+ // We always set the dim alpha to 0, since we don't want grid task views to dim.
float dimAlpha = 0f;
- float viewOutlineAlpha = 0f;
+ // We always set the alpha of the view outline to 1, to make sure the shadow is visible.
+ float viewOutlineAlpha = 1f;
+
// We also need to invert the index in order to display the most recent tasks first.
int taskLayoutIndex = taskCount - taskIndex - 1;
boolean isTaskViewVisible = (taskLayoutIndex < MAX_LAYOUT_TASK_COUNT);
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
index 0eef864..db021ff 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
@@ -59,6 +59,7 @@
import android.view.animation.Interpolator;
import android.widget.ImageView;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.systemui.R;
import com.android.systemui.SystemUI;
@@ -201,7 +202,8 @@
mNotificationBuilder.setFlag(Notification.FLAG_NO_CLEAR, true);
SystemUI.overrideNotificationAppName(context, mNotificationBuilder);
- mNotificationManager.notify(R.id.notification_screenshot, mNotificationBuilder.build());
+ mNotificationManager.notify(SystemMessage.NOTE_GLOBAL_SCREENSHOT,
+ mNotificationBuilder.build());
/**
* NOTE: The following code prepares the notification builder for updating the notification
@@ -348,7 +350,8 @@
.setPublicVersion(mPublicNotificationBuilder.build())
.setFlag(Notification.FLAG_NO_CLEAR, false);
- mNotificationManager.notify(R.id.notification_screenshot, mNotificationBuilder.build());
+ mNotificationManager.notify(SystemMessage.NOTE_GLOBAL_SCREENSHOT,
+ mNotificationBuilder.build());
}
mParams.finisher.run();
mParams.clearContext();
@@ -364,7 +367,7 @@
mParams.clearContext();
// Cancel the posted notification
- mNotificationManager.cancel(R.id.notification_screenshot);
+ mNotificationManager.cancel(SystemMessage.NOTE_GLOBAL_SCREENSHOT);
}
}
@@ -866,7 +869,7 @@
Notification n = new Notification.BigTextStyle(b)
.bigText(errorMsg)
.build();
- nManager.notify(R.id.notification_screenshot, n);
+ nManager.notify(SystemMessage.NOTE_GLOBAL_SCREENSHOT, n);
}
/**
@@ -878,7 +881,7 @@
// Clear the notification
final NotificationManager nm =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
- nm.cancel(R.id.notification_screenshot);
+ nm.cancel(SystemMessage.NOTE_GLOBAL_SCREENSHOT);
}
}
@@ -896,7 +899,7 @@
final NotificationManager nm =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
final Uri uri = Uri.parse(intent.getStringExtra(SCREENSHOT_URI_ID));
- nm.cancel(R.id.notification_screenshot);
+ nm.cancel(SystemMessage.NOTE_GLOBAL_SCREENSHOT);
// And delete the image from the media store
new DeleteImageInBackgroundTask(context).execute(uri);
diff --git a/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
index e8039c3..3059a05 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
@@ -30,6 +30,9 @@
import android.os.ServiceManager;
import android.os.UserHandle;
import android.provider.Settings;
+import android.service.vr.IVrManager;
+import android.service.vr.IVrStateCallbacks;
+import android.util.Log;
import android.widget.ImageView;
import com.android.internal.logging.MetricsLogger;
@@ -52,9 +55,12 @@
private static final int MSG_SET_CHECKED = 2;
private static final int MSG_ATTACH_LISTENER = 3;
private static final int MSG_DETACH_LISTENER = 4;
+ private static final int MSG_VR_MODE_CHANGED = 5;
private final int mMinimumBacklight;
private final int mMaximumBacklight;
+ private final int mMinimumBacklightForVr;
+ private final int mMaximumBacklightForVr;
private final Context mContext;
private final ImageView mIcon;
@@ -62,6 +68,7 @@
private final boolean mAutomaticAvailable;
private final IPowerManager mPower;
private final CurrentUserTracker mUserTracker;
+ private final IVrManager mVrManager;
private Handler mBackgroundHandler;
private final BrightnessObserver mBrightnessObserver;
@@ -69,7 +76,8 @@
private ArrayList<BrightnessStateChangeCallback> mChangeCallbacks =
new ArrayList<BrightnessStateChangeCallback>();
- private volatile boolean mAutomatic;
+ private volatile boolean mAutomatic; // Brightness adjusted automatically using ambient light.
+ private volatile boolean mIsVrModeEnabled;
private boolean mListening;
private boolean mExternalChange;
@@ -84,6 +92,8 @@
Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE);
private final Uri BRIGHTNESS_URI =
Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS);
+ private final Uri BRIGHTNESS_FOR_VR_URI =
+ Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_FOR_VR);
private final Uri BRIGHTNESS_ADJ_URI =
Settings.System.getUriFor(Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ);
@@ -105,6 +115,8 @@
mBackgroundHandler.post(mUpdateSliderRunnable);
} else if (BRIGHTNESS_URI.equals(uri) && !mAutomatic) {
mBackgroundHandler.post(mUpdateSliderRunnable);
+ } else if (BRIGHTNESS_FOR_VR_URI.equals(uri)) {
+ mBackgroundHandler.post(mUpdateSliderRunnable);
} else if (BRIGHTNESS_ADJ_URI.equals(uri) && mAutomatic) {
mBackgroundHandler.post(mUpdateSliderRunnable);
} else {
@@ -126,6 +138,9 @@
BRIGHTNESS_URI,
false, this, UserHandle.USER_ALL);
cr.registerContentObserver(
+ BRIGHTNESS_FOR_VR_URI,
+ false, this, UserHandle.USER_ALL);
+ cr.registerContentObserver(
BRIGHTNESS_ADJ_URI,
false, this, UserHandle.USER_ALL);
}
@@ -191,7 +206,14 @@
private final Runnable mUpdateSliderRunnable = new Runnable() {
@Override
public void run() {
- if (mAutomatic) {
+ if (mIsVrModeEnabled) {
+ int value = Settings.System.getIntForUser(mContext.getContentResolver(),
+ Settings.System.SCREEN_BRIGHTNESS_FOR_VR, mMaximumBacklight,
+ UserHandle.USER_CURRENT);
+ mHandler.obtainMessage(MSG_UPDATE_SLIDER,
+ mMaximumBacklightForVr - mMinimumBacklightForVr,
+ value - mMinimumBacklightForVr).sendToTarget();
+ } else if (mAutomatic) {
float value = Settings.System.getFloatForUser(mContext.getContentResolver(),
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0,
UserHandle.USER_CURRENT);
@@ -208,6 +230,14 @@
}
};
+ private final IVrStateCallbacks mVrStateCallbacks = new IVrStateCallbacks.Stub() {
+ @Override
+ public void onVrStateChanged(boolean enabled) {
+ mHandler.obtainMessage(MSG_VR_MODE_CHANGED, enabled ? 1 : 0, 0)
+ .sendToTarget();
+ }
+ };
+
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
@@ -230,6 +260,9 @@
case MSG_DETACH_LISTENER:
mControl.setOnChangedListener(null);
break;
+ case MSG_VR_MODE_CHANGED:
+ updateVrMode(msg.arg1 != 0);
+ break;
default:
super.handleMessage(msg);
}
@@ -256,10 +289,13 @@
PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
mMinimumBacklight = pm.getMinimumScreenBrightnessSetting();
mMaximumBacklight = pm.getMaximumScreenBrightnessSetting();
+ mMinimumBacklightForVr = pm.getMinimumScreenBrightnessForVrSetting();
+ mMaximumBacklightForVr = pm.getMaximumScreenBrightnessForVrSetting();
mAutomaticAvailable = context.getResources().getBoolean(
com.android.internal.R.bool.config_automatic_brightness_available);
mPower = IPowerManager.Stub.asInterface(ServiceManager.getService("power"));
+ mVrManager = IVrManager.Stub.asInterface(ServiceManager.getService("vrmanager"));
}
public void setBackgroundLooper(Looper backgroundLooper) {
@@ -284,6 +320,15 @@
return;
}
+ if (mVrManager != null) {
+ try {
+ mVrManager.registerListener(mVrStateCallbacks);
+ mIsVrModeEnabled = mVrManager.getVrModeState();
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to register VR mode state listener: ", e);
+ }
+ }
+
mBackgroundHandler.post(mStartListeningRunnable);
mListening = true;
}
@@ -294,6 +339,14 @@
return;
}
+ if (mVrManager != null) {
+ try {
+ mVrManager.unregisterListener(mVrStateCallbacks);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to unregister VR mode state listener: ", e);
+ }
+ }
+
mBackgroundHandler.post(mStopListeningRunnable);
mListening = false;
}
@@ -304,7 +357,22 @@
updateIcon(mAutomatic);
if (mExternalChange) return;
- if (!mAutomatic) {
+ if (mIsVrModeEnabled) {
+ final int val = value + mMinimumBacklightForVr;
+ if (stopTracking) {
+ MetricsLogger.action(mContext, MetricsEvent.ACTION_BRIGHTNESS_FOR_VR, val);
+ }
+ setBrightness(val);
+ if (!tracking) {
+ AsyncTask.execute(new Runnable() {
+ public void run() {
+ Settings.System.putIntForUser(mContext.getContentResolver(),
+ Settings.System.SCREEN_BRIGHTNESS_FOR_VR, val,
+ UserHandle.USER_CURRENT);
+ }
+ });
+ }
+ } else if (!mAutomatic) {
final int val = value + mMinimumBacklight;
if (stopTracking) {
MetricsLogger.action(mContext, MetricsEvent.ACTION_BRIGHTNESS, val);
@@ -368,4 +436,11 @@
com.android.systemui.R.drawable.ic_qs_brightness_auto_off);
}
}
+
+ private void updateVrMode(boolean isEnabled) {
+ if (mIsVrModeEnabled != isEnabled) {
+ mIsVrModeEnabled = isEnabled;
+ mBackgroundHandler.post(mUpdateSliderRunnable);
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 80b43e6..db099bc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -42,7 +42,6 @@
import android.content.res.Configuration;
import android.database.ContentObserver;
import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
@@ -80,13 +79,13 @@
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
import android.view.accessibility.AccessibilityManager;
-import android.widget.ImageView;
import android.widget.RemoteViews;
import android.widget.TextView;
import android.widget.Toast;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.statusbar.IStatusBarService;
import com.android.internal.statusbar.StatusBarIcon;
import com.android.internal.widget.LockPatternUtils;
@@ -544,7 +543,7 @@
} else if (BANNER_ACTION_CANCEL.equals(action) || BANNER_ACTION_SETUP.equals(action)) {
NotificationManager noMan = (NotificationManager)
mContext.getSystemService(Context.NOTIFICATION_SERVICE);
- noMan.cancel(R.id.notification_hidden);
+ noMan.cancel(SystemMessage.NOTE_HIDDEN_NOTIFICATIONS);
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.SHOW_NOTE_ABOUT_NOTIFICATION_HIDING, 0);
@@ -753,7 +752,8 @@
mLockPatternUtils = new LockPatternUtils(mContext);
// Connect in to the status bar manager service
- mCommandQueue = new CommandQueue(this);
+ mCommandQueue = getComponent(CommandQueue.class);
+ mCommandQueue.addCallbacks(this);
int[] switches = new int[9];
ArrayList<IBinder> binders = new ArrayList<IBinder>();
@@ -885,7 +885,7 @@
NotificationManager noMan =
(NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
- noMan.notify(R.id.notification_hidden, note.build());
+ noMan.notify(SystemMessage.NOTE_HIDDEN_NOTIFICATIONS, note.build());
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index 419c91b..a3e4d5b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -21,13 +21,16 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
+import android.os.Looper;
import android.os.Message;
+import android.support.annotation.VisibleForTesting;
import android.util.Pair;
import android.view.KeyEvent;
import com.android.internal.os.SomeArgs;
import com.android.internal.statusbar.IStatusBar;
import com.android.internal.statusbar.StatusBarIcon;
+import com.android.systemui.SystemUI;
/**
* This class takes the functions from IStatusBar that come in on
@@ -88,55 +91,68 @@
private static final String SHOW_IME_SWITCHER_KEY = "showImeSwitcherKey";
private final Object mLock = new Object();
- private Callbacks mCallbacks;
- private Handler mHandler = new H();
+ private Callbacks[] mCallbacks = new Callbacks[0];
+ private Handler mHandler = new H(Looper.getMainLooper());
/**
* These methods are called back on the main thread.
*/
public interface Callbacks {
- void setIcon(String slot, StatusBarIcon icon);
- void removeIcon(String slot);
- void disable(int state1, int state2, boolean animate);
- void animateExpandNotificationsPanel();
- void animateCollapsePanels(int flags);
- void animateExpandSettingsPanel(String obj);
- void setSystemUiVisibility(int vis, int fullscreenStackVis,
- int dockedStackVis, int mask, Rect fullscreenStackBounds, Rect dockedStackBounds);
- void topAppWindowChanged(boolean visible);
- void setImeWindowStatus(IBinder token, int vis, int backDisposition,
- boolean showImeSwitcher);
- void showRecentApps(boolean triggeredFromAltTab, boolean fromHome);
- void hideRecentApps(boolean triggeredFromAltTab, boolean triggeredFromHomeKey);
- void toggleRecentApps();
- void toggleSplitScreen();
- void preloadRecentApps();
- void dismissKeyboardShortcutsMenu();
- void toggleKeyboardShortcutsMenu(int deviceId);
- void cancelPreloadRecentApps();
- void setWindowState(int window, int state);
- void buzzBeepBlinked();
- void notificationLightOff();
- void notificationLightPulse(int argb, int onMillis, int offMillis);
- void showScreenPinningRequest(int taskId);
- void appTransitionPending();
- void appTransitionCancelled();
- void appTransitionStarting(long startTime, long duration);
- void appTransitionFinished();
- void showAssistDisclosure();
- void startAssist(Bundle args);
- void onCameraLaunchGestureDetected(int source);
- void showTvPictureInPictureMenu();
+ default void setIcon(String slot, StatusBarIcon icon) { }
+ default void removeIcon(String slot) { }
+ default void disable(int state1, int state2, boolean animate) { }
+ default void animateExpandNotificationsPanel() { }
+ default void animateCollapsePanels(int flags) { }
+ default void animateExpandSettingsPanel(String obj) { }
+ default void setSystemUiVisibility(int vis, int fullscreenStackVis,
+ int dockedStackVis, int mask, Rect fullscreenStackBounds, Rect dockedStackBounds) {
+ }
+ default void topAppWindowChanged(boolean visible) { }
+ default void setImeWindowStatus(IBinder token, int vis, int backDisposition,
+ boolean showImeSwitcher) { }
+ default void showRecentApps(boolean triggeredFromAltTab, boolean fromHome) { }
+ default void hideRecentApps(boolean triggeredFromAltTab, boolean triggeredFromHomeKey) { }
+ default void toggleRecentApps() { }
+ default void toggleSplitScreen() { }
+ default void preloadRecentApps() { }
+ default void dismissKeyboardShortcutsMenu() { }
+ default void toggleKeyboardShortcutsMenu(int deviceId) { }
+ default void cancelPreloadRecentApps() { }
+ default void setWindowState(int window, int state) { }
+ default void buzzBeepBlinked() { }
+ default void notificationLightOff() { }
+ default void notificationLightPulse(int argb, int onMillis, int offMillis) { }
+ default void showScreenPinningRequest(int taskId) { }
+ default void appTransitionPending() { }
+ default void appTransitionCancelled() { }
+ default void appTransitionStarting(long startTime, long duration) { }
+ default void appTransitionFinished() { }
+ default void showAssistDisclosure() { }
+ default void startAssist(Bundle args) { }
+ default void onCameraLaunchGestureDetected(int source) { }
+ default void showTvPictureInPictureMenu() { }
- void addQsTile(ComponentName tile);
- void remQsTile(ComponentName tile);
- void clickTile(ComponentName tile);
+ default void addQsTile(ComponentName tile) { }
+ default void remQsTile(ComponentName tile) { }
+ default void clickTile(ComponentName tile) { }
- void handleSystemNavigationKey(int arg1);
+ default void handleSystemNavigationKey(int arg1) { }
}
- public CommandQueue(Callbacks callbacks) {
- mCallbacks = callbacks;
+ @VisibleForTesting
+ protected CommandQueue() {
+ }
+
+ public void addCallbacks(Callbacks callbacks) {
+ Callbacks[] newArray = new Callbacks[mCallbacks.length + 1];
+ for (int i = 0; i < newArray.length - 1; i++) {
+ newArray[i] = mCallbacks[i];
+ if (newArray[i] == callbacks) {
+ throw new IllegalArgumentException("Callback was already added");
+ }
+ }
+ newArray[newArray.length - 1] = callbacks;
+ mCallbacks = newArray;
}
public void setIcon(String slot, StatusBarIcon icon) {
@@ -328,8 +344,8 @@
public void appTransitionCancelled() {
synchronized (mLock) {
- mHandler.removeMessages(MSG_APP_TRANSITION_PENDING);
- mHandler.sendEmptyMessage(MSG_APP_TRANSITION_PENDING);
+ mHandler.removeMessages(MSG_APP_TRANSITION_CANCELLED);
+ mHandler.sendEmptyMessage(MSG_APP_TRANSITION_CANCELLED);
}
}
@@ -400,6 +416,10 @@
}
private final class H extends Handler {
+ private H(Looper l) {
+ super(l);
+ }
+
public void handleMessage(Message msg) {
final int what = msg.what & MSG_MASK;
switch (what) {
@@ -407,118 +427,195 @@
switch (msg.arg1) {
case OP_SET_ICON: {
Pair<String, StatusBarIcon> p = (Pair<String, StatusBarIcon>) msg.obj;
- mCallbacks.setIcon(p.first, p.second);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].setIcon(p.first, p.second);
+ }
break;
}
case OP_REMOVE_ICON:
- mCallbacks.removeIcon((String) msg.obj);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].removeIcon((String) msg.obj);
+ }
break;
}
break;
}
case MSG_DISABLE:
- mCallbacks.disable(msg.arg1, msg.arg2, true /* animate */);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].disable(msg.arg1, msg.arg2, true /* animate */);
+ }
break;
case MSG_EXPAND_NOTIFICATIONS:
- mCallbacks.animateExpandNotificationsPanel();
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].animateExpandNotificationsPanel();
+ }
break;
case MSG_COLLAPSE_PANELS:
- mCallbacks.animateCollapsePanels(0);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].animateCollapsePanels(0);
+ }
break;
case MSG_EXPAND_SETTINGS:
- mCallbacks.animateExpandSettingsPanel((String) msg.obj);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].animateExpandSettingsPanel((String) msg.obj);
+ }
break;
case MSG_SET_SYSTEMUI_VISIBILITY:
SomeArgs args = (SomeArgs) msg.obj;
- mCallbacks.setSystemUiVisibility(args.argi1, args.argi2, args.argi3,
- args.argi4, (Rect) args.arg1, (Rect) args.arg2);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].setSystemUiVisibility(args.argi1, args.argi2, args.argi3,
+ args.argi4, (Rect) args.arg1, (Rect) args.arg2);
+ }
args.recycle();
break;
case MSG_TOP_APP_WINDOW_CHANGED:
- mCallbacks.topAppWindowChanged(msg.arg1 != 0);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].topAppWindowChanged(msg.arg1 != 0);
+ }
break;
case MSG_SHOW_IME_BUTTON:
- mCallbacks.setImeWindowStatus((IBinder) msg.obj, msg.arg1, msg.arg2,
- msg.getData().getBoolean(SHOW_IME_SWITCHER_KEY, false));
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].setImeWindowStatus((IBinder) msg.obj, msg.arg1, msg.arg2,
+ msg.getData().getBoolean(SHOW_IME_SWITCHER_KEY, false));
+ }
break;
case MSG_SHOW_RECENT_APPS:
- mCallbacks.showRecentApps(msg.arg1 != 0, msg.arg2 != 0);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].showRecentApps(msg.arg1 != 0, msg.arg2 != 0);
+ }
break;
case MSG_HIDE_RECENT_APPS:
- mCallbacks.hideRecentApps(msg.arg1 != 0, msg.arg2 != 0);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].hideRecentApps(msg.arg1 != 0, msg.arg2 != 0);
+ }
break;
case MSG_TOGGLE_RECENT_APPS:
- mCallbacks.toggleRecentApps();
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].toggleRecentApps();
+ }
break;
case MSG_PRELOAD_RECENT_APPS:
- mCallbacks.preloadRecentApps();
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].preloadRecentApps();
+ }
break;
case MSG_CANCEL_PRELOAD_RECENT_APPS:
- mCallbacks.cancelPreloadRecentApps();
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].cancelPreloadRecentApps();
+ }
break;
case MSG_DISMISS_KEYBOARD_SHORTCUTS:
- mCallbacks.dismissKeyboardShortcutsMenu();
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].dismissKeyboardShortcutsMenu();
+ }
break;
case MSG_TOGGLE_KEYBOARD_SHORTCUTS:
- mCallbacks.toggleKeyboardShortcutsMenu(msg.arg1);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].toggleKeyboardShortcutsMenu(msg.arg1);
+ }
break;
case MSG_SET_WINDOW_STATE:
- mCallbacks.setWindowState(msg.arg1, msg.arg2);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].setWindowState(msg.arg1, msg.arg2);
+ }
break;
case MSG_BUZZ_BEEP_BLINKED:
- mCallbacks.buzzBeepBlinked();
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].buzzBeepBlinked();
+ }
break;
case MSG_NOTIFICATION_LIGHT_OFF:
- mCallbacks.notificationLightOff();
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].notificationLightOff();
+ }
break;
case MSG_NOTIFICATION_LIGHT_PULSE:
- mCallbacks.notificationLightPulse((Integer) msg.obj, msg.arg1, msg.arg2);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].notificationLightPulse((Integer) msg.obj, msg.arg1, msg.arg2);
+ }
break;
case MSG_SHOW_SCREEN_PIN_REQUEST:
- mCallbacks.showScreenPinningRequest(msg.arg1);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].showScreenPinningRequest(msg.arg1);
+ }
break;
case MSG_APP_TRANSITION_PENDING:
- mCallbacks.appTransitionPending();
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].appTransitionPending();
+ }
break;
case MSG_APP_TRANSITION_CANCELLED:
- mCallbacks.appTransitionCancelled();
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].appTransitionCancelled();
+ }
break;
case MSG_APP_TRANSITION_STARTING:
- Pair<Long, Long> data = (Pair<Long, Long>) msg.obj;
- mCallbacks.appTransitionStarting(data.first, data.second);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ Pair<Long, Long> data = (Pair<Long, Long>) msg.obj;
+ mCallbacks[i].appTransitionStarting(data.first, data.second);
+ }
break;
case MSG_APP_TRANSITION_FINISHED:
- mCallbacks.appTransitionFinished();
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].appTransitionFinished();
+ }
break;
case MSG_ASSIST_DISCLOSURE:
- mCallbacks.showAssistDisclosure();
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].showAssistDisclosure();
+ }
break;
case MSG_START_ASSIST:
- mCallbacks.startAssist((Bundle) msg.obj);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].startAssist((Bundle) msg.obj);
+ }
break;
case MSG_CAMERA_LAUNCH_GESTURE:
- mCallbacks.onCameraLaunchGestureDetected(msg.arg1);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].onCameraLaunchGestureDetected(msg.arg1);
+ }
break;
case MSG_SHOW_TV_PICTURE_IN_PICTURE_MENU:
- mCallbacks.showTvPictureInPictureMenu();
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].showTvPictureInPictureMenu();
+ }
break;
case MSG_ADD_QS_TILE:
- mCallbacks.addQsTile((ComponentName) msg.obj);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].addQsTile((ComponentName) msg.obj);
+ }
break;
case MSG_REMOVE_QS_TILE:
- mCallbacks.remQsTile((ComponentName) msg.obj);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].remQsTile((ComponentName) msg.obj);
+ }
break;
case MSG_CLICK_QS_TILE:
- mCallbacks.clickTile((ComponentName) msg.obj);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].clickTile((ComponentName) msg.obj);
+ }
break;
case MSG_TOGGLE_APP_SPLIT_SCREEN:
- mCallbacks.toggleSplitScreen();
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].toggleSplitScreen();
+ }
break;
case MSG_HANDLE_SYSNAV_KEY:
- mCallbacks.handleSystemNavigationKey(msg.arg1);
+ for (int i = 0; i < mCallbacks.length; i++) {
+ mCallbacks[i].handleSystemNavigationKey(msg.arg1);
+ }
break;
}
}
}
+
+ // Need this class since CommandQueue already extends IStatusBar.Stub, so CommandQueueStart
+ // is needed so it can extend SystemUI.
+ public static class CommandQueueStart extends SystemUI {
+ @Override
+ public void start() {
+ putComponent(CommandQueue.class, new CommandQueue());
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
index 8980580..173a110 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
@@ -111,6 +111,7 @@
private ArrayList<View> mTranslateableViews;
private NotificationContentView mPublicLayout;
private NotificationContentView mPrivateLayout;
+ private NotificationContentView[] mLayouts;
private int mMaxExpandHeight;
private int mHeadsUpHeight;
private int mNotificationColor;
@@ -226,8 +227,9 @@
}
public void setIconAnimationRunning(boolean running) {
- setIconAnimationRunning(running, mPublicLayout);
- setIconAnimationRunning(running, mPrivateLayout);
+ for (NotificationContentView l : mLayouts) {
+ setIconAnimationRunning(running, l);
+ }
if (mIsSummaryWithChildren) {
setIconAnimationRunningForChild(running, mChildrenContainer.getHeaderView());
List<ExpandableNotificationRow> notificationChildren =
@@ -285,8 +287,9 @@
public void onNotificationUpdated(NotificationData.Entry entry) {
mEntry = entry;
mStatusBarNotification = entry.notification;
- mPrivateLayout.onNotificationUpdated(entry);
- mPublicLayout.onNotificationUpdated(entry);
+ for (NotificationContentView l : mLayouts) {
+ l.onNotificationUpdated(entry);
+ }
mShowingPublicInitialized = false;
updateNotificationColor();
if (mIsSummaryWithChildren) {
@@ -307,8 +310,9 @@
}
private void updateLimits() {
- updateLimitsForView(mPrivateLayout);
- updateLimitsForView(mPublicLayout);
+ for (NotificationContentView l : mLayouts) {
+ updateLimitsForView(l);
+ }
}
private void updateLimitsForView(NotificationContentView layout) {
@@ -685,8 +689,9 @@
addView(mSettingsIconRow, settingsIndex);
}
- mPrivateLayout.reInflateViews();
- mPublicLayout.reInflateViews();
+ for (NotificationContentView l : mLayouts) {
+ l.reInflateViews();
+ }
}
public void setContentBackground(int customBackgroundColor, boolean animate,
@@ -697,8 +702,9 @@
}
public void closeRemoteInput() {
- mPrivateLayout.closeRemoteInput();
- mPublicLayout.closeRemoteInput();
+ for (NotificationContentView l : mLayouts) {
+ l.closeRemoteInput();
+ }
}
/**
@@ -887,10 +893,10 @@
} else {
contentAlpha = 1.0f;
}
- mPublicLayout.setAlpha(contentAlpha);
- mPrivateLayout.setAlpha(contentAlpha);
- mPublicLayout.setTranslationY(translationY);
- mPrivateLayout.setTranslationY(translationY);
+ for (NotificationContentView l : mLayouts) {
+ l.setAlpha(contentAlpha);
+ l.setTranslationY(translationY);
+ }
if (mChildrenContainer != null) {
mChildrenContainer.setAlpha(contentAlpha);
mChildrenContainer.setTranslationY(translationY);
@@ -902,8 +908,9 @@
boolean visible = isChildInGroup()
|| (isBelowSpeedBump() && !NotificationShelf.SHOW_AMBIENT_ICONS)
|| mIconsVisible;
- mPublicLayout.setIconsVisible(visible);
- mPrivateLayout.setIconsVisible(visible);
+ for (NotificationContentView l : mLayouts) {
+ l.setIconsVisible(visible);
+ }
if (mChildrenContainer != null) {
mChildrenContainer.setIconsVisible(visible);
}
@@ -998,11 +1005,15 @@
protected void onFinishInflate() {
super.onFinishInflate();
mPublicLayout = (NotificationContentView) findViewById(R.id.expandedPublic);
- mPublicLayout.setContainingNotification(this);
mPrivateLayout = (NotificationContentView) findViewById(R.id.expanded);
- mPrivateLayout.setExpandClickListener(mExpandClickListener);
- mPrivateLayout.setContainingNotification(this);
- mPublicLayout.setExpandClickListener(mExpandClickListener);
+
+ mLayouts = new NotificationContentView[] {mPrivateLayout, mPublicLayout};
+
+ for (NotificationContentView l : mLayouts) {
+ l.setExpandClickListener(mExpandClickListener);
+ l.setContainingNotification(this);
+ }
+
mSettingsIconRowStub = (ViewStub) findViewById(R.id.settings_icon_row_stub);
mSettingsIconRowStub.setOnInflateListener(new ViewStub.OnInflateListener() {
@Override
@@ -1616,10 +1627,10 @@
mChildrenContainer.setAlpha(1.0f);
mChildrenContainer.setLayerType(LAYER_TYPE_NONE, null);
}
- mPrivateLayout.setAlpha(1.0f);
- mPrivateLayout.setLayerType(LAYER_TYPE_NONE, null);
- mPublicLayout.setAlpha(1.0f);
- mPublicLayout.setLayerType(LAYER_TYPE_NONE, null);
+ for (NotificationContentView l : mLayouts) {
+ l.setAlpha(1.0f);
+ l.setLayerType(LAYER_TYPE_NONE, null);
+ }
}
}
@@ -1639,8 +1650,9 @@
return;
}
int contentHeight = Math.max(getMinHeight(), height);
- mPrivateLayout.setContentHeight(contentHeight);
- mPublicLayout.setContentHeight(contentHeight);
+ for (NotificationContentView l : mLayouts) {
+ l.setContentHeight(contentHeight);
+ }
if (mIsSummaryWithChildren) {
mChildrenContainer.setActualHeight(height);
}
@@ -1682,8 +1694,9 @@
@Override
public void setClipTopAmount(int clipTopAmount) {
super.setClipTopAmount(clipTopAmount);
- mPrivateLayout.setClipTopAmount(clipTopAmount);
- mPublicLayout.setClipTopAmount(clipTopAmount);
+ for (NotificationContentView l : mLayouts) {
+ l.setClipTopAmount(clipTopAmount);
+ }
if (mGuts != null) {
mGuts.setClipTopAmount(clipTopAmount);
}
@@ -1693,8 +1706,9 @@
public void setClipBottomAmount(int clipBottomAmount) {
if (clipBottomAmount != mClipBottomAmount) {
super.setClipBottomAmount(clipBottomAmount);
- mPrivateLayout.setClipBottomAmount(clipBottomAmount);
- mPublicLayout.setClipBottomAmount(clipBottomAmount);
+ for (NotificationContentView l : mLayouts) {
+ l.setClipBottomAmount(clipBottomAmount);
+ }
if (mGuts != null) {
mGuts.setClipBottomAmount(clipBottomAmount);
}
@@ -1717,8 +1731,9 @@
@Override
public void setShowingLegacyBackground(boolean showing) {
super.setShowingLegacyBackground(showing);
- mPrivateLayout.setShowingLegacyBackground(showing);
- mPublicLayout.setShowingLegacyBackground(showing);
+ for (NotificationContentView l : mLayouts) {
+ l.setShowingLegacyBackground(showing);
+ }
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/FlingAnimationUtils.java b/packages/SystemUI/src/com/android/systemui/statusbar/FlingAnimationUtils.java
index bddd3e6..758fb7a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/FlingAnimationUtils.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/FlingAnimationUtils.java
@@ -23,6 +23,7 @@
import android.view.animation.PathInterpolator;
import com.android.systemui.Interpolators;
+import com.android.systemui.statusbar.notification.NotificationUtils;
/**
* Utility class to calculate general fling animation when the finger is released.
@@ -30,28 +31,63 @@
public class FlingAnimationUtils {
private static final float LINEAR_OUT_SLOW_IN_X2 = 0.35f;
+ private static final float LINEAR_OUT_SLOW_IN_X2_MAX = 0.68f;
private static final float LINEAR_OUT_FASTER_IN_X2 = 0.5f;
private static final float LINEAR_OUT_FASTER_IN_Y2_MIN = 0.4f;
private static final float LINEAR_OUT_FASTER_IN_Y2_MAX = 0.5f;
private static final float MIN_VELOCITY_DP_PER_SECOND = 250;
private static final float HIGH_VELOCITY_DP_PER_SECOND = 3000;
- /**
- * Crazy math. http://en.wikipedia.org/wiki/B%C3%A9zier_curve
- */
- private static final float LINEAR_OUT_SLOW_IN_START_GRADIENT = 1.0f / LINEAR_OUT_SLOW_IN_X2;
-
- private Interpolator mLinearOutSlowIn;
+ private static final float LINEAR_OUT_SLOW_IN_START_GRADIENT = 0.75f;
+ private final float mSpeedUpFactor;
+ private final float mY2;
private float mMinVelocityPxPerSecond;
private float mMaxLengthSeconds;
private float mHighVelocityPxPerSecond;
+ private float mLinearOutSlowInX2;
private AnimatorProperties mAnimatorProperties = new AnimatorProperties();
+ private PathInterpolator mInterpolator;
+ private float mCachedStartGradient = -1;
+ private float mCachedVelocityFactor = -1;
public FlingAnimationUtils(Context ctx, float maxLengthSeconds) {
+ this(ctx, maxLengthSeconds, 0.0f);
+ }
+
+ /**
+ * @param maxLengthSeconds the longest duration an animation can become in seconds
+ * @param speedUpFactor a factor from 0 to 1 how much the slow down should be shifted towards
+ * the end of the animation. 0 means it's at the beginning and no
+ * acceleration will take place.
+ */
+ public FlingAnimationUtils(Context ctx, float maxLengthSeconds, float speedUpFactor) {
+ this(ctx, maxLengthSeconds, speedUpFactor, -1.0f, 1.0f);
+ }
+
+ /**
+ * @param maxLengthSeconds the longest duration an animation can become in seconds
+ * @param speedUpFactor a factor from 0 to 1 how much the slow down should be shifted towards
+ * the end of the animation. 0 means it's at the beginning and no
+ * acceleration will take place.
+ * @param x2 the x value to take for the second point of the bezier spline. If a value below 0
+ * is provided, the value is automatically calculated.
+ * @param y2 the y value to take for the second point of the bezier spline
+ */
+ public FlingAnimationUtils(Context ctx, float maxLengthSeconds, float speedUpFactor, float x2,
+ float y2) {
mMaxLengthSeconds = maxLengthSeconds;
- mLinearOutSlowIn = new PathInterpolator(0, 0, LINEAR_OUT_SLOW_IN_X2, 1);
+ mSpeedUpFactor = speedUpFactor;
+ if (x2 < 0) {
+ mLinearOutSlowInX2 = NotificationUtils.interpolate(LINEAR_OUT_SLOW_IN_X2,
+ LINEAR_OUT_SLOW_IN_X2_MAX,
+ mSpeedUpFactor);
+ } else {
+ mLinearOutSlowInX2 = x2;
+ }
+ mY2 = y2;
+
mMinVelocityPxPerSecond
= MIN_VELOCITY_DP_PER_SECOND * ctx.getResources().getDisplayMetrics().density;
mHighVelocityPxPerSecond
@@ -129,9 +165,14 @@
* Math.sqrt(Math.abs(endValue - currValue) / maxDistance));
float diff = Math.abs(endValue - currValue);
float velAbs = Math.abs(velocity);
- float durationSeconds = LINEAR_OUT_SLOW_IN_START_GRADIENT * diff / velAbs;
+ float velocityFactor = mSpeedUpFactor == 0.0f
+ ? 1.0f : Math.min(velAbs / HIGH_VELOCITY_DP_PER_SECOND, 1.0f);
+ float startGradient = NotificationUtils.interpolate(LINEAR_OUT_SLOW_IN_START_GRADIENT,
+ mY2 / mLinearOutSlowInX2, velocityFactor);
+ float durationSeconds = startGradient * diff / velAbs;
+ Interpolator slowInInterpolator = getInterpolator(startGradient, velocityFactor);
if (durationSeconds <= maxLengthSeconds) {
- mAnimatorProperties.interpolator = mLinearOutSlowIn;
+ mAnimatorProperties.interpolator = slowInInterpolator;
} else if (velAbs >= mMinVelocityPxPerSecond) {
// Cross fade between fast-out-slow-in and linear interpolator with current velocity.
@@ -139,7 +180,7 @@
VelocityInterpolator velocityInterpolator
= new VelocityInterpolator(durationSeconds, velAbs, diff);
InterpolatorInterpolator superInterpolator = new InterpolatorInterpolator(
- velocityInterpolator, mLinearOutSlowIn, mLinearOutSlowIn);
+ velocityInterpolator, slowInInterpolator, Interpolators.LINEAR_OUT_SLOW_IN);
mAnimatorProperties.interpolator = superInterpolator;
} else {
@@ -151,6 +192,19 @@
return mAnimatorProperties;
}
+ private Interpolator getInterpolator(float startGradient, float velocityFactor) {
+ if (startGradient != mCachedStartGradient
+ || velocityFactor != mCachedVelocityFactor) {
+ float speedup = mSpeedUpFactor * (1.0f - velocityFactor);
+ mInterpolator = new PathInterpolator(speedup,
+ speedup * startGradient,
+ mLinearOutSlowInX2, mY2);
+ mCachedStartGradient = startGradient;
+ mCachedVelocityFactor = velocityFactor;
+ }
+ return mInterpolator;
+ }
+
/**
* Applies the interpolator and length to the animator, such that the fling animation is
* consistent with the finger motion for the case when the animation is making something
@@ -212,7 +266,7 @@
VelocityInterpolator velocityInterpolator
= new VelocityInterpolator(durationSeconds, velAbs, diff);
InterpolatorInterpolator superInterpolator = new InterpolatorInterpolator(
- velocityInterpolator, mLinearOutFasterIn, mLinearOutSlowIn);
+ velocityInterpolator, mLinearOutFasterIn, Interpolators.LINEAR_OUT_SLOW_IN);
mAnimatorProperties.interpolator = superInterpolator;
} else {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java
index f43fc40..bd5fb92 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java
@@ -381,7 +381,12 @@
if (appShortcuts != null) {
result.add(appShortcuts);
}
- showKeyboardShortcutsDialog(result);
+ synchronized (sLock) {
+ // showKeyboardShortcutsDialog only if it has not been dismissed already
+ if (sInstance != null) {
+ showKeyboardShortcutsDialog(result);
+ }
+ }
}
}, deviceId);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGuts.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGuts.java
index 088f538..c7adb60 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGuts.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGuts.java
@@ -313,7 +313,7 @@
} else if (mHighImportanceButton.isChecked()) {
return NotificationManager.IMPORTANCE_HIGH;
} else {
- return NotificationManager.IMPORTANCE_NONE;
+ return NotificationManager.IMPORTANCE_UNSPECIFIED;
}
}
@@ -333,10 +333,10 @@
// Set to current importance setting
switch (importance) {
+ case NotificationManager.IMPORTANCE_UNSPECIFIED:
case NotificationManager.IMPORTANCE_NONE:
break;
case NotificationManager.IMPORTANCE_MIN:
- case NotificationManager.IMPORTANCE_UNSPECIFIED:
mMinImportanceButton.setChecked(true);
break;
case NotificationManager.IMPORTANCE_LOW:
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
index 296c788..bc1b9fb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
@@ -66,6 +66,7 @@
private int mScrollFastThreshold;
private int mStatusBarState;
private float mMaxShelfEnd;
+ private int mRelativeOffset;
public NotificationShelf(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -475,9 +476,21 @@
return super.shouldHideBackground() || mHideBackground;
}
- private void setOpenedAmount(float openedAmount) {
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ super.onLayout(changed, left, top, right, bottom);
mCollapsedIcons.getLocationOnScreen(mTmp);
- int start = mTmp[0];
+ mRelativeOffset = mTmp[0];
+ getLocationOnScreen(mTmp);
+ mRelativeOffset -= mTmp[0];
+ }
+
+ private void setOpenedAmount(float openedAmount) {
+ if (!mAmbientState.isPanelFullWidth()) {
+ // We don't do a transformation at all, lets just assume we are fully opened
+ openedAmount = 1.0f;
+ }
+ int start = mRelativeOffset;
if (isLayoutRtl()) {
start = getWidth() - start - mCollapsedIcons.getWidth();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ServiceMonitor.java b/packages/SystemUI/src/com/android/systemui/statusbar/ServiceMonitor.java
deleted file mode 100644
index db46dc6..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ServiceMonitor.java
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * Copyright (C) 2013 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;
-
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.ServiceConnection;
-import android.content.pm.PackageManager;
-import android.database.ContentObserver;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.RemoteException;
-import android.os.UserHandle;
-import android.provider.Settings;
-import android.util.Log;
-
-import java.util.Arrays;
-
-/**
- * Manages a persistent connection to a service component defined in a secure setting.
- *
- * <p>If a valid service component is specified in the secure setting, starts it up and keeps it
- * running; handling setting changes, package updates, component disabling, and unexpected
- * process termination.
- *
- * <p>Clients can listen for important events using the supplied {@link Callbacks}.
- */
-public class ServiceMonitor {
- private static final int RECHECK_DELAY = 2000;
- private static final int WAIT_FOR_STOP = 500;
-
- public interface Callbacks {
- /** The service does not exist or failed to bind */
- void onNoService();
- /** The service is about to start, this is a chance to perform cleanup and
- * delay the start if necessary */
- long onServiceStartAttempt();
- }
-
- // internal handler + messages used to serialize access to internal state
- public static final int MSG_START_SERVICE = 1;
- public static final int MSG_CONTINUE_START_SERVICE = 2;
- public static final int MSG_STOP_SERVICE = 3;
- public static final int MSG_PACKAGE_INTENT = 4;
- public static final int MSG_CHECK_BOUND = 5;
- public static final int MSG_SERVICE_DISCONNECTED = 6;
-
- private final Handler mHandler = new Handler() {
- public void handleMessage(Message msg) {
- switch(msg.what) {
- case MSG_START_SERVICE:
- startService();
- break;
- case MSG_CONTINUE_START_SERVICE:
- continueStartService();
- break;
- case MSG_STOP_SERVICE:
- stopService();
- break;
- case MSG_PACKAGE_INTENT:
- packageIntent((Intent)msg.obj);
- break;
- case MSG_CHECK_BOUND:
- checkBound();
- break;
- case MSG_SERVICE_DISCONNECTED:
- serviceDisconnected((ComponentName)msg.obj);
- break;
- }
- }
- };
-
- private final ContentObserver mSettingObserver = new ContentObserver(mHandler) {
- public void onChange(boolean selfChange) {
- onChange(selfChange, null);
- }
-
- public void onChange(boolean selfChange, Uri uri) {
- if (mDebug) Log.d(mTag, "onChange selfChange=" + selfChange + " uri=" + uri);
- ComponentName cn = getComponentNameFromSetting();
- if (cn == null && mServiceName == null || cn != null && cn.equals(mServiceName)) {
- if (mDebug) Log.d(mTag, "skipping no-op restart");
- return;
- }
- if (mBound) {
- mHandler.sendEmptyMessage(MSG_STOP_SERVICE);
- }
- mHandler.sendEmptyMessageDelayed(MSG_START_SERVICE, WAIT_FOR_STOP);
- }
- };
-
- private final class SC implements ServiceConnection, IBinder.DeathRecipient {
- private ComponentName mName;
- private IBinder mService;
-
- public void onServiceConnected(ComponentName name, IBinder service) {
- if (mDebug) Log.d(mTag, "onServiceConnected name=" + name + " service=" + service);
- mName = name;
- mService = service;
- try {
- service.linkToDeath(this, 0);
- } catch (RemoteException e) {
- Log.w(mTag, "Error linking to death", e);
- }
- }
-
- public void onServiceDisconnected(ComponentName name) {
- if (mDebug) Log.d(mTag, "onServiceDisconnected name=" + name);
- boolean unlinked = mService.unlinkToDeath(this, 0);
- if (mDebug) Log.d(mTag, " unlinked=" + unlinked);
- mHandler.sendMessage(mHandler.obtainMessage(MSG_SERVICE_DISCONNECTED, mName));
- }
-
- public void binderDied() {
- if (mDebug) Log.d(mTag, "binderDied");
- mHandler.sendMessage(mHandler.obtainMessage(MSG_SERVICE_DISCONNECTED, mName));
- }
- }
-
- private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
- public void onReceive(Context context, Intent intent) {
- String pkg = intent.getData().getSchemeSpecificPart();
- if (mServiceName != null && mServiceName.getPackageName().equals(pkg)) {
- mHandler.sendMessage(mHandler.obtainMessage(MSG_PACKAGE_INTENT, intent));
- }
- }
- };
-
- private final String mTag;
- private final boolean mDebug;
-
- private final Context mContext;
- private final String mSettingKey;
- private final Callbacks mCallbacks;
-
- private ComponentName mServiceName;
- private SC mServiceConnection;
- private boolean mBound;
-
- public ServiceMonitor(String ownerTag, boolean debug,
- Context context, String settingKey, Callbacks callbacks) {
- mTag = ownerTag + ".ServiceMonitor";
- mDebug = debug;
- mContext = context;
- mSettingKey = settingKey;
- mCallbacks = callbacks;
- }
-
- public void start() {
- // listen for setting changes
- ContentResolver cr = mContext.getContentResolver();
- cr.registerContentObserver(Settings.Secure.getUriFor(mSettingKey),
- false /*notifyForDescendents*/, mSettingObserver, UserHandle.USER_ALL);
-
- // listen for package/component changes
- IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_PACKAGE_ADDED);
- filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
- filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
- filter.addDataScheme("package");
- mContext.registerReceiver(mBroadcastReceiver, filter);
-
- mHandler.sendEmptyMessage(MSG_START_SERVICE);
- }
-
- private ComponentName getComponentNameFromSetting() {
- String cn = Settings.Secure.getStringForUser(mContext.getContentResolver(),
- mSettingKey, UserHandle.USER_CURRENT);
- return cn == null ? null : ComponentName.unflattenFromString(cn);
- }
-
- // everything below is called on the handler
-
- private void packageIntent(Intent intent) {
- if (mDebug) Log.d(mTag, "packageIntent intent=" + intent
- + " extras=" + bundleToString(intent.getExtras()));
- if (Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction())) {
- mHandler.sendEmptyMessage(MSG_START_SERVICE);
- } else if (Intent.ACTION_PACKAGE_CHANGED.equals(intent.getAction())
- || Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())) {
- final PackageManager pm = mContext.getPackageManager();
- final boolean serviceEnabled = isPackageAvailable()
- && pm.getApplicationEnabledSetting(mServiceName.getPackageName())
- != PackageManager.COMPONENT_ENABLED_STATE_DISABLED
- && pm.getComponentEnabledSetting(mServiceName)
- != PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
- if (mBound && !serviceEnabled) {
- stopService();
- scheduleCheckBound();
- } else if (!mBound && serviceEnabled) {
- startService();
- }
- }
- }
-
- private void stopService() {
- if (mDebug) Log.d(mTag, "stopService");
- boolean stopped = mContext.stopService(new Intent().setComponent(mServiceName));
- if (mDebug) Log.d(mTag, " stopped=" + stopped);
- mContext.unbindService(mServiceConnection);
- mBound = false;
- }
-
- private void startService() {
- mServiceName = getComponentNameFromSetting();
- if (mDebug) Log.d(mTag, "startService mServiceName=" + mServiceName);
- if (mServiceName == null) {
- mBound = false;
- mCallbacks.onNoService();
- } else {
- long delay = mCallbacks.onServiceStartAttempt();
- mHandler.sendEmptyMessageDelayed(MSG_CONTINUE_START_SERVICE, delay);
- }
- }
-
- private void continueStartService() {
- if (mDebug) Log.d(mTag, "continueStartService");
- Intent intent = new Intent().setComponent(mServiceName);
- try {
- mServiceConnection = new SC();
- mBound = mContext.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
- if (mDebug) Log.d(mTag, "mBound: " + mBound);
- } catch (Throwable t) {
- Log.w(mTag, "Error binding to service: " + mServiceName, t);
- }
- if (!mBound) {
- mCallbacks.onNoService();
- }
- }
-
- private void serviceDisconnected(ComponentName serviceName) {
- if (mDebug) Log.d(mTag, "serviceDisconnected serviceName=" + serviceName
- + " mServiceName=" + mServiceName);
- if (serviceName.equals(mServiceName)) {
- mBound = false;
- scheduleCheckBound();
- }
- }
-
- private void checkBound() {
- if (mDebug) Log.d(mTag, "checkBound mBound=" + mBound);
- if (!mBound) {
- startService();
- }
- }
-
- private void scheduleCheckBound() {
- mHandler.removeMessages(MSG_CHECK_BOUND);
- mHandler.sendEmptyMessageDelayed(MSG_CHECK_BOUND, RECHECK_DELAY);
- }
-
- private static String bundleToString(Bundle bundle) {
- if (bundle == null) return null;
- StringBuilder sb = new StringBuilder("{");
- for (String key : bundle.keySet()) {
- if (sb.length() > 1) sb.append(',');
- Object v = bundle.get(key);
- v = (v instanceof String[]) ? Arrays.asList((String[]) v) : v;
- sb.append(key).append('=').append(v);
- }
- return sb.append('}').toString();
- }
-
- public ComponentName getComponent() {
- return getComponentNameFromSetting();
- }
-
- public void setComponent(ComponentName component) {
- final String setting = component == null ? null : component.flattenToShortString();
- Settings.Secure.putStringForUser(mContext.getContentResolver(),
- mSettingKey, setting, UserHandle.USER_CURRENT);
- }
-
- public boolean isPackageAvailable() {
- final ComponentName component = getComponent();
- if (component == null) return false;
- try {
- return mContext.getPackageManager().isPackageAvailable(component.getPackageName());
- } catch (RuntimeException e) {
- Log.w(mTag, "Error checking package availability", e);
- return false;
- }
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SystemBars.java b/packages/SystemUI/src/com/android/systemui/statusbar/SystemBars.java
index 8819c60..275fd70 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SystemBars.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SystemBars.java
@@ -27,47 +27,21 @@
import java.io.PrintWriter;
/**
- * Ensure a single status bar service implementation is running at all times.
- *
- * <p>The implementation either comes from a service component running in a remote process (defined
- * using a secure setting), else falls back to using the in-process implementation according
- * to the product config.
+ * Ensure a single status bar service implementation is running at all times, using the in-process
+ * implementation according to the product config.
*/
-public class SystemBars extends SystemUI implements ServiceMonitor.Callbacks {
+public class SystemBars extends SystemUI {
private static final String TAG = "SystemBars";
private static final boolean DEBUG = false;
private static final int WAIT_FOR_BARS_TO_DIE = 500;
- // manages the implementation coming from the remote process
- private ServiceMonitor mServiceMonitor;
-
// in-process fallback implementation, per the product config
private BaseStatusBar mStatusBar;
@Override
public void start() {
if (DEBUG) Log.d(TAG, "start");
- mServiceMonitor = new ServiceMonitor(TAG, DEBUG,
- mContext, Settings.Secure.BAR_SERVICE_COMPONENT, this);
- mServiceMonitor.start(); // will call onNoService if no remote service is found
- }
-
- @Override
- public void onNoService() {
- if (DEBUG) Log.d(TAG, "onNoService");
- createStatusBarFromConfig(); // fallback to using an in-process implementation
- }
-
- @Override
- public long onServiceStartAttempt() {
- if (DEBUG) Log.d(TAG, "onServiceStartAttempt mStatusBar="+mStatusBar);
- if (mStatusBar != null) {
- // tear down the in-process version, we'll recreate it again if needed
- mStatusBar.destroy();
- mStatusBar = null;
- return WAIT_FOR_BARS_TO_DIE;
- }
- return 0;
+ createStatusBarFromConfig();
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
index 7f6322a..82a5cc2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -210,6 +210,7 @@
private NotificationGroupManager mGroupManager;
private boolean mOpening;
private int mIndicationBottomPadding;
+ private boolean mIsFullWidth;
public NotificationPanelView(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -302,6 +303,7 @@
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
+ setIsFullWidth(mNotificationStackScroller.getWidth() == getWidth());
// Update Clock Pivot
mKeyguardStatusView.setPivotX(getWidth() / 2);
@@ -340,6 +342,11 @@
updateMaxHeadsUpTranslation();
}
+ private void setIsFullWidth(boolean isFullWidth) {
+ mIsFullWidth = isFullWidth;
+ mNotificationStackScroller.setIsFullWidth(isFullWidth);
+ }
+
private void startQsSizeChangeAnimation(int oldHeight, final int newHeight) {
if (mQsSizeChangeAnimator != null) {
oldHeight = (int) mQsSizeChangeAnimator.getAnimatedValue();
@@ -736,7 +743,7 @@
@Override
protected float getOpeningHeight() {
- return mNotificationStackScroller.getMinExpansionHeight();
+ return mNotificationStackScroller.getOpeningHeight();
}
@Override
@@ -2000,12 +2007,9 @@
}
@Override
- protected float getCannedFlingDurationFactor() {
- if (mQsExpanded) {
- return 0.9f;
- } else {
- return 0.8f;
- }
+ protected boolean shouldUseDismissingAnimation() {
+ return mStatusBarState != StatusBarState.SHADE
+ && !mStatusBar.isKeyguardCurrentlySecure();
}
@Override
@@ -2288,7 +2292,15 @@
}
mNotificationStackScroller.setExpandedHeight(expandedHeight);
updateKeyguardBottomAreaAlpha();
- setOpening(expandedHeight <= getOpeningHeight());
+ setOpening(isFullWidth() && expandedHeight < getOpeningHeight());
+ }
+
+ /**
+ * @return whether the notifications are displayed full width and don't have any margins on
+ * the side.
+ */
+ public boolean isFullWidth() {
+ return mIsFullWidth;
}
private void setOpening(boolean opening) {
@@ -2401,12 +2413,11 @@
}
public boolean shouldHideNotificationIcons() {
- return !mOpening && !isFullyCollapsed();
+ return !isFullWidth() || (!mOpening && !isFullyCollapsed());
}
public boolean shouldAnimateIconHiding() {
- // TODO: handle this correctly, not completely working yet
- return mNotificationStackScroller.getTranslationX() != 0;
+ return !isFullWidth();
}
private final FragmentListener mFragmentListener = new FragmentListener() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
index 7bb075b..18e394e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
@@ -94,6 +94,7 @@
private VelocityTrackerInterface mVelocityTracker;
private FlingAnimationUtils mFlingAnimationUtils;
private FlingAnimationUtils mFlingAnimationUtilsClosing;
+ private FlingAnimationUtils mFlingAnimationUtilsDismissing;
private FalsingManager mFalsingManager;
/**
@@ -180,8 +181,13 @@
public PanelView(Context context, AttributeSet attrs) {
super(context, attrs);
- mFlingAnimationUtils = new FlingAnimationUtils(context, 0.6f);
- mFlingAnimationUtilsClosing = new FlingAnimationUtils(context, 0.4f);
+ mFlingAnimationUtils = new FlingAnimationUtils(context, 0.6f /* maxLengthSeconds */,
+ 0.6f /* speedUpFactor */);
+ mFlingAnimationUtilsClosing = new FlingAnimationUtils(context, 0.5f /* maxLengthSeconds */,
+ 0.6f /* speedUpFactor */);
+ mFlingAnimationUtilsDismissing = new FlingAnimationUtils(context,
+ 0.5f /* maxLengthSeconds */, 0.2f /* speedUpFactor */, 0.6f /* x2 */,
+ 0.84f /* y2 */);
mBounceInterpolator = new BounceInterpolator();
mFalsingManager = FalsingManager.getInstance(context);
}
@@ -700,13 +706,17 @@
animator.setDuration(350);
}
} else {
- mFlingAnimationUtilsClosing.apply(animator, mExpandedHeight, target, vel, getHeight());
+ if (shouldUseDismissingAnimation()) {
+ mFlingAnimationUtilsDismissing.apply(animator, mExpandedHeight, target, vel,
+ getHeight());
+ } else {
+ mFlingAnimationUtilsClosing
+ .apply(animator, mExpandedHeight, target, vel, getHeight());
+ }
// Make it shorter if we run a canned animation
if (vel == 0) {
- animator.setDuration((long)
- (animator.getDuration() * getCannedFlingDurationFactor()
- / collapseSpeedUpFactor));
+ animator.setDuration((long) (animator.getDuration() / collapseSpeedUpFactor));
}
}
animator.addListener(new AnimatorListenerAdapter() {
@@ -733,6 +743,8 @@
animator.start();
}
+ protected abstract boolean shouldUseDismissingAnimation();
+
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
@@ -1114,9 +1126,6 @@
public abstract void resetViews();
protected abstract float getPeekHeight();
-
- protected abstract float getCannedFlingDurationFactor();
-
/**
* @return whether "Clear all" button will be visible when the panel is fully expanded
*/
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightControllerImpl.java
index 008d837..f0cfa2c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightControllerImpl.java
@@ -121,6 +121,8 @@
}
cleanUpListenersLocked(l);
mListeners.add(new WeakReference<>(l));
+ l.onFlashlightAvailabilityChanged(mTorchAvailable);
+ l.onFlashlightChanged(mFlashlightEnabled);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
index bb4b91e..4785ba9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
@@ -49,6 +49,7 @@
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.util.UserIcons;
import com.android.settingslib.RestrictedLockUtils;
import com.android.systemui.GuestResumeSessionReceiver;
@@ -79,8 +80,6 @@
private static final String ACTION_LOGOUT_USER = "com.android.systemui.LOGOUT_USER";
private static final int PAUSE_REFRESH_USERS_TIMEOUT_MS = 3000;
- private static final int ID_REMOVE_GUEST = 1010;
- private static final int ID_LOGOUT_USER = 1011;
private static final String TAG_REMOVE_GUEST = "remove_guest";
private static final String TAG_LOGOUT_USER = "logout_user";
@@ -572,8 +571,8 @@
mContext.getString(R.string.user_logout_notification_action),
logoutPI);
SystemUI.overrideNotificationAppName(mContext, builder);
- NotificationManager.from(mContext).notifyAsUser(TAG_LOGOUT_USER, ID_LOGOUT_USER,
- builder.build(), new UserHandle(userId));
+ NotificationManager.from(mContext).notifyAsUser(TAG_LOGOUT_USER,
+ SystemMessage.NOTE_LOGOUT_USER, builder.build(), new UserHandle(userId));
}
};
@@ -595,8 +594,8 @@
mContext.getString(R.string.guest_notification_remove_action),
removeGuestPI);
SystemUI.overrideNotificationAppName(mContext, builder);
- NotificationManager.from(mContext).notifyAsUser(TAG_REMOVE_GUEST, ID_REMOVE_GUEST,
- builder.build(), new UserHandle(guestUserId));
+ NotificationManager.from(mContext).notifyAsUser(TAG_REMOVE_GUEST,
+ SystemMessage.NOTE_REMOVE_GUEST, builder.build(), new UserHandle(guestUserId));
}
private final Runnable mUnpauseRefreshUsers = new Runnable() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java
index e1ff297..fe83dc4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java
@@ -58,6 +58,7 @@
private float mExpandingVelocity;
private boolean mPanelTracking;
private boolean mExpansionChanging;
+ private boolean mPanelFullWidth;
public AmbientState(Context context) {
reload(context);
@@ -287,4 +288,12 @@
public boolean isPanelTracking() {
return mPanelTracking;
}
+
+ public boolean isPanelFullWidth() {
+ return mPanelFullWidth;
+ }
+
+ public void setPanelFullWidth(boolean panelFullWidth) {
+ mPanelFullWidth = panelFullWidth;
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
index e7c2507..06cd769 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
@@ -4012,6 +4012,18 @@
mAmbientState.setExpandingVelocity(expandingVelocity);
}
+ public float getOpeningHeight() {
+ if (mEmptyShadeView.getVisibility() == GONE) {
+ return getMinExpansionHeight();
+ } else {
+ return getAppearEndPosition();
+ }
+ }
+
+ public void setIsFullWidth(boolean isFullWidth) {
+ mAmbientState.setPanelFullWidth(isFullWidth);
+ }
+
/**
* A listener that is notified when some child locations might have changed.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java b/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java
index 97d5e10..2c90e62 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java
@@ -41,6 +41,7 @@
import android.util.SparseArray;
import com.android.internal.R;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.systemui.SystemUI;
import java.util.List;
@@ -48,11 +49,6 @@
public class StorageNotification extends SystemUI {
private static final String TAG = "StorageNotification";
- private static final int PUBLIC_ID = 0x53505542; // SPUB
- private static final int PRIVATE_ID = 0x53505256; // SPRV
- private static final int DISK_ID = 0x5344534b; // SDSK
- private static final int MOVE_ID = 0x534d4f56; // SMOV
-
private static final String ACTION_SNOOZE_VOLUME = "com.android.systemui.action.SNOOZE_VOLUME";
private static final String ACTION_FINISH_WIZARD = "com.android.systemui.action.FINISH_WIZARD";
@@ -91,7 +87,8 @@
@Override
public void onVolumeForgotten(String fsUuid) {
// Stop annoying the user
- mNotificationManager.cancelAsUser(fsUuid, PRIVATE_ID, UserHandle.ALL);
+ mNotificationManager.cancelAsUser(fsUuid, SystemMessage.NOTE_STORAGE_PRIVATE,
+ UserHandle.ALL);
}
@Override
@@ -119,7 +116,8 @@
public void onReceive(Context context, Intent intent) {
// When finishing the adoption wizard, clean up any notifications
// for moving primary storage
- mNotificationManager.cancelAsUser(null, MOVE_ID, UserHandle.ALL);
+ mNotificationManager.cancelAsUser(null, SystemMessage.NOTE_STORAGE_MOVE,
+ UserHandle.ALL);
}
};
@@ -190,7 +188,8 @@
final VolumeInfo info = mStorageManager.findVolumeByUuid(fsUuid);
if ((info != null && info.isMountedWritable()) || rec.isSnoozed()) {
// Yay, private volume is here, or user snoozed
- mNotificationManager.cancelAsUser(fsUuid, PRIVATE_ID, UserHandle.ALL);
+ mNotificationManager.cancelAsUser(fsUuid, SystemMessage.NOTE_STORAGE_PRIVATE,
+ UserHandle.ALL);
} else {
// Boo, annoy the user to reinsert the private volume
@@ -211,8 +210,8 @@
.setDeleteIntent(buildSnoozeIntent(fsUuid));
SystemUI.overrideNotificationAppName(mContext, builder);
- mNotificationManager.notifyAsUser(fsUuid, PRIVATE_ID, builder
- .build(), UserHandle.ALL);
+ mNotificationManager.notifyAsUser(fsUuid, SystemMessage.NOTE_STORAGE_PRIVATE,
+ builder.build(), UserHandle.ALL);
}
}
}
@@ -237,12 +236,13 @@
.setCategory(Notification.CATEGORY_ERROR);
SystemUI.overrideNotificationAppName(mContext, builder);
- mNotificationManager.notifyAsUser(disk.getId(), DISK_ID, builder.build(),
- UserHandle.ALL);
+ mNotificationManager.notifyAsUser(disk.getId(), SystemMessage.NOTE_STORAGE_DISK,
+ builder.build(), UserHandle.ALL);
} else {
// Yay, we have volumes!
- mNotificationManager.cancelAsUser(disk.getId(), DISK_ID, UserHandle.ALL);
+ mNotificationManager.cancelAsUser(disk.getId(), SystemMessage.NOTE_STORAGE_DISK,
+ UserHandle.ALL);
}
}
@@ -252,7 +252,8 @@
* @param disk The disk that went away.
*/
private void onDiskDestroyedInternal(@NonNull DiskInfo disk) {
- mNotificationManager.cancelAsUser(disk.getId(), DISK_ID, UserHandle.ALL);
+ mNotificationManager.cancelAsUser(disk.getId(), SystemMessage.NOTE_STORAGE_DISK,
+ UserHandle.ALL);
}
private void onVolumeStateChangedInternal(VolumeInfo vol) {
@@ -308,9 +309,11 @@
}
if (notif != null) {
- mNotificationManager.notifyAsUser(vol.getId(), PUBLIC_ID, notif, UserHandle.ALL);
+ mNotificationManager.notifyAsUser(vol.getId(), SystemMessage.NOTE_STORAGE_PUBLIC,
+ notif, UserHandle.ALL);
} else {
- mNotificationManager.cancelAsUser(vol.getId(), PUBLIC_ID, UserHandle.ALL);
+ mNotificationManager.cancelAsUser(vol.getId(), SystemMessage.NOTE_STORAGE_PUBLIC,
+ UserHandle.ALL);
}
}
@@ -488,7 +491,7 @@
.setOngoing(true);
SystemUI.overrideNotificationAppName(mContext, builder);
- mNotificationManager.notifyAsUser(move.packageName, MOVE_ID,
+ mNotificationManager.notifyAsUser(move.packageName, SystemMessage.NOTE_STORAGE_MOVE,
builder.build(), UserHandle.ALL);
}
@@ -496,7 +499,8 @@
if (move.packageName != null) {
// We currently ignore finished app moves; just clear the last
// published progress
- mNotificationManager.cancelAsUser(move.packageName, MOVE_ID, UserHandle.ALL);
+ mNotificationManager.cancelAsUser(move.packageName, SystemMessage.NOTE_STORAGE_MOVE,
+ UserHandle.ALL);
return;
}
@@ -537,8 +541,8 @@
.setAutoCancel(true);
SystemUI.overrideNotificationAppName(mContext, builder);
- mNotificationManager.notifyAsUser(move.packageName, MOVE_ID, builder.build(),
- UserHandle.ALL);
+ mNotificationManager.notifyAsUser(move.packageName, SystemMessage.NOTE_STORAGE_MOVE,
+ builder.build(), UserHandle.ALL);
}
private int getSmallIcon(DiskInfo disk, int state) {
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java
index 17dd8d6..0e5ff43 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java
@@ -99,7 +99,6 @@
private final Vibrator mVibrator;
private final boolean mHasVibrator;
- private boolean mEnabled;
private boolean mDestroyed;
private VolumePolicy mVolumePolicy;
private boolean mShowDndTile = true;
@@ -198,7 +197,6 @@
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
pw.println(VolumeDialogController.class.getSimpleName() + " state:");
- pw.print(" mEnabled: "); pw.println(mEnabled);
pw.print(" mDestroyed: "); pw.println(mDestroyed);
pw.print(" mVolumePolicy: "); pw.println(mVolumePolicy);
pw.print(" mState: "); pw.println(mState.toString(4));
@@ -749,8 +747,6 @@
private final class SettingObserver extends ContentObserver {
- private final Uri SERVICE_URI = Settings.Secure.getUriFor(
- Settings.Secure.VOLUME_CONTROLLER_SERVICE_COMPONENT);
private final Uri ZEN_MODE_URI =
Settings.Global.getUriFor(Settings.Global.ZEN_MODE);
private final Uri ZEN_MODE_CONFIG_URI =
@@ -761,10 +757,8 @@
}
public void init() {
- mContext.getContentResolver().registerContentObserver(SERVICE_URI, false, this);
mContext.getContentResolver().registerContentObserver(ZEN_MODE_URI, false, this);
mContext.getContentResolver().registerContentObserver(ZEN_MODE_CONFIG_URI, false, this);
- onChange(true, SERVICE_URI);
}
public void destroy() {
@@ -774,17 +768,6 @@
@Override
public void onChange(boolean selfChange, Uri uri) {
boolean changed = false;
- if (SERVICE_URI.equals(uri)) {
- final String setting = Settings.Secure.getString(mContext.getContentResolver(),
- Settings.Secure.VOLUME_CONTROLLER_SERVICE_COMPONENT);
- final boolean enabled = setting != null && mComponent != null
- && mComponent.equals(ComponentName.unflattenFromString(setting));
- if (enabled == mEnabled) return;
- if (enabled) {
- register();
- }
- mEnabled = enabled;
- }
if (ZEN_MODE_URI.equals(uri)) {
changed = updateZenModeW();
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java
index c820302..73d9ea7 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java
@@ -16,31 +16,13 @@
package com.android.systemui.volume;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnClickListener;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.ApplicationInfo;
import android.content.res.Configuration;
-import android.media.AudioManager;
-import android.media.session.MediaSessionManager;
import android.os.Handler;
-import android.provider.Settings;
-import android.text.TextUtils;
import android.util.Log;
-import com.android.systemui.Prefs;
import com.android.systemui.R;
import com.android.systemui.SystemUI;
import com.android.systemui.qs.tiles.DndTile;
-import com.android.systemui.statusbar.ServiceMonitor;
-import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.statusbar.policy.ZenModeControllerImpl;
@@ -52,34 +34,18 @@
private static boolean LOGD = Log.isLoggable(TAG, Log.DEBUG);
private final Handler mHandler = new Handler();
- private final Receiver mReceiver = new Receiver();
- private final RestorationNotification mRestorationNotification = new RestorationNotification();
private boolean mEnabled;
- private AudioManager mAudioManager;
- private NotificationManager mNotificationManager;
- private MediaSessionManager mMediaSessionManager;
- private ServiceMonitor mVolumeControllerService;
-
private VolumeDialogComponent mVolumeComponent;
@Override
public void start() {
mEnabled = mContext.getResources().getBoolean(R.bool.enable_volume_ui);
if (!mEnabled) return;
- mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
- mNotificationManager =
- (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
- mMediaSessionManager = (MediaSessionManager) mContext
- .getSystemService(Context.MEDIA_SESSION_SERVICE);
final ZenModeController zenController = new ZenModeControllerImpl(mContext, mHandler);
mVolumeComponent = new VolumeDialogComponent(this, mContext, null, zenController);
putComponent(VolumeComponent.class, getVolumeComponent());
- mReceiver.start();
- mVolumeControllerService = new ServiceMonitor(TAG, LOGD,
- mContext, Settings.Secure.VOLUME_CONTROLLER_SERVICE_COMPONENT,
- new ServiceMonitorCallbacks());
- mVolumeControllerService.start();
+ setDefaultVolumeController();
}
private VolumeComponent getVolumeComponent() {
@@ -97,154 +63,12 @@
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
pw.print("mEnabled="); pw.println(mEnabled);
if (!mEnabled) return;
- pw.print("mVolumeControllerService="); pw.println(mVolumeControllerService.getComponent());
getVolumeComponent().dump(fd, pw, args);
}
- private void setDefaultVolumeController(boolean register) {
- if (register) {
- DndTile.setVisible(mContext, true);
- if (LOGD) Log.d(TAG, "Registering default volume controller");
- getVolumeComponent().register();
- } else {
- if (LOGD) Log.d(TAG, "Unregistering default volume controller");
- mAudioManager.setVolumeController(null);
- mMediaSessionManager.setRemoteVolumeController(null);
- }
- }
-
- private String getAppLabel(ComponentName component) {
- final String pkg = component.getPackageName();
- try {
- final ApplicationInfo ai = mContext.getPackageManager().getApplicationInfo(pkg, 0);
- final String rt = mContext.getPackageManager().getApplicationLabel(ai).toString();
- if (!TextUtils.isEmpty(rt)) {
- return rt;
- }
- } catch (Exception e) {
- Log.w(TAG, "Error loading app label", e);
- }
- return pkg;
- }
-
- private void showServiceActivationDialog(final ComponentName component) {
- final SystemUIDialog d = new SystemUIDialog(mContext);
- d.setMessage(mContext.getString(R.string.volumeui_prompt_message, getAppLabel(component)));
- d.setPositiveButton(R.string.volumeui_prompt_allow, new OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- mVolumeControllerService.setComponent(component);
- }
- });
- d.setNegativeButton(R.string.volumeui_prompt_deny, null);
- d.show();
- }
-
- private final class ServiceMonitorCallbacks implements ServiceMonitor.Callbacks {
- @Override
- public void onNoService() {
- if (LOGD) Log.d(TAG, "onNoService");
- setDefaultVolumeController(true);
- mRestorationNotification.hide();
- if (!mVolumeControllerService.isPackageAvailable()) {
- mVolumeControllerService.setComponent(null);
- }
- }
-
- @Override
- public long onServiceStartAttempt() {
- if (LOGD) Log.d(TAG, "onServiceStartAttempt");
- // poke the setting to update the uid
- mVolumeControllerService.setComponent(mVolumeControllerService.getComponent());
- setDefaultVolumeController(false);
- getVolumeComponent().dismissNow();
- mRestorationNotification.show();
- return 0;
- }
- }
-
- private final class Receiver extends BroadcastReceiver {
- private static final String ENABLE = "com.android.systemui.vui.ENABLE";
- private static final String DISABLE = "com.android.systemui.vui.DISABLE";
- private static final String EXTRA_COMPONENT = "component";
-
- private static final String PREF = "com.android.systemui.PREF";
- private static final String EXTRA_KEY = "key";
- private static final String EXTRA_VALUE = "value";
-
- public void start() {
- final IntentFilter filter = new IntentFilter();
- filter.addAction(ENABLE);
- filter.addAction(DISABLE);
- filter.addAction(PREF);
- mContext.registerReceiver(this, filter, null, mHandler);
- }
-
- @Override
- public void onReceive(Context context, Intent intent) {
- final String action = intent.getAction();
- if (PREF.equals(action)) {
- final String key = intent.getStringExtra(EXTRA_KEY);
- if (key != null && intent.getExtras() != null) {
- final Object value = intent.getExtras().get(EXTRA_VALUE);
- if (value == null) {
- Prefs.remove(mContext, key);
- } else if (value instanceof Boolean) {
- Prefs.putBoolean(mContext, key, (Boolean) value);
- } else if (value instanceof Integer) {
- Prefs.putInt(mContext, key, (Integer) value);
- } else if (value instanceof Long) {
- Prefs.putLong(mContext, key, (Long) value);
- }
- }
- return;
- }
- final ComponentName component = intent.getParcelableExtra(EXTRA_COMPONENT);
- final boolean current = component != null
- && component.equals(mVolumeControllerService.getComponent());
- if (ENABLE.equals(action) && component != null) {
- if (!current) {
- showServiceActivationDialog(component);
- }
- }
- if (DISABLE.equals(action) && component != null) {
- if (current) {
- mVolumeControllerService.setComponent(null);
- }
- }
- }
- }
-
- private final class RestorationNotification {
- public void hide() {
- mNotificationManager.cancel(R.id.notification_volumeui);
- }
-
- public void show() {
- final ComponentName component = mVolumeControllerService.getComponent();
- if (component == null) {
- Log.w(TAG, "Not showing restoration notification, component not active");
- return;
- }
- final Intent intent = new Intent(Receiver.DISABLE)
- .putExtra(Receiver.EXTRA_COMPONENT, component);
- Notification.Builder builder = new Notification.Builder(mContext)
- .setSmallIcon(R.drawable.ic_volume_media)
- .setWhen(0)
- .setShowWhen(false)
- .setOngoing(true)
- .setContentTitle(mContext.getString(
- R.string.volumeui_notification_title, getAppLabel(component)))
- .setContentText(mContext.getString(R.string.volumeui_notification_text))
- .setContentIntent(PendingIntent.getBroadcast(mContext, 0, intent,
- PendingIntent.FLAG_UPDATE_CURRENT))
- .setPriority(Notification.PRIORITY_MIN)
- .setVisibility(Notification.VISIBILITY_PUBLIC)
- .setColor(mContext.getColor(
- com.android.internal.R.color.system_notification_accent_color));
- overrideNotificationAppName(mContext, builder);
- mNotificationManager.notify(R.id.notification_volumeui,
- builder.build());
- }
+ private void setDefaultVolumeController() {
+ DndTile.setVisible(mContext, true);
+ if (LOGD) Log.d(TAG, "Registering default volume controller");
+ getVolumeComponent().register();
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginInstanceManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginInstanceManagerTest.java
index 66e617b..d529ee1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginInstanceManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginInstanceManagerTest.java
@@ -15,6 +15,7 @@
package com.android.systemui.plugins;
import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertTrue;
import static org.mockito.Matchers.any;
@@ -39,10 +40,13 @@
import android.content.pm.ServiceInfo;
import android.os.HandlerThread;
import android.os.UserHandle;
+import android.support.test.annotation.UiThreadTest;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.plugins.PluginInstanceManager.PluginInfo;
import org.junit.After;
import org.junit.Before;
@@ -91,6 +95,15 @@
sMockPlugin = null;
}
+ @UiThreadTest
+ @Test
+ public void testGetPlugin() throws Exception {
+ setupFakePmQuery();
+ PluginInfo p = mPluginInstanceManager.getPlugin();
+ assertNotNull(p.mPlugin);
+ verify(sMockPlugin).onCreate(any(), any());
+ }
+
@Test
public void testNoPlugins() throws Exception {
when(mMockPm.queryIntentServices(any(), anyInt())).thenReturn(
@@ -143,8 +156,8 @@
// Plugin shouldn't be connected because it is the wrong version.
verify(mMockListener, Mockito.never()).onPluginConnected(
ArgumentCaptor.forClass(Plugin.class).capture());
- verify(nm).notifyAsUser(eq(TestPlugin.class.getName()), eq(R.id.notification_plugin), any(),
- eq(UserHandle.ALL));
+ verify(nm).notifyAsUser(eq(TestPlugin.class.getName()), eq(SystemMessage.NOTE_PLUGIN),
+ any(), eq(UserHandle.ALL));
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginManagerTest.java
index 63b1817..a58407b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginManagerTest.java
@@ -13,6 +13,8 @@
*/
package com.android.systemui.plugins;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@@ -24,10 +26,13 @@
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
+import android.support.test.annotation.UiThreadTest;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.plugins.PluginInstanceManager.PluginInfo;
import com.android.systemui.plugins.PluginManager.PluginInstanceManagerFactory;
import org.junit.Before;
@@ -65,6 +70,16 @@
mMockListener = mock(PluginListener.class);
}
+ @UiThreadTest
+ @Test
+ public void testOneShot() {
+ Plugin mockPlugin = mock(Plugin.class);
+ when(mMockPluginInstance.getPlugin()).thenReturn(new PluginInfo(null, null, mockPlugin,
+ null));
+ Plugin result = mPluginManager.getOneShotPlugin("myAction", 1);
+ assertTrue(result == mockPlugin);
+ }
+
@Test
public void testAddListener() {
mPluginManager.addPluginListener("myAction", mMockListener, 1);
@@ -85,9 +100,12 @@
mPluginManager = new PluginManager(getContext(), mMockFactory, false,
mMockExceptionHandler);
resetExceptionHandler();
- mPluginManager.addPluginListener("myAction", mMockListener, 1);
+ mPluginManager.addPluginListener("myAction", mMockListener, 1);
verify(mMockPluginInstance, Mockito.never()).loadAll();
+
+ assertNull(mPluginManager.getOneShotPlugin("myPlugin", 1));
+ verify(mMockPluginInstance, Mockito.never()).getPlugin();
}
@Test
@@ -132,7 +150,7 @@
Intent intent = new Intent(PluginManager.DISABLE_PLUGIN);
intent.setData(Uri.parse("package://" + testComponent.flattenToString()));
mPluginManager.onReceive(mContext, intent);
- verify(nm).cancel(eq(testComponent.getClassName()), eq(R.id.notification_plugin));
+ verify(nm).cancel(eq(testComponent.getClassName()), eq(SystemMessage.NOTE_PLUGIN));
verify(pm).setComponentEnabledSetting(eq(testComponent),
eq(PackageManager.COMPONENT_ENABLED_STATE_DISABLED),
eq(PackageManager.DONT_KILL_APP));
diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
index 7070961..34cfa7b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
@@ -22,6 +22,7 @@
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
+import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyString;
@@ -34,6 +35,7 @@
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.systemui.SysuiTestCase;
import org.junit.Before;
@@ -76,28 +78,34 @@
public void testShowInvalidChargerNotification_NotifyAsUser() {
mPowerNotificationWarnings.showInvalidChargerWarning();
verify(mMockNotificationManager, times(1))
- .notifyAsUser(anyString(), anyInt(), any(), any());
+ .notifyAsUser(anyString(), eq(SystemMessage.NOTE_BAD_CHARGER), any(), any());
+ verify(mMockNotificationManager, times(1)).cancelAsUser(anyString(),
+ eq(SystemMessage.NOTE_POWER_LOW), any());
}
@Test
public void testDismissInvalidChargerNotification_CancelAsUser() {
mPowerNotificationWarnings.showInvalidChargerWarning();
mPowerNotificationWarnings.dismissInvalidChargerWarning();
- verify(mMockNotificationManager, times(1)).cancelAsUser(anyString(), anyInt(), any());
+ verify(mMockNotificationManager, times(1)).cancelAsUser(anyString(),
+ eq(SystemMessage.NOTE_BAD_CHARGER), any());
}
@Test
public void testShowLowBatteryNotification_NotifyAsUser() {
mPowerNotificationWarnings.showLowBatteryWarning(false);
verify(mMockNotificationManager, times(1))
- .notifyAsUser(anyString(), anyInt(), any(), any());
+ .notifyAsUser(anyString(), eq(SystemMessage.NOTE_POWER_LOW), any(), any());
+ verify(mMockNotificationManager, times(1)).cancelAsUser(anyString(),
+ eq(SystemMessage.NOTE_BAD_CHARGER), any());
}
@Test
public void testDismissLowBatteryNotification_CancelAsUser() {
mPowerNotificationWarnings.showLowBatteryWarning(false);
mPowerNotificationWarnings.dismissLowBatteryWarning();
- verify(mMockNotificationManager, times(1)).cancelAsUser(anyString(), anyInt(), any());
+ verify(mMockNotificationManager, times(1)).cancelAsUser(anyString(),
+ eq(SystemMessage.NOTE_POWER_LOW), any());
}
@Test
@@ -105,7 +113,8 @@
mPowerNotificationWarnings.showLowBatteryWarning(false);
ArgumentCaptor<Notification> captor = ArgumentCaptor.forClass(Notification.class);
verify(mMockNotificationManager)
- .notifyAsUser(anyString(), anyInt(), captor.capture(), any());
+ .notifyAsUser(anyString(), eq(SystemMessage.NOTE_POWER_LOW),
+ captor.capture(), any());
assertEquals(null, captor.getValue().sound);
}
@@ -114,7 +123,8 @@
mPowerNotificationWarnings.showLowBatteryWarning(true);
ArgumentCaptor<Notification> captor = ArgumentCaptor.forClass(Notification.class);
verify(mMockNotificationManager)
- .notifyAsUser(anyString(), anyInt(), captor.capture(), any());
+ .notifyAsUser(anyString(), eq(SystemMessage.NOTE_POWER_LOW),
+ captor.capture(), any());
assertNotEqual(null, captor.getValue().sound);
}
@@ -122,13 +132,14 @@
public void testShowTemperatureWarning_NotifyAsUser() {
mPowerNotificationWarnings.showTemperatureWarning();
verify(mMockNotificationManager, times(1))
- .notifyAsUser(anyString(), anyInt(), any(), any());
+ .notifyAsUser(anyString(), eq(SystemMessage.NOTE_HIGH_TEMP), any(), any());
}
@Test
public void testDismissTemperatureWarning_CancelAsUser() {
mPowerNotificationWarnings.showTemperatureWarning();
mPowerNotificationWarnings.dismissTemperatureWarning();
- verify(mMockNotificationManager, times(1)).cancelAsUser(anyString(), anyInt(), any());
+ verify(mMockNotificationManager, times(1)).cancelAsUser(anyString(),
+ eq(SystemMessage.NOTE_HIGH_TEMP), any());
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
new file mode 100644
index 0000000..43f8629
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
@@ -0,0 +1,295 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package com.android.systemui.statusbar;
+
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+
+import android.content.ComponentName;
+import android.graphics.Rect;
+import android.os.Bundle;
+
+import com.android.internal.statusbar.StatusBarIcon;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.statusbar.CommandQueue.Callbacks;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class CommandQueueTest extends SysuiTestCase {
+
+ private CommandQueue mCommandQueue;
+ private Callbacks mCallbacks;
+
+ @Before
+ public void setup() {
+ mCommandQueue = new CommandQueue();
+ mCallbacks = mock(Callbacks.class);
+ mCommandQueue.addCallbacks(mCallbacks);
+ }
+
+ @After
+ public void tearDown() {
+ verifyNoMoreInteractions(mCallbacks);
+ }
+
+ @Test
+ public void testIcon() {
+ String slot = "testSlot";
+ StatusBarIcon icon = mock(StatusBarIcon.class);
+ mCommandQueue.setIcon(slot, icon);
+ waitForIdleSync();
+ verify(mCallbacks).setIcon(eq(slot), eq(icon));
+
+ mCommandQueue.removeIcon(slot);
+ waitForIdleSync();
+ verify(mCallbacks).removeIcon(eq(slot));
+ }
+
+ @Test
+ public void testDisable() {
+ int state1 = 14;
+ int state2 = 42;
+ mCommandQueue.disable(state1, state2);
+ waitForIdleSync();
+ verify(mCallbacks).disable(eq(state1), eq(state2), eq(true));
+ }
+
+ @Test
+ public void testExpandNotifications() {
+ mCommandQueue.animateExpandNotificationsPanel();
+ waitForIdleSync();
+ verify(mCallbacks).animateExpandNotificationsPanel();
+ }
+
+ @Test
+ public void testCollapsePanels() {
+ mCommandQueue.animateCollapsePanels();
+ waitForIdleSync();
+ verify(mCallbacks).animateCollapsePanels(eq(0));
+ }
+
+ @Test
+ public void testExpandSettings() {
+ String panel = "some_panel";
+ mCommandQueue.animateExpandSettingsPanel(panel);
+ waitForIdleSync();
+ verify(mCallbacks).animateExpandSettingsPanel(eq(panel));
+ }
+
+ @Test
+ public void testSetSystemUiVisibility() {
+ Rect r = new Rect();
+ mCommandQueue.setSystemUiVisibility(1, 2, 3, 4, null, r);
+ waitForIdleSync();
+ verify(mCallbacks).setSystemUiVisibility(eq(1), eq(2), eq(3), eq(4), eq(null), eq(r));
+ }
+
+ @Test
+ public void testTopAppWindowChanged() {
+ mCommandQueue.topAppWindowChanged(true);
+ waitForIdleSync();
+ verify(mCallbacks).topAppWindowChanged(eq(true));
+ }
+
+ @Test
+ public void testShowImeButton() {
+ mCommandQueue.setImeWindowStatus(null, 1, 2, true);
+ waitForIdleSync();
+ verify(mCallbacks).setImeWindowStatus(eq(null), eq(1), eq(2), eq(true));
+ }
+
+ @Test
+ public void testShowRecentApps() {
+ mCommandQueue.showRecentApps(true, false);
+ waitForIdleSync();
+ verify(mCallbacks).showRecentApps(eq(true), eq(false));
+ }
+
+ @Test
+ public void testHideRecentApps() {
+ mCommandQueue.hideRecentApps(true, false);
+ waitForIdleSync();
+ verify(mCallbacks).hideRecentApps(eq(true), eq(false));
+ }
+
+ @Test
+ public void testToggleRecentApps() {
+ mCommandQueue.toggleRecentApps();
+ waitForIdleSync();
+ verify(mCallbacks).toggleRecentApps();
+ }
+
+ @Test
+ public void testPreloadRecentApps() {
+ mCommandQueue.preloadRecentApps();
+ waitForIdleSync();
+ verify(mCallbacks).preloadRecentApps();
+ }
+
+ @Test
+ public void testCancelPreloadRecentApps() {
+ mCommandQueue.cancelPreloadRecentApps();
+ waitForIdleSync();
+ verify(mCallbacks).cancelPreloadRecentApps();
+ }
+
+ @Test
+ public void testDismissKeyboardShortcuts() {
+ mCommandQueue.dismissKeyboardShortcutsMenu();
+ waitForIdleSync();
+ verify(mCallbacks).dismissKeyboardShortcutsMenu();
+ }
+
+ @Test
+ public void testToggleKeyboardShortcuts() {
+ mCommandQueue.toggleKeyboardShortcutsMenu(1);
+ waitForIdleSync();
+ verify(mCallbacks).toggleKeyboardShortcutsMenu(eq(1));
+ }
+
+ @Test
+ public void testSetWindowState() {
+ mCommandQueue.setWindowState(1, 2);
+ waitForIdleSync();
+ verify(mCallbacks).setWindowState(eq(1), eq(2));
+ }
+
+ @Test
+ public void testBuzzBeepBlink() {
+ mCommandQueue.buzzBeepBlinked();
+ waitForIdleSync();
+ verify(mCallbacks).buzzBeepBlinked();
+ }
+
+ @Test
+ public void testNotificationLightOff() {
+ mCommandQueue.notificationLightOff();
+ waitForIdleSync();
+ verify(mCallbacks).notificationLightOff();
+ }
+
+ @Test
+ public void testNotificationLightPulse() {
+ mCommandQueue.notificationLightPulse(1, 2, 3);
+ waitForIdleSync();
+ verify(mCallbacks).notificationLightPulse(eq(1), eq(2), eq(3));
+ }
+
+ @Test
+ public void testScreenPinRequest() {
+ mCommandQueue.showScreenPinningRequest(1);
+ waitForIdleSync();
+ verify(mCallbacks).showScreenPinningRequest(eq(1));
+ }
+
+ @Test
+ public void testAppTransitionPending() {
+ mCommandQueue.appTransitionPending();
+ waitForIdleSync();
+ verify(mCallbacks).appTransitionPending();
+ }
+
+ @Test
+ public void testAppTransitionCancelled() {
+ mCommandQueue.appTransitionCancelled();
+ waitForIdleSync();
+ verify(mCallbacks).appTransitionCancelled();
+ }
+
+ @Test
+ public void testAppTransitionStarting() {
+ mCommandQueue.appTransitionStarting(1, 2);
+ waitForIdleSync();
+ verify(mCallbacks).appTransitionStarting(eq(1L), eq(2L));
+ }
+
+ @Test
+ public void testAppTransitionFinished() {
+ mCommandQueue.appTransitionFinished();
+ waitForIdleSync();
+ verify(mCallbacks).appTransitionFinished();
+ }
+
+ @Test
+ public void testAssistDisclosure() {
+ mCommandQueue.showAssistDisclosure();
+ waitForIdleSync();
+ verify(mCallbacks).showAssistDisclosure();
+ }
+
+ @Test
+ public void testStartAssist() {
+ Bundle b = new Bundle();
+ mCommandQueue.startAssist(b);
+ waitForIdleSync();
+ verify(mCallbacks).startAssist(eq(b));
+ }
+
+ @Test
+ public void testCameraLaunchGesture() {
+ mCommandQueue.onCameraLaunchGestureDetected(1);
+ waitForIdleSync();
+ verify(mCallbacks).onCameraLaunchGestureDetected(eq(1));
+ }
+
+ @Test
+ public void testShowTvPipMenu() {
+ mCommandQueue.showTvPictureInPictureMenu();
+ waitForIdleSync();
+ verify(mCallbacks).showTvPictureInPictureMenu();
+ }
+
+ @Test
+ public void testAddQsTile() {
+ ComponentName c = new ComponentName("testpkg", "testcls");
+ mCommandQueue.addQsTile(c);
+ waitForIdleSync();
+ verify(mCallbacks).addQsTile(eq(c));
+ }
+
+ @Test
+ public void testRemoveQsTile() {
+ ComponentName c = new ComponentName("testpkg", "testcls");
+ mCommandQueue.remQsTile(c);
+ waitForIdleSync();
+ verify(mCallbacks).remQsTile(eq(c));
+ }
+
+ @Test
+ public void testClickQsTile() {
+ ComponentName c = new ComponentName("testpkg", "testcls");
+ mCommandQueue.clickQsTile(c);
+ waitForIdleSync();
+ verify(mCallbacks).clickTile(eq(c));
+ }
+
+ @Test
+ public void testToggleAppSplitScreen() {
+ mCommandQueue.toggleSplitScreen();
+ waitForIdleSync();
+ verify(mCallbacks).toggleSplitScreen();
+ }
+
+ @Test
+ public void testHandleSysnavKey() {
+ mCommandQueue.handleSystemNavigationKey(1);
+ waitForIdleSync();
+ verify(mCallbacks).handleSystemNavigationKey(eq(1));
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationGutsTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationGutsTest.java
index 2cd6dbd..c65f7150 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationGutsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationGutsTest.java
@@ -210,6 +210,18 @@
@Test
@UiThreadTest
+ public void testCloseControls_DoesNotUpdateNotificationChannelIfUnspecified() throws Exception {
+ mNotificationChannel.setImportance(NotificationManager.IMPORTANCE_UNSPECIFIED);
+ mNotificationGuts.bindNotification(mMockPackageManager, mMockINotificationManager,
+ mMockStatusBarNotification, null, null, null);
+
+ mNotificationGuts.closeControls(-1, -1, true);
+ verify(mMockINotificationManager, never()).updateNotificationChannelForPackage(
+ anyString(), anyInt(), any());
+ }
+
+ @Test
+ @UiThreadTest
public void testCloseControls_CallsUpdateNotificationChannelIfChanged() throws Exception {
mNotificationChannel.setImportance(NotificationManager.IMPORTANCE_LOW);
mNotificationGuts.bindNotification(mMockPackageManager, mMockINotificationManager,
diff --git a/packages/VpnDialogs/res/values-az-rAZ/strings.xml b/packages/VpnDialogs/res/values-az/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-az-rAZ/strings.xml
rename to packages/VpnDialogs/res/values-az/strings.xml
diff --git a/packages/VpnDialogs/res/values-be-rBY/strings.xml b/packages/VpnDialogs/res/values-be/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-be-rBY/strings.xml
rename to packages/VpnDialogs/res/values-be/strings.xml
diff --git a/packages/VpnDialogs/res/values-bn-rBD/strings.xml b/packages/VpnDialogs/res/values-bn/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-bn-rBD/strings.xml
rename to packages/VpnDialogs/res/values-bn/strings.xml
diff --git a/packages/VpnDialogs/res/values-bs-rBA/strings.xml b/packages/VpnDialogs/res/values-bs/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-bs-rBA/strings.xml
rename to packages/VpnDialogs/res/values-bs/strings.xml
diff --git a/packages/VpnDialogs/res/values-et-rEE/strings.xml b/packages/VpnDialogs/res/values-et/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-et-rEE/strings.xml
rename to packages/VpnDialogs/res/values-et/strings.xml
diff --git a/packages/VpnDialogs/res/values-eu-rES/strings.xml b/packages/VpnDialogs/res/values-eu/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-eu-rES/strings.xml
rename to packages/VpnDialogs/res/values-eu/strings.xml
diff --git a/packages/VpnDialogs/res/values-gl-rES/strings.xml b/packages/VpnDialogs/res/values-gl/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-gl-rES/strings.xml
rename to packages/VpnDialogs/res/values-gl/strings.xml
diff --git a/packages/VpnDialogs/res/values-gu-rIN/strings.xml b/packages/VpnDialogs/res/values-gu/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-gu-rIN/strings.xml
rename to packages/VpnDialogs/res/values-gu/strings.xml
diff --git a/packages/VpnDialogs/res/values-hy-rAM/strings.xml b/packages/VpnDialogs/res/values-hy/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-hy-rAM/strings.xml
rename to packages/VpnDialogs/res/values-hy/strings.xml
diff --git a/packages/VpnDialogs/res/values-is-rIS/strings.xml b/packages/VpnDialogs/res/values-is/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-is-rIS/strings.xml
rename to packages/VpnDialogs/res/values-is/strings.xml
diff --git a/packages/VpnDialogs/res/values-ka-rGE/strings.xml b/packages/VpnDialogs/res/values-ka/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-ka-rGE/strings.xml
rename to packages/VpnDialogs/res/values-ka/strings.xml
diff --git a/packages/VpnDialogs/res/values-kk-rKZ/strings.xml b/packages/VpnDialogs/res/values-kk/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-kk-rKZ/strings.xml
rename to packages/VpnDialogs/res/values-kk/strings.xml
diff --git a/packages/VpnDialogs/res/values-km-rKH/strings.xml b/packages/VpnDialogs/res/values-km/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-km-rKH/strings.xml
rename to packages/VpnDialogs/res/values-km/strings.xml
diff --git a/packages/VpnDialogs/res/values-kn-rIN/strings.xml b/packages/VpnDialogs/res/values-kn/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-kn-rIN/strings.xml
rename to packages/VpnDialogs/res/values-kn/strings.xml
diff --git a/packages/VpnDialogs/res/values-ky-rKG/strings.xml b/packages/VpnDialogs/res/values-ky/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-ky-rKG/strings.xml
rename to packages/VpnDialogs/res/values-ky/strings.xml
diff --git a/packages/VpnDialogs/res/values-lo-rLA/strings.xml b/packages/VpnDialogs/res/values-lo/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-lo-rLA/strings.xml
rename to packages/VpnDialogs/res/values-lo/strings.xml
diff --git a/packages/VpnDialogs/res/values-mk-rMK/strings.xml b/packages/VpnDialogs/res/values-mk/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-mk-rMK/strings.xml
rename to packages/VpnDialogs/res/values-mk/strings.xml
diff --git a/packages/VpnDialogs/res/values-ml-rIN/strings.xml b/packages/VpnDialogs/res/values-ml/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-ml-rIN/strings.xml
rename to packages/VpnDialogs/res/values-ml/strings.xml
diff --git a/packages/VpnDialogs/res/values-mn-rMN/strings.xml b/packages/VpnDialogs/res/values-mn/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-mn-rMN/strings.xml
rename to packages/VpnDialogs/res/values-mn/strings.xml
diff --git a/packages/VpnDialogs/res/values-mr-rIN/strings.xml b/packages/VpnDialogs/res/values-mr/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-mr-rIN/strings.xml
rename to packages/VpnDialogs/res/values-mr/strings.xml
diff --git a/packages/VpnDialogs/res/values-ms-rMY/strings.xml b/packages/VpnDialogs/res/values-ms/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-ms-rMY/strings.xml
rename to packages/VpnDialogs/res/values-ms/strings.xml
diff --git a/packages/VpnDialogs/res/values-my-rMM/strings.xml b/packages/VpnDialogs/res/values-my/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-my-rMM/strings.xml
rename to packages/VpnDialogs/res/values-my/strings.xml
diff --git a/packages/VpnDialogs/res/values-ne-rNP/strings.xml b/packages/VpnDialogs/res/values-ne/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-ne-rNP/strings.xml
rename to packages/VpnDialogs/res/values-ne/strings.xml
diff --git a/packages/VpnDialogs/res/values-pa-rIN/strings.xml b/packages/VpnDialogs/res/values-pa/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-pa-rIN/strings.xml
rename to packages/VpnDialogs/res/values-pa/strings.xml
diff --git a/packages/VpnDialogs/res/values-si-rLK/strings.xml b/packages/VpnDialogs/res/values-si/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-si-rLK/strings.xml
rename to packages/VpnDialogs/res/values-si/strings.xml
diff --git a/packages/VpnDialogs/res/values-sq-rAL/strings.xml b/packages/VpnDialogs/res/values-sq/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-sq-rAL/strings.xml
rename to packages/VpnDialogs/res/values-sq/strings.xml
diff --git a/packages/VpnDialogs/res/values-ta-rIN/strings.xml b/packages/VpnDialogs/res/values-ta/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-ta-rIN/strings.xml
rename to packages/VpnDialogs/res/values-ta/strings.xml
diff --git a/packages/VpnDialogs/res/values-te-rIN/strings.xml b/packages/VpnDialogs/res/values-te/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-te-rIN/strings.xml
rename to packages/VpnDialogs/res/values-te/strings.xml
diff --git a/packages/VpnDialogs/res/values-ur-rPK/strings.xml b/packages/VpnDialogs/res/values-ur/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-ur-rPK/strings.xml
rename to packages/VpnDialogs/res/values-ur/strings.xml
diff --git a/packages/VpnDialogs/res/values-uz-rUZ/strings.xml b/packages/VpnDialogs/res/values-uz/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-uz-rUZ/strings.xml
rename to packages/VpnDialogs/res/values-uz/strings.xml
diff --git a/packages/WallpaperCropper/res/values-et-rEE/strings.xml b/packages/WallpaperCropper/res/values-et/strings.xml
similarity index 100%
rename from packages/WallpaperCropper/res/values-et-rEE/strings.xml
rename to packages/WallpaperCropper/res/values-et/strings.xml
diff --git a/packages/WallpaperCropper/res/values-hy-rAM/strings.xml b/packages/WallpaperCropper/res/values-hy/strings.xml
similarity index 100%
rename from packages/WallpaperCropper/res/values-hy-rAM/strings.xml
rename to packages/WallpaperCropper/res/values-hy/strings.xml
diff --git a/packages/WallpaperCropper/res/values-ka-rGE/strings.xml b/packages/WallpaperCropper/res/values-ka/strings.xml
similarity index 100%
rename from packages/WallpaperCropper/res/values-ka-rGE/strings.xml
rename to packages/WallpaperCropper/res/values-ka/strings.xml
diff --git a/packages/WallpaperCropper/res/values-km-rKH/strings.xml b/packages/WallpaperCropper/res/values-km/strings.xml
similarity index 100%
rename from packages/WallpaperCropper/res/values-km-rKH/strings.xml
rename to packages/WallpaperCropper/res/values-km/strings.xml
diff --git a/packages/WallpaperCropper/res/values-lo-rLA/strings.xml b/packages/WallpaperCropper/res/values-lo/strings.xml
similarity index 100%
rename from packages/WallpaperCropper/res/values-lo-rLA/strings.xml
rename to packages/WallpaperCropper/res/values-lo/strings.xml
diff --git a/packages/WallpaperCropper/res/values-mn-rMN/strings.xml b/packages/WallpaperCropper/res/values-mn/strings.xml
similarity index 100%
rename from packages/WallpaperCropper/res/values-mn-rMN/strings.xml
rename to packages/WallpaperCropper/res/values-mn/strings.xml
diff --git a/packages/WallpaperCropper/res/values-ms-rMY/strings.xml b/packages/WallpaperCropper/res/values-ms/strings.xml
similarity index 100%
rename from packages/WallpaperCropper/res/values-ms-rMY/strings.xml
rename to packages/WallpaperCropper/res/values-ms/strings.xml
diff --git a/proto/src/ipconnectivity.proto b/proto/src/ipconnectivity.proto
index cf372bc..b5afc40 100644
--- a/proto/src/ipconnectivity.proto
+++ b/proto/src/ipconnectivity.proto
@@ -17,14 +17,26 @@
optional int32 network_id = 1;
};
-// Transport describes a physical technology used by a network. It is a subset
-// of the TRANSPORT_* constants defined in android.net.NetworkCapabilities.
-enum Transport {
+// LinkLayer describes a physical link layer technology used by a network.
+// It is not intended to map one to one to the TRANSPORT_* constants defined in
+// android.net.NetworkCapabilities. Instead it is intended to be used as
+// a dimension field for metrics events and aggregated metrics.
+// Next tag: 7
+enum LinkLayer {
+ // An unknown link layer technology.
UNKNOWN = 0;
+
BLUETOOTH = 1;
CELLULAR = 2;
ETHERNET = 3;
WIFI = 4;
+
+ // Indicates that the link layer dimension is not relevant for the metrics or
+ // event considered.
+ NONE = 5;
+
+ // Indicates that the metrics or event considered may involve several links.
+ MULTIPLE = 6;
};
// A pair of (key, value) integers for describing histogram-like statistics.
@@ -65,7 +77,7 @@
// This message is associated to android.net.metrics.IpReachabilityEvent.
message IpReachabilityEvent {
// The interface name (wlan, rmnet, lo, ...) on which the probe was sent.
- // Deprecated since version 2, replaced by transport field.
+ // Deprecated since version 2, to be replaced by link_layer field.
optional string if_name = 1 [deprecated = true];
// The event type code of the probe, represented by constants defined in
@@ -179,7 +191,7 @@
// android.net.metrics.DhcpErrorEvent.
message DHCPEvent {
// The interface name (wlan, rmnet, lo, ...) on which the event happened.
- // Deprecated since version 2, replaced by transport field.
+ // Deprecated since version 2, to be replaced by link_layer field.
optional string if_name = 1 [deprecated = true];
oneof value {
@@ -284,7 +296,7 @@
// This message is associated to android.net.metrics.IpManagerEvent.
message IpProvisioningEvent {
// The interface name (wlan, rmnet, lo, ...) on which the probe was sent.
- // Deprecated since version 2, replaced by transport field.
+ // Deprecated since version 2, to be replaced by link_layer field.
optional string if_name = 1 [deprecated = true];
// The code of the IP provisioning event, represented by constants defined in
@@ -296,19 +308,21 @@
}
// Represents one of the IP connectivity event defined in this file.
-// Next tag: 15
+// Next tag: 16
message IpConnectivityEvent {
// Time in ms when the event was recorded.
optional int64 time_ms = 1;
- // Physical transport of the network on which the event happened.
+ // Physical link layer of the network on which the event happened.
+ // Acts as a dimension key.
// Since version 2.
- optional Transport transport = 12;
+ optional LinkLayer link_layer = 15;
// Event type.
oneof event {
// An event about the system default network.
+ // The link_layer field is not relevant for this event and set to NONE.
DefaultNetworkEvent default_network_event = 2;
// An IP reachability probe event.
@@ -318,7 +332,8 @@
NetworkEvent network_event = 4;
// A batch of DNS lookups.
- // Deprecated in the nyc-mr2 release since version 2, and replaced by dns_latencies.
+ // Deprecated in the nyc-mr2 release since version 2,and replaced by
+ // dns_latencies.
DNSLookupBatch dns_lookup_batch = 5 [deprecated = true];
// DNS lookup latency statistics.
diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto
index eed7e70..21139da 100644
--- a/proto/src/metrics_constants.proto
+++ b/proto/src/metrics_constants.proto
@@ -3105,6 +3105,12 @@
// PACKAGE: The package name of the app the permission was revoked for
ACTION_PERMISSION_REVOKE_READ_PHONE_NUMBER = 739;
+ // ACTION: QS Brightness Slider (with auto brightness disabled, and VR enabled)
+ // SUBTYPE: slider value
+ // CATEGORY: QUICK_SETTINGS
+ // OS: 6.0
+ ACTION_BRIGHTNESS_FOR_VR = 498;
+
// ACTION: A captive portal was detected during network validation
// CATEGORY: NOTIFICATION
// OS: N-MR2
@@ -3165,6 +3171,21 @@
// CATEGORY: Settings
DIALOG_SUPPORT_SYSTEM_INFORMATION = 756;
+ // These values should never appear in log outputs - they are reserved for
+ // internal Tron use.
+ RESERVED_FOR_LOGBUILDER_VIEW = 757;
+ RESERVED_FOR_LOGBUILDER_CATEGORY = 758;
+ RESERVED_FOR_LOGBUILDER_TYPE = 759;
+
+ // ACTION: "Do not show again" was enabled in the support disclaimer and the
+ // user accepted
+ ACTION_SKIP_DISCLAIMER_SELECTED = 760;
+
+ // Enclosing category for group of APP_TRANSITION_FOO events,
+ // logged when we execute an app transition.
+ APP_TRANSITION = 761;
+
+
// ---- End O Constants, all O constants go above this line ----
// Add new aosp constants above this line.
diff --git a/proto/src/system_messages.proto b/proto/src/system_messages.proto
new file mode 100644
index 0000000..5b91776
--- /dev/null
+++ b/proto/src/system_messages.proto
@@ -0,0 +1,79 @@
+// Copyright (C) 2017 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto2";
+
+option java_package = "com.android.internal.messages";
+option java_outer_classname = "SystemMessageProto";
+
+package com_android_notifications;
+
+// Descriptors for system messages: notifications, dialogs, toasts, etc.
+message SystemMessage {
+
+ // System message IDs
+ // These are non-consecutive in order to preserve some existing, ad hoc IDs.
+ enum ID {
+ // Unknown
+ NOTE_UNKNOWN = 0;
+
+ // Notify the user that a screenshot was captured.
+ // Package: com.android.systemui
+ NOTE_GLOBAL_SCREENSHOT = 1;
+
+ // Warn the user about an invalid charger.
+ // Package: com.android.systemui
+ NOTE_BAD_CHARGER = 2;
+
+ // Warn the user about low battery.
+ // Package: com.android.systemui
+ NOTE_POWER_LOW = 3;
+
+ // Warn the user that the device has gotten warm.
+ // Package: com.android.systemui
+ NOTE_HIGH_TEMP = 4;
+
+ // Warn the user that some notifications are hidden.
+ // Package: com.android.systemui
+ NOTE_HIDDEN_NOTIFICATIONS = 5;
+
+ // Notify the user of a problem with a plugin (dev devices only).
+ // Package: com.android.systemui
+ NOTE_PLUGIN = 6;
+
+ // Confirm that the user wants to remove the guest account.
+ // Package: com.android.systemui
+ NOTE_REMOVE_GUEST = 1010;
+
+ // Confirm that the user wants to log out of the device.
+ // Package: com.android.systemui
+ NOTE_LOGOUT_USER = 1011;
+
+ // Notify the user about public volume state changes..
+ // Package: com.android.systemui
+ NOTE_STORAGE_PUBLIC = 0x53505542;
+
+ // Notify the user about private volume state changes.
+ // Package: com.android.systemui
+ NOTE_STORAGE_PRIVATE = 0x53505256;
+
+ // Notify the user about an unsupported storage device..
+ // Package: com.android.systemui
+ NOTE_STORAGE_DISK = 0x5344534b;
+
+ // Notify the user that data or apps are being moved to external storage.
+ // Package: com.android.systemui
+ NOTE_STORAGE_MOVE = 0x534d4f56;
+ }
+}
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index dafa3f6..0004fde 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -1172,6 +1172,7 @@
service.onAdded();
userState.mBoundServices.add(service);
userState.mComponentNameToServiceMap.put(service.mComponentName, service);
+ scheduleNotifyClientsOfServicesStateChange();
}
} catch (RemoteException re) {
/* do nothing */
@@ -1193,6 +1194,7 @@
Service boundService = userState.mBoundServices.get(i);
userState.mComponentNameToServiceMap.put(boundService.mComponentName, boundService);
}
+ scheduleNotifyClientsOfServicesStateChange();
}
/**
@@ -1357,10 +1359,15 @@
|| userState.mClients.getRegisteredCallbackCount() > 0)) {
userState.mLastSentClientState = clientState;
mMainHandler.obtainMessage(MainHandler.MSG_SEND_STATE_TO_CLIENTS,
- clientState, userState.mUserId) .sendToTarget();
+ clientState, userState.mUserId).sendToTarget();
}
}
+ private void scheduleNotifyClientsOfServicesStateChange() {
+ mMainHandler.obtainMessage(MainHandler.MSG_SEND_SERVICES_STATE_CHANGED_TO_CLIENTS)
+ .sendToTarget();
+ }
+
private void scheduleUpdateInputFilter(UserState userState) {
mMainHandler.obtainMessage(MainHandler.MSG_UPDATE_INPUT_FILTER, userState).sendToTarget();
}
@@ -2057,6 +2064,7 @@
public static final int MSG_SHOW_ENABLED_TOUCH_EXPLORATION_DIALOG = 7;
public static final int MSG_SEND_KEY_EVENT_TO_INPUT_FILTER = 8;
public static final int MSG_CLEAR_ACCESSIBILITY_FOCUS = 9;
+ public static final int MSG_SEND_SERVICES_STATE_CHANGED_TO_CLIENTS = 10;
public MainHandler(Looper looper) {
super(looper);
@@ -2121,6 +2129,10 @@
}
bridge.clearAccessibilityFocusNotLocked(windowId);
} break;
+
+ case MSG_SEND_SERVICES_STATE_CHANGED_TO_CLIENTS: {
+ notifyClientsOfServicesStateChange();
+ } break;
}
}
@@ -2164,6 +2176,26 @@
clients.finishBroadcast();
}
}
+
+ private void notifyClientsOfServicesStateChange() {
+ RemoteCallbackList<IAccessibilityManagerClient> clients;
+ synchronized (mLock) {
+ clients = getCurrentUserStateLocked().mClients;
+ }
+ try {
+ final int userClientCount = clients.beginBroadcast();
+ for (int i = 0; i < userClientCount; i++) {
+ IAccessibilityManagerClient client = clients.getBroadcastItem(i);
+ try {
+ client.notifyServicesStateChanged();
+ } catch (RemoteException re) {
+ /* ignore */
+ }
+ }
+ } finally {
+ clients.finishBroadcast();
+ }
+ }
}
private int findWindowIdLocked(IBinder token) {
@@ -2483,6 +2515,7 @@
}
UserState userState = getUserStateLocked(mUserId);
onUserStateChangedLocked(userState);
+ scheduleNotifyClientsOfServicesStateChange();
}
} finally {
Binder.restoreCallingIdentity(identity);
diff --git a/services/autofill/java/com/android/server/autofill/AutoFillManagerService.java b/services/autofill/java/com/android/server/autofill/AutoFillManagerService.java
index 6a16131..87eaf29 100644
--- a/services/autofill/java/com/android/server/autofill/AutoFillManagerService.java
+++ b/services/autofill/java/com/android/server/autofill/AutoFillManagerService.java
@@ -18,28 +18,23 @@
import static android.Manifest.permission.MANAGE_AUTO_FILL;
import static android.content.Context.AUTO_FILL_MANAGER_SERVICE;
-import static android.view.View.ASSIST_FLAG_SANITIZED_TEXT;
-import static android.view.View.ASSIST_FLAG_NON_SANITIZED_TEXT;
+import static android.view.View.AUTO_FILL_FLAG_TYPE_FILL;
+import static android.view.View.AUTO_FILL_FLAG_TYPE_SAVE;
+
+import static com.android.server.autofill.AutoFillUI.MSG_SHOW_ALL_NOTIFICATIONS;
+import static com.android.server.autofill.AutoFillUI.SHOW_ALL_NOTIFICATIONS_DELAY_MS;
import android.Manifest;
import android.app.AppGlobals;
-import android.app.Notification;
-import android.app.Notification.Action;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
-import android.content.pm.UserInfo;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Binder;
+import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
@@ -48,7 +43,6 @@
import android.os.ShellCallback;
import android.os.SystemClock;
import android.os.UserHandle;
-import android.os.UserManager;
import android.provider.Settings;
import android.service.autofill.IAutoFillManagerService;
import android.text.TextUtils;
@@ -65,7 +59,6 @@
import java.io.FileDescriptor;
import java.io.PrintWriter;
-import java.util.List;
/**
* Entry point service for auto-fill management.
@@ -86,6 +79,7 @@
protected static final int MSG_UNBIND = 1;
private final AutoFillManagerServiceStub mServiceStub;
+ private final AutoFillUI mUi;
private final Context mContext;
private final ContentResolver mResolver;
@@ -99,7 +93,7 @@
removeStaleServiceForUser(msg.arg1);
return;
case MSG_SHOW_ALL_NOTIFICATIONS:
- showAllNotifications();
+ mUi.showAllNotifications();
return;
default:
Slog.w(TAG, "Invalid message: " + msg);
@@ -129,6 +123,7 @@
super(context);
mContext = context;
+ mUi = new AutoFillUI(context, this, mLock);
mResolver = context.getContentResolver();
mServiceStub = new AutoFillManagerServiceStub();
}
@@ -176,8 +171,9 @@
Slog.w(TAG, "no service info for " + serviceComponent);
return null;
}
- return new AutoFillManagerServiceImpl(this, mContext, mLock, FgThread.getHandler(), userId,
- serviceInfo.applicationInfo.uid, serviceComponent, SERVICE_BINDING_LIFETIME_MS);
+ return new AutoFillManagerServiceImpl(this, mUi, mContext, mLock, FgThread.getHandler(),
+ userId, serviceInfo.applicationInfo.uid, serviceComponent,
+ SERVICE_BINDING_LIFETIME_MS);
}
/**
@@ -186,7 +182,8 @@
* <p>First it tries to return the existing instance from the cache; if it's not cached, it
* creates a new instance and caches it.
*/
- private AutoFillManagerServiceImpl getServiceForUserLocked(int userId) {
+ // TODO(b/33197203): make private once AutoFillUi does not uses notifications
+ AutoFillManagerServiceImpl getServiceForUserLocked(int userId) {
AutoFillManagerServiceImpl service = mServicesCache.get(userId);
if (service != null) {
if (DEBUG) Log.d(TAG, "reusing cached service for userId " + userId);
@@ -251,14 +248,14 @@
final class AutoFillManagerServiceStub extends IAutoFillManagerService.Stub {
@Override
- public void requestAutoFill(IBinder activityToken, int userId, int flags) {
+ public void requestAutoFill(IBinder activityToken, int userId, Bundle extras, int flags) {
if (DEBUG) Slog.d(TAG, "requestAutoFill: flags=" + flags + ", userId=" + userId);
mContext.enforceCallingPermission(MANAGE_AUTO_FILL, TAG);
synchronized (mLock) {
final AutoFillManagerServiceImpl service = getServiceForUserLocked(userId);
if (service != null) {
- service.requestAutoFill(activityToken, flags);
+ service.requestAutoFill(activityToken, extras, flags);
}
}
}
@@ -310,147 +307,8 @@
if (DEBUG) Slog.d(TAG, "settings (" + uri + " changed for " + userId);
synchronized (mLock) {
removeCachedServiceForUserLocked(userId);
- final ComponentName serviceComponent = getProviderForUser(userId);
- if (serviceComponent == null) {
- cancelNotificationLocked(userId);
- } else {
- showNotification(serviceComponent, userId);
- }
+ mUi.updateNotification(userId);
}
}
}
-
- ////////////////////////////////////////////////////////////////////////////
- // TODO: temporary code using a notification to request auto-fill. //
- // Will be removed once UX decide the right way to present it to the user //
- ////////////////////////////////////////////////////////////////////////////
-
- // TODO: remove from frameworks/base/core/res/AndroidManifest.xml once it's not used anymore
- private static final String NOTIFICATION_AUTO_FILL_INTENT =
- "com.android.internal.autofill.action.REQUEST_AUTOFILL";
- private static final String EXTRA_USER_ID = "user_id";
- private static final String EXTRA_FLAGS = "flags";
-
- private static final int MSG_SHOW_ALL_NOTIFICATIONS = 42;
- private static final int SHOW_ALL_NOTIFICATIONS_DELAY_MS = 5000;
-
- private BroadcastReceiver mNotificationReceiver;
-
- final class NotificationReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- final int userId = intent.getIntExtra(EXTRA_USER_ID, -1);
- final int flags = intent.getIntExtra(EXTRA_FLAGS, 0);
- if (DEBUG) Slog.d(TAG, "Requesting autofill by notification for user " + userId);
- synchronized (mLock) {
- final AutoFillManagerServiceImpl service = getServiceForUserLocked(userId);
- if (service == null) {
- Slog.w(TAG, "no auto-fill service for user " + userId);
- } else {
- service.requestAutoFill(null, flags);
- }
- }
- }
- }
-
- private ComponentName getProviderForUser(int userId) {
- ComponentName serviceComponent = null;
- ServiceInfo serviceInfo = null;
- final String componentName = Settings.Secure.getStringForUser(
- mResolver, Settings.Secure.AUTO_FILL_SERVICE, userId);
- if (!TextUtils.isEmpty(componentName)) {
- try {
- serviceComponent = ComponentName.unflattenFromString(componentName);
- serviceInfo =
- AppGlobals.getPackageManager().getServiceInfo(serviceComponent, 0, userId);
- } catch (RuntimeException | RemoteException e) {
- Slog.wtf(TAG, "Bad auto-fill service name " + componentName, e);
- return null;
- }
- }
-
- if (DEBUG) Slog.d(TAG, "getServiceComponentForUser(" + userId + "): component="
- + serviceComponent + ", info: " + serviceInfo);
- if (serviceInfo == null) {
- Slog.w(TAG, "no service info for " + serviceComponent);
- return null;
- }
- return serviceComponent;
- }
-
- private void showAllNotifications() {
- final UserManager userManager =
- (UserManager) mContext.getSystemService(Context.USER_SERVICE);
-
- final List<UserInfo> allUsers = userManager.getUsers(true);
-
- for (UserInfo user : allUsers) {
- final ComponentName serviceComponent = getProviderForUser(user.id);
- if (serviceComponent != null) {
- showNotification(serviceComponent, user.id);
- }
- }
- }
-
- private void showNotification(ComponentName serviceComponent, int userId) {
- if (DEBUG) Log.d(TAG, "showNotification() for " + userId + ": " + serviceComponent);
-
- synchronized (mLock) {
- if (mNotificationReceiver == null) {
- mNotificationReceiver = new NotificationReceiver();
- mContext.registerReceiver(mNotificationReceiver,
- new IntentFilter(NOTIFICATION_AUTO_FILL_INTENT));
- }
- }
-
- final Intent fillIntent = new Intent(NOTIFICATION_AUTO_FILL_INTENT);
- fillIntent.putExtra(EXTRA_USER_ID, userId);
- fillIntent.putExtra(EXTRA_FLAGS, ASSIST_FLAG_SANITIZED_TEXT);
- final PendingIntent fillPendingIntent = PendingIntent.getBroadcast(mContext,
- ASSIST_FLAG_SANITIZED_TEXT, fillIntent, PendingIntent.FLAG_UPDATE_CURRENT);
- final Action fillAction = new Action.Builder(null, "FILL", fillPendingIntent).build();
-
- final Intent saveIntent = new Intent(NOTIFICATION_AUTO_FILL_INTENT);
- saveIntent.putExtra(EXTRA_USER_ID, userId);
- saveIntent.putExtra(EXTRA_FLAGS, ASSIST_FLAG_NON_SANITIZED_TEXT);
- final PendingIntent savePendingIntent = PendingIntent.getBroadcast(mContext,
- ASSIST_FLAG_NON_SANITIZED_TEXT, saveIntent, PendingIntent.FLAG_UPDATE_CURRENT);
- final Action saveAction = new Action.Builder(null, "SAVE", savePendingIntent).build();
-
- final String packageName = serviceComponent.getPackageName();
- String providerName = null;
- final PackageManager pm = mContext.getPackageManager();
- try {
- final ApplicationInfo info = pm.getApplicationInfoAsUser(packageName, 0, userId);
- if (info != null) {
- providerName = pm.getApplicationLabel(info).toString();
- }
- } catch (Exception e) {
- providerName = packageName;
- }
- final String title = "AutoFill actions";
- final String subTitle = "Provider: " + providerName + "\n" + "User: " + userId;
-
- final Notification notification = new Notification.Builder(mContext)
- .setCategory(Notification.CATEGORY_SYSTEM)
- .setOngoing(true)
- .setSmallIcon(com.android.internal.R.drawable.stat_sys_adb)
- .setLocalOnly(true)
- .setColor(mContext.getColor(
- com.android.internal.R.color.system_notification_accent_color))
- .setContentTitle(title)
- .setStyle(new Notification.BigTextStyle().bigText(subTitle))
- .setActions(fillAction, saveAction)
- .build();
- NotificationManager.from(mContext).notify(userId, notification);
- }
-
- private void cancelNotificationLocked(int userId) {
- if (DEBUG) Log.d(TAG, "cancelNotificationLocked(): " + userId);
- NotificationManager.from(mContext).cancel(userId);
- }
-
- /////////////////////////////////////////
- // End of temporary notification code. //
- /////////////////////////////////////////
}
diff --git a/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceImpl.java
index 82356c8..3de8a8b 100644
--- a/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceImpl.java
+++ b/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceImpl.java
@@ -18,9 +18,12 @@
import static com.android.server.autofill.AutoFillManagerService.DEBUG;
+import android.annotation.Nullable;
+import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.app.IActivityManager;
+import android.app.assist.AssistStructure;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -29,6 +32,7 @@
import android.content.ServiceConnection;
import android.content.pm.PackageManager;
import android.icu.text.DateFormat;
+import android.os.Bundle;
import android.os.DeadObjectException;
import android.os.Handler;
import android.os.IBinder;
@@ -37,16 +41,24 @@
import android.os.UserHandle;
import android.service.autofill.AutoFillService;
import android.service.autofill.AutoFillServiceInfo;
+import android.service.autofill.IAutoFillAppCallback;
+import android.service.autofill.IAutoFillServerCallback;
import android.service.autofill.IAutoFillService;
-import android.util.Log;
+import android.service.voice.VoiceInteractionSession;
import android.util.PrintWriterPrinter;
import android.util.Slog;
+import android.util.SparseArray;
import android.util.TimeUtils;
+import android.view.autofill.AutoFillId;
+import android.view.autofill.Dataset;
+import android.view.autofill.FillResponse;
import com.android.internal.annotations.GuardedBy;
+import com.android.internal.os.IResultReceiver;
import com.android.server.LocalServices;
import java.io.PrintWriter;
+import java.util.Arrays;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
@@ -60,6 +72,9 @@
private static final String TAG = "AutoFillManagerServiceImpl";
+ /** Used do assign ids to new ServerCallback instances. */
+ private static int sServerCallbackCounter = 0;
+
private final int mUserId;
private final int mUid;
private final ComponentName mComponent;
@@ -68,6 +83,7 @@
private final Object mLock;
private final AutoFillServiceInfo mInfo;
private final AutoFillManagerService mManagerService;
+ private final AutoFillUI mUi;
// TODO(b/33197203): improve its usage
// - set maximum number of entries
@@ -89,10 +105,19 @@
}
};
+ /**
+ * Cache of pending ServerCallbacks, keyed by {@link ServerCallback#id}.
+ *
+ * <p>They're kept until the AutoFillService handles a request, or an error occurs.
+ */
+ // TODO(b/33197203): need to make sure service is bound while callback is pending
+ @GuardedBy("mLock")
+ private static final SparseArray<ServerCallback> mServerCallbacks = new SparseArray<>();
+
private final ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
- if (DEBUG) Log.d(TAG, "onServiceConnected():" + name);
+ if (DEBUG) Slog.d(TAG, "onServiceConnected():" + name);
synchronized (mLock) {
mService = IAutoFillService.Stub.asInterface(service);
try {
@@ -102,17 +127,18 @@
return;
}
if (!mQueuedRequests.isEmpty()) {
- if (DEBUG) Log.d(TAG, "queued requests:" + mQueuedRequests.size());
+ if (DEBUG) Slog.d(TAG, "queued requests:" + mQueuedRequests.size());
}
for (final QueuedRequest request: mQueuedRequests) {
- requestAutoFillLocked(request.activityToken, request.flags, false);
+ requestAutoFillLocked(request.activityToken, request.extras, request.flags,
+ false);
}
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
- if (DEBUG) Log.d(TAG, name + " disconnected");
+ if (DEBUG) Slog.d(TAG, name + " disconnected");
synchronized (mLock) {
mService = null;
mManagerService.removeCachedServiceForUserLocked(mUserId);
@@ -120,6 +146,39 @@
}
};
+
+ /**
+ * Receiver of assist data from the app's {@link Activity}, uses the {@code resultData} as
+ * the {@link ServerCallback#id}.
+ */
+ private final IResultReceiver mAssistReceiver = new IResultReceiver.Stub() {
+ @Override
+ public void send(int resultCode, Bundle resultData) throws RemoteException {
+ if (DEBUG) Slog.d(TAG, "resultCode on mAssistReceiver: " + resultCode);
+
+ final IBinder appBinder = resultData.getBinder(AutoFillService.KEY_CALLBACK);
+ if (appBinder == null) {
+ Slog.w(TAG, "no app callback on mAssistReceiver's resultData");
+ return;
+ }
+ final AssistStructure structure = resultData
+ .getParcelable(VoiceInteractionSession.KEY_STRUCTURE);
+ final Bundle data = resultData.getBundle(VoiceInteractionSession.KEY_RECEIVER_EXTRAS);
+ final int flags = resultData.getInt(VoiceInteractionSession.KEY_FLAGS, 0);
+
+ final ServerCallback serverCallback;
+ synchronized (mLock) {
+ serverCallback = mServerCallbacks.get(resultCode);
+ if (serverCallback == null) {
+ Slog.w(TAG, "no server callback for id " + resultCode);
+ return;
+ }
+ serverCallback.appCallback = IAutoFillAppCallback.Stub.asInterface(appBinder);
+ }
+ mService.autoFill(structure, serverCallback, serverCallback.extras, flags);
+ }
+ };
+
@GuardedBy("mLock")
private IAutoFillService mService;
private boolean mBound;
@@ -128,9 +187,11 @@
// Estimated time when the service will be evicted from the cache.
long mEstimateTimeOfDeath;
- AutoFillManagerServiceImpl(AutoFillManagerService managerService, Context context, Object lock,
- Handler handler, int userId, int uid,ComponentName component, long ttl) {
+ AutoFillManagerServiceImpl(AutoFillManagerService managerService, AutoFillUI ui,
+ Context context, Object lock, Handler handler, int userId, int uid,
+ ComponentName component, long ttl) {
mManagerService = managerService;
+ mUi = ui;
mContext = context;
mLock = lock;
mUserId = userId;
@@ -180,7 +241,14 @@
if (DEBUG) Slog.d(TAG, "Bound to " + mComponent);
}
- void requestAutoFill(IBinder activityToken, int flags) {
+ /**
+ * Asks service to auto-fill an activity.
+ *
+ * @param activityToken activity token
+ * @param extras bundle to be passed to the {@link AutoFillService} method.
+ * @param flags optional flags.
+ */
+ void requestAutoFill(@Nullable IBinder activityToken, @Nullable Bundle extras, int flags) {
synchronized (mLock) {
if (!mBound) {
Slog.w(TAG, "requestAutoFill() failed because it's not bound to service");
@@ -211,21 +279,26 @@
DateFormat.getDateTimeInstance().format(new Date()) + " - " + activityToken;
synchronized (mLock) {
mRequestHistory.add(historyItem);
- requestAutoFillLocked(activityToken, flags, true);
+ requestAutoFillLocked(activityToken, extras, flags, true);
}
}
- private void requestAutoFillLocked(IBinder activityToken, int flags, boolean queueIfNecessary) {
+ private void requestAutoFillLocked(IBinder activityToken, @Nullable Bundle extras, int flags,
+ boolean queueIfNecessary) {
if (mService == null) {
if (!queueIfNecessary) {
Slog.w(TAG, "requestAutoFillLocked(): service is null");
return;
}
if (DEBUG) Slog.d(TAG, "requestAutoFill(): service not set yet, queuing it");
- mQueuedRequests.add(new QueuedRequest(activityToken, flags));
+ mQueuedRequests.add(new QueuedRequest(activityToken, extras, flags));
return;
}
+ final int callbackId = ++sServerCallbackCounter;
+ final ServerCallback serverCallback = new ServerCallback(callbackId, extras);
+ mServerCallbacks.put(callbackId, serverCallback);
+
/*
* TODO(b/33197203): apply security checks below:
* - checks if disabled by secure settings / device policy
@@ -235,8 +308,7 @@
*/
try {
// TODO(b/33197203): add MetricsLogger call
- if (!mAm.requestAutoFillData(mService.getAssistReceiver(), null, activityToken,
- flags)) {
+ if (!mAm.requestAutoFillData(mAssistReceiver, null, callbackId, activityToken, flags)) {
// TODO(b/33197203): might need a way to warn user (perhaps a new method on
// AutoFillService).
Slog.w(TAG, "failed to request auto-fill data for " + activityToken);
@@ -251,7 +323,7 @@
// Sanity check.
if (mService == null) {
- Log.w(TAG, "service already null on shutdown");
+ Slog.w(TAG, "service already null on shutdown");
return;
}
try {
@@ -273,6 +345,44 @@
}
}
+ /**
+ * Called by {@link AutoFillUI} to fill an activity after the user selected a dataset.
+ */
+ void autoFillApp(int callbackId, Dataset dataset) {
+ // TODO(b/33197203): add MetricsLogger call
+
+ if (dataset == null) {
+ Slog.w(TAG, "autoFillApp(): no dataset for callback id " + callbackId);
+ return;
+ }
+
+ final ServerCallback serverCallback;
+ synchronized (mLock) {
+ serverCallback = mServerCallbacks.get(callbackId);
+ if (serverCallback == null) {
+ Slog.w(TAG, "autoFillApp(): no server callback with id " + callbackId);
+ return;
+ }
+ if (serverCallback.appCallback == null) {
+ Slog.w(TAG, "autoFillApp(): no app callback for server callback " + callbackId);
+ return;
+ }
+ // TODO(b/33197203): use a handler?
+ try {
+ if (DEBUG) Slog.d(TAG, "autoFillApp(): the buck is on the app: " + dataset);
+ serverCallback.appCallback.autoFill(dataset);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Error auto-filling activity: " + e);
+ }
+ removeServerCallbackLocked(callbackId);
+ }
+ }
+
+ void removeServerCallbackLocked(int id) {
+ if (DEBUG) Slog.d(TAG, "Removing " + id + " from server callbacks");
+ mServerCallbacks.remove(id);
+ }
+
void dumpLocked(String prefix, PrintWriter pw) {
if (!mValid) {
pw.print(" NOT VALID: ");
@@ -284,6 +394,8 @@
return;
}
+ final String prefix2 = prefix + " ";
+
pw.print(prefix); pw.print("mUserId="); pw.println(mUserId);
pw.print(prefix); pw.print("mUid="); pw.println(mUid);
pw.print(prefix); pw.print("mComponent="); pw.println(mComponent.flattenToShortString());
@@ -303,7 +415,6 @@
pw.print(prefix); pw.println("No history");
} else {
pw.print(prefix); pw.println("History:");
- final String prefix2 = prefix + prefix;
for (int i = 0; i < mRequestHistory.size(); i++) {
pw.print(prefix2); pw.print(i); pw.print(": "); pw.println(mRequestHistory.get(i));
}
@@ -312,11 +423,28 @@
pw.print(prefix); pw.println("No queued requests");
} else {
pw.print(prefix); pw.println("Queued requests:");
- final String prefix2 = prefix + prefix;
for (int i = 0; i < mQueuedRequests.size(); i++) {
pw.print(prefix2); pw.print(i); pw.print(": "); pw.println(mQueuedRequests.get(i));
}
}
+
+ pw.print(prefix); pw.print("sServerCallbackCounter="); pw.println(sServerCallbackCounter);
+ final int size = mServerCallbacks.size();
+ if (size == 0) {
+ pw.print(prefix); pw.println("No server callbacks");
+ } else {
+ pw.print(prefix); pw.print(size); pw.println(" server callbacks:");
+ for (int i = 0; i < size; i++) {
+ pw.print(prefix2); pw.print(mServerCallbacks.keyAt(i));
+ final ServerCallback callback = mServerCallbacks.valueAt(i);
+ if (callback.appCallback == null) {
+ pw.println("(no appCallback)");
+ } else {
+ pw.print(" (app callback: "); pw.print(callback.appCallback) ; pw.println(")");
+ }
+ }
+ pw.println();
+ }
}
@Override
@@ -327,10 +455,12 @@
private static final class QueuedRequest {
final IBinder activityToken;
+ final Bundle extras;
final int flags;
- QueuedRequest(IBinder activityToken, int flags) {
+ QueuedRequest(IBinder activityToken, Bundle extras, int flags) {
this.activityToken = activityToken;
+ this.extras = extras;
this.flags = flags;
}
@@ -339,4 +469,54 @@
return "flags: " + flags + " token: " + activityToken;
}
}
+
+ /**
+ * A bridge between the {@link AutoFillService} implementation and the activity being
+ * auto-filled (represented through the {@link IAutoFillAppCallback}).
+ */
+ private final class ServerCallback extends IAutoFillServerCallback.Stub {
+
+ private final int id;
+ private final Bundle extras;
+ private IAutoFillAppCallback appCallback;
+
+ private ServerCallback(int id, Bundle extras) {
+ this.id = id;
+ this.extras = extras;
+ }
+
+ @Override
+ public void showResponse(FillResponse response) {
+ // TODO(b/33197203): add MetricsLogger call
+ if (DEBUG) Slog.d(TAG, "showResponse(): " + response);
+
+ mUi.showOptions(mUserId, id, response);
+ }
+
+ @Override
+ public void showError(String message) {
+ // TODO(b/33197203): add MetricsLogger call
+ if (DEBUG) Slog.d(TAG, "showError(): " + message);
+
+ mUi.showError(message);
+
+ removeSelf();
+ }
+
+ @Override
+ public void highlightSavedFields(AutoFillId[] ids) {
+ // TODO(b/33197203): add MetricsLogger call
+ if (DEBUG) Slog.d(TAG, "showSaved(): " + Arrays.toString(ids));
+
+ mUi.highlightSavedFields(ids);
+
+ removeSelf();
+ }
+
+ private void removeSelf() {
+ synchronized (mLock) {
+ removeServerCallbackLocked(id);
+ }
+ }
+ }
}
diff --git a/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceShellCommand.java b/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceShellCommand.java
index aa3503b..26f2451 100644
--- a/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceShellCommand.java
+++ b/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceShellCommand.java
@@ -16,10 +16,11 @@
package com.android.server.autofill;
-import static android.view.View.ASSIST_FLAG_SANITIZED_TEXT;
-import static android.view.View.ASSIST_FLAG_NON_SANITIZED_TEXT;
+import static android.view.View.AUTO_FILL_FLAG_TYPE_FILL;
+import static android.view.View.AUTO_FILL_FLAG_TYPE_SAVE;
import android.app.ActivityManager;
+import android.os.Bundle;
import android.os.RemoteException;
import android.os.ShellCommand;
import android.os.UserHandle;
@@ -44,9 +45,9 @@
try {
switch (cmd) {
case "fill":
- return requestAutoFill(ASSIST_FLAG_SANITIZED_TEXT);
+ return requestAutoFill(AUTO_FILL_FLAG_TYPE_FILL);
case "save":
- return requestAutoFill(ASSIST_FLAG_NON_SANITIZED_TEXT);
+ return requestAutoFill(AUTO_FILL_FLAG_TYPE_SAVE);
default:
return handleDefaultCommands(cmd);
}
@@ -73,7 +74,7 @@
private int requestAutoFill(int flags) throws RemoteException {
final int userId = getUserIdFromArgs();
- mService.requestAutoFill(null, userId, flags);
+ mService.requestAutoFill(null, userId, null, flags);
return 0;
}
diff --git a/services/autofill/java/com/android/server/autofill/AutoFillUI.java b/services/autofill/java/com/android/server/autofill/AutoFillUI.java
new file mode 100644
index 0000000..08e81d3
--- /dev/null
+++ b/services/autofill/java/com/android/server/autofill/AutoFillUI.java
@@ -0,0 +1,471 @@
+/*
+ * Copyright (C) 2016 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.autofill;
+
+import static android.view.View.AUTO_FILL_FLAG_TYPE_SAVE;
+import static android.view.View.AUTO_FILL_FLAG_TYPE_FILL;
+
+import static com.android.server.autofill.AutoFillManagerService.DEBUG;
+
+import android.app.Activity;
+import android.app.AppGlobals;
+import android.app.Notification;
+import android.app.Notification.Action;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ServiceInfo;
+import android.content.pm.UserInfo;
+import android.os.Binder;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.os.UserManager;
+import android.provider.Settings;
+import android.service.autofill.AutoFillService;
+import android.text.TextUtils;
+import android.util.Log;
+import android.util.Slog;
+import android.view.autofill.Dataset;
+import android.view.autofill.AutoFillId;
+import android.view.autofill.FillResponse;
+import android.widget.Toast;
+
+import com.android.server.UiThread;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+
+/**
+ * Handles all auto-fill related UI tasks.
+ */
+// TODO(b/33197203): document exactly what once the auto-fill bar is implemented
+final class AutoFillUI {
+
+ private static final String TAG = "AutoFillUI";
+
+ private final Context mContext;
+
+ AutoFillUI(Context context, AutoFillManagerService service, Object lock) {
+ mContext = context;
+ mResolver = context.getContentResolver();
+ mService = service;
+ mLock = lock;
+ }
+
+ /**
+ * Displays an error message to the user.
+ */
+ void showError(String message) {
+ // TODO(b/33197203): proper implementation
+ UiThread.getHandler().runWithScissors(() -> {
+ Toast.makeText(mContext, "AutoFill error: " + message, Toast.LENGTH_LONG).show();
+ }, 0);
+ }
+
+ /**
+ * Highlights in the {@link Activity} the fields saved by the service.
+ */
+ void highlightSavedFields(AutoFillId[] ids) {
+ // TODO(b/33197203): proper implementation (must be handled by activity)
+ UiThread.getHandler().runWithScissors(() -> {
+ Toast.makeText(mContext, "AutoFill: service saved ids " + Arrays.toString(ids),
+ Toast.LENGTH_LONG).show();
+ }, 0);
+ }
+
+ /**
+ * Shows the options from a {@link FillResponse} so the user can pick up the proper
+ * {@link Dataset} (when the response has one).
+ */
+ void showOptions(int userId, int callbackId, FillResponse response) {
+ // TODO(b/33197203): proper implementation
+ // TODO(b/33197203): make sure if removes the callback from cache
+ showOptionsNotification(userId, callbackId, response);
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////
+ // TODO(b/33197203): temporary code using a notification to request auto-fill. //
+ // Will be removed once UX decide the right way to present it to the user. //
+ /////////////////////////////////////////////////////////////////////////////////
+
+ // TODO(b/33197203): remove from frameworks/base/core/res/AndroidManifest.xml once not used
+ private static final String NOTIFICATION_AUTO_FILL_INTENT =
+ "com.android.internal.autofill.action.REQUEST_AUTOFILL";
+
+ // Extras used in the notification intents
+ private static final String EXTRA_USER_ID = "user_id";
+ private static final String EXTRA_NOTIFICATION_TYPE = "notification_type";
+ private static final String EXTRA_CALLBACK_ID = "callback_id";
+ private static final String EXTRA_FILL_RESPONSE = "fill_response";
+ private static final String EXTRA_DATASET = "dataset";
+
+ private static final String TYPE_EMULATE = "emulate";
+ private static final String TYPE_OPTIONS = "options";
+ private static final String TYPE_DELETE_CALLBACK = "delete_callback";
+ private static final String TYPE_PICK_DATASET = "pick_dataset";
+ private static final String TYPE_SAVE = "save";
+
+ static final int MSG_SHOW_ALL_NOTIFICATIONS = 42;
+ static final int SHOW_ALL_NOTIFICATIONS_DELAY_MS = 5000;
+
+ private BroadcastReceiver mNotificationReceiver;
+ private final ContentResolver mResolver;
+ private final AutoFillManagerService mService;
+ private final Object mLock;
+
+ // Hack used to generate unique pending intents
+ static int sResultCode = 0;
+
+ final class NotificationReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final int userId = intent.getIntExtra(EXTRA_USER_ID, -1);
+
+ final AutoFillManagerServiceImpl service = mService.getServiceForUserLocked(userId);
+ if (service == null) {
+ Slog.w(TAG, "no auto-fill service for user " + userId);
+ return;
+ }
+
+ final int callbackId = intent.getIntExtra(EXTRA_CALLBACK_ID, -1);
+ final String type = intent.getStringExtra(EXTRA_NOTIFICATION_TYPE);
+ if (type == null) {
+ Slog.wtf(TAG, "No extra " + EXTRA_NOTIFICATION_TYPE + " on intent " + intent);
+ return;
+ }
+ final FillResponse fillData = intent.getParcelableExtra(EXTRA_FILL_RESPONSE);
+ final Dataset dataset = intent.getParcelableExtra(EXTRA_DATASET);
+ final Bundle datasetArgs = dataset == null ? null : dataset.getExtras();
+ final Bundle fillDataArgs = fillData == null ? null : fillData.getExtras();
+
+ // Bundle sent on AutoFillService methods - only set if service provided a bundle
+ final Bundle extras = (datasetArgs == null && fillDataArgs == null)
+ ? null : new Bundle();
+
+ if (DEBUG) Slog.d(TAG, "Notification received: type=" + type + ", userId=" + userId
+ + ", callbackId=" + callbackId);
+ synchronized (mLock) {
+ switch (type) {
+ case TYPE_EMULATE:
+ service.requestAutoFill(null, extras, AUTO_FILL_FLAG_TYPE_FILL);
+ break;
+ case TYPE_SAVE:
+ if (datasetArgs != null) {
+ if (DEBUG) Log.d(TAG, "filldata args on save notificataion: " +
+ bundleToString(fillDataArgs));
+ extras.putBundle(AutoFillService.EXTRA_RESPONSE_EXTRAS, fillDataArgs);
+ }
+ if (dataset != null) {
+ if (DEBUG) Log.d(TAG, "dataset args on save notificataion: " +
+ bundleToString(datasetArgs));
+ extras.putBundle(AutoFillService.EXTRA_DATASET_EXTRAS, datasetArgs);
+ }
+ service.requestAutoFill(null, extras, AUTO_FILL_FLAG_TYPE_SAVE);
+ break;
+ case TYPE_DELETE_CALLBACK:
+ service.removeServerCallbackLocked(callbackId);
+ break;
+ case TYPE_PICK_DATASET:
+ service.autoFillApp(callbackId, dataset);
+ // Must cancel notification because it might be comming from action
+ if (DEBUG) Log.d(TAG, "Cancelling notification");
+ NotificationManager.from(mContext).cancel(TYPE_OPTIONS, userId);
+
+ if (datasetArgs != null) {
+ if (DEBUG) Log.d(TAG, "adding dataset's extra_data on save intent: "
+ + bundleToString(datasetArgs));
+ extras.putBundle(AutoFillService.EXTRA_DATASET_EXTRAS, datasetArgs);
+ }
+
+ // Also show notification with option to save the data
+ showSaveNotification(userId, fillData, dataset);
+ break;
+ default: {
+ Slog.w(TAG, "Unknown notification type: " + type);
+ }
+ }
+ }
+ }
+ }
+
+ private ComponentName getProviderForUser(int userId) {
+ ComponentName serviceComponent = null;
+ ServiceInfo serviceInfo = null;
+ final String componentName = Settings.Secure.getStringForUser(
+ mResolver, Settings.Secure.AUTO_FILL_SERVICE, userId);
+ if (!TextUtils.isEmpty(componentName)) {
+ try {
+ serviceComponent = ComponentName.unflattenFromString(componentName);
+ serviceInfo =
+ AppGlobals.getPackageManager().getServiceInfo(serviceComponent, 0, userId);
+ } catch (RuntimeException | RemoteException e) {
+ Slog.wtf(TAG, "Bad auto-fill service name " + componentName, e);
+ return null;
+ }
+ }
+
+ if (DEBUG) Slog.d(TAG, "getServiceComponentForUser(" + userId + "): component="
+ + serviceComponent + ", info: " + serviceInfo);
+ if (serviceInfo == null) {
+ Slog.w(TAG, "no service info for " + serviceComponent);
+ return null;
+ }
+ return serviceComponent;
+ }
+
+ void showAllNotifications() {
+ final UserManager userManager =
+ (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+
+ final List<UserInfo> allUsers = userManager.getUsers(true);
+
+ for (UserInfo user : allUsers) {
+ final ComponentName serviceComponent = getProviderForUser(user.id);
+ if (serviceComponent != null) {
+ showMainNotification(serviceComponent, user.id);
+ }
+ }
+ }
+
+ void updateNotification(int userId) {
+ final ComponentName serviceComponent = getProviderForUser(userId);
+ if (serviceComponent == null) {
+ cancelMainNotification(userId);
+ } else {
+ showMainNotification(serviceComponent, userId);
+ }
+ }
+
+ private static Intent newNotificationIntent(int userId, String type) {
+ final Intent intent = new Intent(NOTIFICATION_AUTO_FILL_INTENT);
+ intent.putExtra(EXTRA_USER_ID, userId);
+ intent.putExtra(EXTRA_NOTIFICATION_TYPE, type);
+ return intent;
+ }
+
+ private PendingIntent newPickDatasetPI(int userId, int callbackId, FillResponse response,
+ Dataset dataset) {
+ final int resultCode = ++ sResultCode;
+ if (DEBUG) Log.d(TAG, "newPickDatasetPI: userId=" + userId + ", callback=" + callbackId
+ + ", resultCode=" + resultCode);
+
+ final Intent intent = newNotificationIntent(userId, TYPE_PICK_DATASET);
+ intent.putExtra(EXTRA_CALLBACK_ID, callbackId);
+ intent.putExtra(EXTRA_FILL_RESPONSE, response);
+ intent.putExtra(EXTRA_DATASET, dataset);
+ return PendingIntent.getBroadcast(mContext, resultCode, intent,
+ PendingIntent.FLAG_ONE_SHOT);
+ }
+
+ private static String bundleToString(Bundle bundle) {
+ if (bundle == null) {
+ return "null";
+ }
+ final Set<String> keySet = bundle.keySet();
+ final StringBuilder builder = new StringBuilder("[Bundle with ").append(keySet.size())
+ .append(" keys:");
+ for (String key : keySet) {
+ final Object value = bundle.get(key);
+ builder.append(' ').append(key).append('=');
+ builder.append((value instanceof Object[])
+ ? Arrays.toString((Objects[]) value) : value);
+ }
+ return builder.append(']').toString();
+ }
+
+ /**
+ * Shows a permanent notification that triggers the auto-fill workflow for the given user.
+ *
+ * <p>It emulates calling the auto-fill service when the IME is shown.
+ */
+ private void showMainNotification(ComponentName serviceComponent, int userId) {
+ if (DEBUG) Log.d(TAG, "showNotification() for " + userId + ": " + serviceComponent);
+
+ synchronized (mLock) {
+ if (mNotificationReceiver == null) {
+ mNotificationReceiver = new NotificationReceiver();
+ mContext.registerReceiver(mNotificationReceiver,
+ new IntentFilter(NOTIFICATION_AUTO_FILL_INTENT));
+ }
+ }
+
+ final Intent fillIntent = newNotificationIntent(userId, TYPE_EMULATE);
+ final PendingIntent fillPendingIntent = PendingIntent.getBroadcast(mContext,
+ -1, fillIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+
+ final String packageName = serviceComponent.getPackageName();
+ String providerName = null;
+ final PackageManager pm = mContext.getPackageManager();
+ try {
+ final ApplicationInfo info = pm.getApplicationInfoAsUser(packageName, 0, userId);
+ if (info != null) {
+ providerName = pm.getApplicationLabel(info).toString();
+ }
+ } catch (Exception e) {
+ providerName = packageName;
+ }
+ final String title = "AutoFill IME Emulation";
+ final String subTitle = "Tap notification to start auto-fill workflow (by '" + providerName
+ + "' on top activity on user " + userId + ".\n"
+ + "Once provider replies, a new notification will show your options.";
+
+ final Notification notification = new Notification.Builder(mContext)
+ .setCategory(Notification.CATEGORY_SYSTEM)
+ .setOngoing(true)
+ .setSmallIcon(com.android.internal.R.drawable.stat_sys_adb)
+ .setLocalOnly(true)
+ .setColor(mContext.getColor(
+ com.android.internal.R.color.system_notification_accent_color))
+ .setContentTitle(title)
+ .setStyle(new Notification.BigTextStyle().bigText(subTitle))
+ .setContentIntent(fillPendingIntent)
+ .build();
+ NotificationManager.from(mContext).notify(TYPE_EMULATE, userId, notification);
+ }
+
+ /**
+ * Cancels the permament notification created by
+ * {@link #showMainNotification(ComponentName, int)}.
+ */
+ private void cancelMainNotification(int userId) {
+ if (DEBUG) Log.d(TAG, "cancelNotificationLocked(): " + userId);
+ NotificationManager.from(mContext).cancel(TYPE_EMULATE, userId);
+ }
+
+ /**
+ * Shows a notification with the results of an auto-fill request, using notications actions
+ * to emulate the auto-fill bar buttons displaying the dataset names.
+ */
+ private void showOptionsNotification(int userId, int callbackId, FillResponse response) {
+ final long token = Binder.clearCallingIdentity();
+ try {
+ showOptionsNotificationAsSystem(userId, callbackId, response);
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
+ private void showOptionsNotificationAsSystem(int userId, int callbackId,
+ FillResponse response) {
+ // Make sure server callback is removed from cache if user cancels the notification.
+ final Intent deleteIntent = newNotificationIntent(userId, TYPE_DELETE_CALLBACK);
+ deleteIntent.putExtra(EXTRA_CALLBACK_ID, callbackId);
+ final PendingIntent deletePendingIntent = PendingIntent.getBroadcast(mContext,
+ ++sResultCode, deleteIntent, PendingIntent.FLAG_ONE_SHOT);
+
+ final String title = "AutoFill Options";
+
+ final Notification.Builder notification = new Notification.Builder(mContext)
+ .setCategory(Notification.CATEGORY_SYSTEM)
+ .setOngoing(false)
+ .setSmallIcon(com.android.internal.R.drawable.stat_sys_adb)
+ .setLocalOnly(true)
+ .setColor(mContext.getColor(
+ com.android.internal.R.color.system_notification_accent_color))
+ .setDeleteIntent(deletePendingIntent)
+ .setContentTitle(title);
+
+ boolean autoCancel = true;
+ final String subTitle;
+ final List<Dataset> datasets;
+ final AutoFillId[] savableIds;
+ if (response != null) {
+ datasets = response.getDatasets();
+ savableIds = response.getSavableIds();
+ } else {
+ datasets = null;
+ savableIds = null;
+ }
+ boolean showSave = false;
+ if (datasets == null ) {
+ subTitle = "No options to auto-fill this activity.";
+ } else if (datasets.isEmpty()) {
+ if (savableIds.length == 0) {
+ subTitle = "No options to auto-fill this activity.";
+ } else {
+ subTitle = "No options to auto-fill this activity, but provider can save ids:\n"
+ + Arrays.toString(savableIds);
+ showSave = true;
+ }
+ } else {
+ final AutoFillManagerServiceImpl service = mService.getServiceForUserLocked(userId);
+ if (service == null) {
+ subTitle = "No auto-fill service for user " + userId;
+ Slog.w(TAG, subTitle);
+ } else {
+ autoCancel = false;
+ final int size = datasets.size();
+ subTitle = "There are " + size + " option(s).\n"
+ + "Use the notification action(s) to select the proper one.";
+ for (Dataset dataset : datasets) {
+ final CharSequence name = dataset.getName();
+ final PendingIntent pi = newPickDatasetPI(userId, callbackId, response, dataset);
+ notification.addAction(new Action.Builder(null, name, pi).build());
+ }
+ }
+ }
+
+ notification.setAutoCancel(autoCancel);
+ notification.setStyle(new Notification.BigTextStyle().bigText(subTitle));
+
+ NotificationManager.from(mContext).notify(TYPE_OPTIONS, userId, notification.build());
+
+ if (showSave) {
+ showSaveNotification(userId, response, null);
+ }
+ }
+
+ private void showSaveNotification(int userId, FillResponse response, Dataset dataset) {
+ final Intent saveIntent = newNotificationIntent(userId, TYPE_SAVE);
+ saveIntent.putExtra(EXTRA_FILL_RESPONSE, response);
+ if (dataset != null) {
+ saveIntent.putExtra(EXTRA_DATASET, dataset);
+ }
+ final PendingIntent savePendingIntent = PendingIntent.getBroadcast(mContext,
+ ++sResultCode, saveIntent, PendingIntent.FLAG_ONE_SHOT);
+
+ final String title = "AutoFill Save";
+ final String subTitle = "Tap notification to ask provider to save fields: \n"
+ + Arrays.toString(response.getSavableIds());
+
+ final Notification notification = new Notification.Builder(mContext)
+ .setCategory(Notification.CATEGORY_SYSTEM)
+ .setAutoCancel(true)
+ .setOngoing(false)
+ .setSmallIcon(com.android.internal.R.drawable.stat_sys_adb)
+ .setLocalOnly(true)
+ .setColor(mContext.getColor(
+ com.android.internal.R.color.system_notification_accent_color))
+ .setContentTitle(title)
+ .setContentIntent(savePendingIntent)
+ .setStyle(new Notification.BigTextStyle().bigText(subTitle))
+ .build();
+ NotificationManager.from(mContext).notify(TYPE_SAVE, userId, notification);
+ }
+
+ /////////////////////////////////////////
+ // End of temporary notification code. //
+ /////////////////////////////////////////
+}
diff --git a/services/core/Android.mk b/services/core/Android.mk
index efadbef..1366b3b 100644
--- a/services/core/Android.mk
+++ b/services/core/Android.mk
@@ -24,7 +24,7 @@
android.hardware.power@1.0-java \
android.hardware.tv.cec@1.0-java
-LOCAL_STATIC_JAVA_LIBRARIES := tzdata_update
+LOCAL_STATIC_JAVA_LIBRARIES := tzdata_update2
ifneq ($(INCREMENTAL_BUILDS),)
LOCAL_PROGUARD_ENABLED := disabled
diff --git a/services/core/java/com/android/server/BatteryService.java b/services/core/java/com/android/server/BatteryService.java
index 573ad63..dd550f2 100644
--- a/services/core/java/com/android/server/BatteryService.java
+++ b/services/core/java/com/android/server/BatteryService.java
@@ -347,13 +347,14 @@
+ ", chargerWirelessOnline=" + mBatteryProps.chargerWirelessOnline
+ ", maxChargingCurrent" + mBatteryProps.maxChargingCurrent
+ ", maxChargingVoltage" + mBatteryProps.maxChargingVoltage
- + ", chargeCounter" + mBatteryProps.batteryChargeCounter
+ ", batteryStatus=" + mBatteryProps.batteryStatus
+ ", batteryHealth=" + mBatteryProps.batteryHealth
+ ", batteryPresent=" + mBatteryProps.batteryPresent
+ ", batteryLevel=" + mBatteryProps.batteryLevel
+ ", batteryTechnology=" + mBatteryProps.batteryTechnology
+ ", batteryVoltage=" + mBatteryProps.batteryVoltage
+ + ", batteryChargeCounter=" + mBatteryProps.batteryChargeCounter
+ + ", batteryFullCharge=" + mBatteryProps.batteryFullCharge
+ ", batteryTemperature=" + mBatteryProps.batteryTemperature
+ ", mBatteryLevelCritical=" + mBatteryLevelCritical
+ ", mPlugType=" + mPlugType);
@@ -363,7 +364,8 @@
try {
mBatteryStats.setBatteryState(mBatteryProps.batteryStatus, mBatteryProps.batteryHealth,
mPlugType, mBatteryProps.batteryLevel, mBatteryProps.batteryTemperature,
- mBatteryProps.batteryVoltage, mBatteryProps.batteryChargeCounter);
+ mBatteryProps.batteryVoltage, mBatteryProps.batteryChargeCounter,
+ mBatteryProps.batteryFullCharge);
} catch (RemoteException e) {
// Should never happen.
}
diff --git a/services/core/java/com/android/server/HardwarePropertiesManagerService.java b/services/core/java/com/android/server/HardwarePropertiesManagerService.java
index 36a16cd..e03a478 100644
--- a/services/core/java/com/android/server/HardwarePropertiesManagerService.java
+++ b/services/core/java/com/android/server/HardwarePropertiesManagerService.java
@@ -82,9 +82,9 @@
*
* @param callingPackage The calling package name.
*
- * @throws SecurityException if something other than the profile or device owner, the
- * current VR service, or a caller holding the {@link Manifest.permission#DEVICE_POWER}
- * permission tries to retrieve information provided by this service.
+ * @throws SecurityException if something other than the device owner, the current VR service,
+ * or a caller holding the {@link Manifest.permission#DEVICE_POWER} permission tries to
+ * retrieve information provided by this service.
*/
private void enforceHardwarePropertiesRetrievalAllowed(String callingPackage)
throws SecurityException {
@@ -102,12 +102,12 @@
final int userId = UserHandle.getUserId(uid);
final VrManagerInternal vrService = LocalServices.getService(VrManagerInternal.class);
final DevicePolicyManager dpm = mContext.getSystemService(DevicePolicyManager.class);
- if (!dpm.isDeviceOwnerApp(callingPackage) && !dpm.isProfileOwnerApp(callingPackage)
+ if (!dpm.isDeviceOwnerApp(callingPackage)
&& !vrService.isCurrentVrListener(callingPackage, userId)
&& mContext.checkCallingOrSelfPermission(Manifest.permission.DEVICE_POWER)
!= PackageManager.PERMISSION_GRANTED) {
- throw new SecurityException("The caller is not a device or profile owner, bound "
- + "VrListenerService, or holding the DEVICE_POWER permission.");
+ throw new SecurityException("The caller is not a device owner, bound VrListenerService"
+ + ", or holding the DEVICE_POWER permission.");
}
}
}
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index 372e9a6..f718fa1 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -1666,6 +1666,13 @@
@Override
public void onServiceDisconnected(ComponentName name) {
+ // Note that mContext.unbindService(this) does not trigger this. Hence if we are here the
+ // disconnection is not intended by IMMS (e.g. triggered because the current IMS crashed),
+ // which is irregular but can eventually happen for everyone just by continuing using the
+ // device. Thus it is important to make sure that all the internal states are properly
+ // refreshed when this method is called back. Running
+ // adb install -r <APK that implements the current IME>
+ // would be a good way to trigger such a situation.
synchronized (mMethodMap) {
if (DEBUG) Slog.v(TAG, "Service disconnected: " + name
+ " mCurIntent=" + mCurIntent);
@@ -1677,11 +1684,7 @@
mLastBindTime = SystemClock.uptimeMillis();
mShowRequested = mInputShown;
mInputShown = false;
- if (mCurClient != null) {
- executeOrSendMessage(mCurClient.client, mCaller.obtainMessageIIO(
- MSG_UNBIND_CLIENT, InputMethodClient.UNBIND_REASON_DISCONNECT_IME,
- mCurSeq, mCurClient.client));
- }
+ unbindCurrentClientLocked(InputMethodClient.UNBIND_REASON_DISCONNECT_IME);
}
}
}
diff --git a/services/core/java/com/android/server/LockSettingsService.java b/services/core/java/com/android/server/LockSettingsService.java
index 4d6ffe6..a5552b8 100644
--- a/services/core/java/com/android/server/LockSettingsService.java
+++ b/services/core/java/com/android/server/LockSettingsService.java
@@ -176,12 +176,8 @@
}
@Override
- public void onBootPhase(int phase) {
- if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) {
- mLockSettingsService.maybeShowEncryptionNotifications();
- } else if (phase == SystemService.PHASE_BOOT_COMPLETED) {
- // TODO
- }
+ public void onStartUser(int userHandle) {
+ mLockSettingsService.onStartUser(userHandle);
}
@Override
@@ -313,27 +309,25 @@
* If the account is credential-encrypted, show notification requesting the user to unlock
* the device.
*/
- private void maybeShowEncryptionNotifications() {
- final List<UserInfo> users = mUserManager.getUsers();
- for (int i = 0; i < users.size(); i++) {
- UserInfo user = users.get(i);
- UserHandle userHandle = user.getUserHandle();
- final boolean isSecure = mStorage.hasPassword(user.id) || mStorage.hasPattern(user.id);
- if (isSecure && !mUserManager.isUserUnlockingOrUnlocked(userHandle)) {
- if (!user.isManagedProfile()) {
- // When the user is locked, we communicate it loud-and-clear
- // on the lockscreen; we only show a notification below for
- // locked managed profiles.
- } else {
- UserInfo parent = mUserManager.getProfileParent(user.id);
- if (parent != null &&
- mUserManager.isUserUnlockingOrUnlocked(parent.getUserHandle()) &&
- !mUserManager.isQuietModeEnabled(userHandle)) {
- // Only show notifications for managed profiles once their parent
- // user is unlocked.
- showEncryptionNotificationForProfile(userHandle);
- }
- }
+ private void maybeShowEncryptionNotificationForUser(@UserIdInt int userId) {
+ final UserInfo user = mUserManager.getUserInfo(userId);
+ if (!user.isManagedProfile()) {
+ // When the user is locked, we communicate it loud-and-clear
+ // on the lockscreen; we only show a notification below for
+ // locked managed profiles.
+ return;
+ }
+
+ final UserHandle userHandle = user.getUserHandle();
+ final boolean isSecure = mStorage.hasPassword(userId) || mStorage.hasPattern(userId);
+ if (isSecure && !mUserManager.isUserUnlockingOrUnlocked(userHandle)) {
+ UserInfo parent = mUserManager.getProfileParent(userId);
+ if (parent != null &&
+ mUserManager.isUserUnlockingOrUnlocked(parent.getUserHandle()) &&
+ !mUserManager.isQuietModeEnabled(userHandle)) {
+ // Only show notifications for managed profiles once their parent
+ // user is unlocked.
+ showEncryptionNotificationForProfile(userHandle);
}
}
}
@@ -384,7 +378,7 @@
mNotificationManager.notifyAsUser(null, FBE_ENCRYPTED_NOTIFICATION, notification, user);
}
- public void hideEncryptionNotification(UserHandle userHandle) {
+ private void hideEncryptionNotification(UserHandle userHandle) {
if (DEBUG) Slog.v(TAG, "hide encryption notification, user: "+ userHandle.getIdentifier());
mNotificationManager.cancelAsUser(null, FBE_ENCRYPTED_NOTIFICATION, userHandle);
}
@@ -393,6 +387,10 @@
hideEncryptionNotification(new UserHandle(userId));
}
+ public void onStartUser(final int userId) {
+ maybeShowEncryptionNotificationForUser(userId);
+ }
+
public void onUnlockUser(final int userId) {
// Hide notification first, as tie managed profile lock takes time
hideEncryptionNotification(new UserHandle(userId));
diff --git a/services/core/java/com/android/server/NetworkScoreService.java b/services/core/java/com/android/server/NetworkScoreService.java
index 983d039..e23844c 100644
--- a/services/core/java/com/android/server/NetworkScoreService.java
+++ b/services/core/java/com/android/server/NetworkScoreService.java
@@ -34,9 +34,9 @@
import android.net.INetworkScoreCache;
import android.net.INetworkScoreService;
import android.net.NetworkKey;
+import android.net.NetworkScoreManager;
import android.net.NetworkScorerAppManager;
import android.net.NetworkScorerAppManager.NetworkScorerAppData;
-import android.net.NetworkScoreManager;
import android.net.RecommendationRequest;
import android.net.RecommendationResult;
import android.net.ScoredNetwork;
@@ -301,7 +301,8 @@
// If we're not connected at all then create a new connection.
if (mServiceConnection == null) {
- mServiceConnection = new ScoringServiceConnection(componentName);
+ mServiceConnection = new ScoringServiceConnection(componentName,
+ scorerData.packageUid);
}
// Make sure the connection is connected (idempotent)
@@ -325,7 +326,7 @@
@Override
public boolean updateScores(ScoredNetwork[] networks) {
- if (!mNetworkScorerAppManager.isCallerActiveScorer(getCallingUid())) {
+ if (!isCallerActiveScorer(getCallingUid())) {
throw new SecurityException("Caller with UID " + getCallingUid() +
" is not the active scorer.");
}
@@ -380,13 +381,16 @@
}
}
+ private boolean isCallerSystemUid() {
+ // REQUEST_NETWORK_SCORES is a signature only permission.
+ return mContext.checkCallingOrSelfPermission(permission.REQUEST_NETWORK_SCORES) ==
+ PackageManager.PERMISSION_GRANTED;
+ }
+
@Override
public boolean clearScores() {
- // Only the active scorer or the system (who can broadcast BROADCAST_NETWORK_PRIVILEGED)
- // should be allowed to flush all scores.
- if (mNetworkScorerAppManager.isCallerActiveScorer(getCallingUid()) ||
- mContext.checkCallingOrSelfPermission(permission.BROADCAST_NETWORK_PRIVILEGED) ==
- PackageManager.PERMISSION_GRANTED) {
+ // Only the active scorer or the system should be allowed to flush all scores.
+ if (isCallerActiveScorer(getCallingUid()) || isCallerSystemUid()) {
final long token = Binder.clearCallingIdentity();
try {
clearInternal();
@@ -409,20 +413,45 @@
// In the future, should this API be opened to 3p apps, we will need to lock this down and
// figure out another way to streamline the UX.
- // mContext.enforceCallingOrSelfPermission(permission.BROADCAST_NETWORK_PRIVILEGED, TAG);
mContext.enforceCallingOrSelfPermission(permission.SCORE_NETWORKS, TAG);
// Scorers (recommendation providers) are selected and no longer set.
return false;
}
+ /**
+ * Determine whether the application with the given UID is the enabled scorer.
+ *
+ * @param callingUid the UID to check
+ * @return true if the provided UID is the active scorer, false otherwise.
+ */
+ @Override
+ public boolean isCallerActiveScorer(int callingUid) {
+ synchronized (mServiceConnectionLock) {
+ return mServiceConnection != null && mServiceConnection.mScoringAppUid == callingUid;
+ }
+ }
+
+ /**
+ * Obtain the package name of the current active network scorer.
+ *
+ * @return the full package name of the current active scorer, or null if there is no active
+ * scorer.
+ */
+ @Override
+ public String getActiveScorerPackage() {
+ synchronized (mServiceConnectionLock) {
+ if (mServiceConnection != null) {
+ return mServiceConnection.mComponentName.getPackageName();
+ }
+ }
+ return null;
+ }
+
@Override
public void disableScoring() {
- // Only the active scorer or the system (who can broadcast BROADCAST_NETWORK_PRIVILEGED)
- // should be allowed to disable scoring.
- if (mNetworkScorerAppManager.isCallerActiveScorer(getCallingUid()) ||
- mContext.checkCallingOrSelfPermission(permission.BROADCAST_NETWORK_PRIVILEGED) ==
- PackageManager.PERMISSION_GRANTED) {
+ // Only the active scorer or the system should be allowed to disable scoring.
+ if (isCallerActiveScorer(getCallingUid()) || isCallerSystemUid()) {
// no-op for now but we could write to the setting if needed.
} else {
throw new SecurityException(
@@ -450,7 +479,7 @@
public void registerNetworkScoreCache(int networkType,
INetworkScoreCache scoreCache,
int filterType) {
- mContext.enforceCallingOrSelfPermission(permission.BROADCAST_NETWORK_PRIVILEGED, TAG);
+ mContext.enforceCallingOrSelfPermission(permission.REQUEST_NETWORK_SCORES, TAG);
final long token = Binder.clearCallingIdentity();
try {
synchronized (mScoreCaches) {
@@ -475,7 +504,7 @@
@Override
public void unregisterNetworkScoreCache(int networkType, INetworkScoreCache scoreCache) {
- mContext.enforceCallingOrSelfPermission(permission.BROADCAST_NETWORK_PRIVILEGED, TAG);
+ mContext.enforceCallingOrSelfPermission(permission.REQUEST_NETWORK_SCORES, TAG);
final long token = Binder.clearCallingIdentity();
try {
synchronized (mScoreCaches) {
@@ -496,7 +525,7 @@
@Override
public RecommendationResult requestRecommendation(RecommendationRequest request) {
- mContext.enforceCallingOrSelfPermission(permission.BROADCAST_NETWORK_PRIVILEGED, TAG);
+ mContext.enforceCallingOrSelfPermission(permission.REQUEST_NETWORK_SCORES, TAG);
throwIfCalledOnMainThread();
final long token = Binder.clearCallingIdentity();
try {
@@ -526,7 +555,7 @@
@Override
public boolean requestScores(NetworkKey[] networks) {
- mContext.enforceCallingOrSelfPermission(permission.BROADCAST_NETWORK_PRIVILEGED, TAG);
+ mContext.enforceCallingOrSelfPermission(permission.REQUEST_NETWORK_SCORES, TAG);
final long token = Binder.clearCallingIdentity();
try {
final INetworkRecommendationProvider provider = getRecommendationProvider();
@@ -624,12 +653,14 @@
private static class ScoringServiceConnection implements ServiceConnection {
private final ComponentName mComponentName;
+ private final int mScoringAppUid;
private volatile boolean mBound = false;
private volatile boolean mConnected = false;
private volatile INetworkRecommendationProvider mRecommendationProvider;
- ScoringServiceConnection(ComponentName componentName) {
+ ScoringServiceConnection(ComponentName componentName, int scoringAppUid) {
mComponentName = componentName;
+ mScoringAppUid = scoringAppUid;
}
void connect(Context context) {
diff --git a/services/core/java/com/android/server/SystemServiceManager.java b/services/core/java/com/android/server/SystemServiceManager.java
index fb8a815..d879919 100644
--- a/services/core/java/com/android/server/SystemServiceManager.java
+++ b/services/core/java/com/android/server/SystemServiceManager.java
@@ -35,13 +35,15 @@
private final Context mContext;
private boolean mSafeMode;
+ private boolean mRuntimeRestarted;
+ private boolean mFirstBoot;
// Services that should receive lifecycle events.
private final ArrayList<SystemService> mServices = new ArrayList<SystemService>();
private int mCurrentPhase = -1;
- public SystemServiceManager(Context context) {
+ SystemServiceManager(Context context) {
mContext = context;
}
@@ -235,7 +237,7 @@
}
/** Sets the safe mode flag for services to query. */
- public void setSafeMode(boolean safeMode) {
+ void setSafeMode(boolean safeMode) {
mSafeMode = safeMode;
}
@@ -248,6 +250,28 @@
}
/**
+ * @return true if runtime was restarted, false if it's normal boot
+ */
+ public boolean isRuntimeRestarted() {
+ return mRuntimeRestarted;
+ }
+
+ void setRuntimeRestarted(boolean runtimeRestarted) {
+ mRuntimeRestarted = runtimeRestarted;
+ }
+
+ /**
+ * @return true if it's first boot after OTA
+ */
+ public boolean isFirstBoot() {
+ return mFirstBoot;
+ }
+
+ void setFirstBoot(boolean firstBoot) {
+ mFirstBoot = firstBoot;
+ }
+
+ /**
* Outputs the state of this manager to the System log.
*/
public void dump() {
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 6625846..c87412e 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -16,257 +16,11 @@
package com.android.server.am;
-import android.annotation.Nullable;
-import android.app.ActivityManagerInternal.PictureInPictureArguments;
-import android.app.ApplicationThreadConstants;
-import android.app.ContentProviderHolder;
-import android.app.IActivityManager;
-import android.app.RemoteAction;
-import android.app.WaitResult;
-import android.os.IDeviceIdentifiersPolicyService;
-
-import com.android.internal.policy.IKeyguardDismissCallback;
-import com.android.internal.telephony.TelephonyIntents;
-import com.google.android.collect.Lists;
-import com.google.android.collect.Maps;
-import com.android.internal.R;
-import com.android.internal.annotations.GuardedBy;
-import com.android.internal.app.AssistUtils;
-import com.android.internal.app.DumpHeapActivity;
-import com.android.internal.app.IAppOpsCallback;
-import com.android.internal.app.IAppOpsService;
-import com.android.internal.app.IVoiceInteractor;
-import com.android.internal.app.ProcessMap;
-import com.android.internal.app.SystemUserHomeActivity;
-import com.android.internal.app.procstats.ProcessStats;
-import com.android.internal.os.BackgroundThread;
-import com.android.internal.os.BatteryStatsImpl;
-import com.android.internal.os.IResultReceiver;
-import com.android.internal.os.ProcessCpuTracker;
-import com.android.internal.os.TransferPipe;
-import com.android.internal.os.Zygote;
-import com.android.internal.util.ArrayUtils;
-import com.android.internal.util.FastPrintWriter;
-import com.android.internal.util.FastXmlSerializer;
-import com.android.internal.util.MemInfoReader;
-import com.android.internal.util.Preconditions;
-import com.android.server.AppOpsService;
-import com.android.server.AttributeCache;
-import com.android.server.DeviceIdleController;
-import com.android.server.IntentResolver;
-import com.android.server.LocalServices;
-import com.android.server.LockGuard;
-import com.android.server.ServiceThread;
-import com.android.server.SystemService;
-import com.android.server.SystemServiceManager;
-import com.android.server.Watchdog;
-import com.android.server.am.ActivityStack.ActivityState;
-import com.android.server.firewall.IntentFirewall;
-import com.android.server.pm.Installer;
-import com.android.server.pm.Installer.InstallerException;
-import com.android.server.statusbar.StatusBarManagerInternal;
-import com.android.server.vr.VrManagerInternal;
-import com.android.server.wm.WindowManagerService;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-import org.xmlpull.v1.XmlSerializer;
-
-import android.Manifest;
-import android.Manifest.permission;
-import android.annotation.NonNull;
-import android.annotation.UserIdInt;
-import android.app.Activity;
-import android.app.ActivityManager;
-import android.app.ActivityManager.RunningTaskInfo;
-import android.app.ActivityManager.StackId;
-import android.app.ActivityManager.StackInfo;
-import android.app.ActivityManager.TaskThumbnailInfo;
-import android.app.ActivityManagerInternal;
-import android.app.ActivityManagerInternal.SleepToken;
-import android.app.ActivityOptions;
-import android.app.ActivityThread;
-import android.app.AlertDialog;
-import android.app.AppGlobals;
-import android.app.AppOpsManager;
-import android.app.ApplicationErrorReport;
-import android.app.BroadcastOptions;
-import android.app.Dialog;
-import android.app.IActivityContainer;
-import android.app.IActivityContainerCallback;
-import android.app.IActivityController;
-import android.app.IAppTask;
-import android.app.IApplicationThread;
-import android.app.IInstrumentationWatcher;
-import android.app.INotificationManager;
-import android.app.IProcessObserver;
-import android.app.IServiceConnection;
-import android.app.IStopUserCallback;
-import android.app.ITaskStackListener;
-import android.app.IUiAutomationConnection;
-import android.app.IUidObserver;
-import android.app.IUserSwitchObserver;
-import android.app.Instrumentation;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.app.ProfilerInfo;
-import android.app.admin.DevicePolicyManager;
-import android.app.assist.AssistContent;
-import android.app.assist.AssistStructure;
-import android.app.backup.IBackupManager;
-import android.app.usage.UsageEvents;
-import android.app.usage.UsageStatsManagerInternal;
-import android.appwidget.AppWidgetManager;
-import android.content.ActivityNotFoundException;
-import android.content.BroadcastReceiver;
-import android.content.ClipData;
-import android.content.ComponentCallbacks2;
-import android.content.ComponentName;
-import android.content.ContentProvider;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.IContentProvider;
-import android.content.IIntentReceiver;
-import android.content.IIntentSender;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.IntentSender;
-import android.content.pm.ActivityInfo;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.ConfigurationInfo;
-import android.content.pm.IPackageDataObserver;
-import android.content.pm.IPackageManager;
-import android.content.pm.InstrumentationInfo;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.pm.PackageManagerInternal;
-import android.content.pm.ParceledListSlice;
-import android.content.pm.PathPermission;
-import android.content.pm.PermissionInfo;
-import android.content.pm.ProviderInfo;
-import android.content.pm.ResolveInfo;
-import android.content.pm.ServiceInfo;
-import android.content.pm.UserInfo;
-import android.content.res.CompatibilityInfo;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.database.ContentObserver;
-import android.graphics.Bitmap;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.location.LocationManager;
-import android.net.Proxy;
-import android.net.ProxyInfo;
-import android.net.Uri;
-import android.os.BatteryStats;
-import android.os.Binder;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.Debug;
-import android.os.DropBoxManager;
-import android.os.Environment;
-import android.os.FactoryTest;
-import android.os.FileObserver;
-import android.os.FileUtils;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.IPermissionController;
-import android.os.IProcessInfoService;
-import android.os.IProgressListener;
-import android.os.LocaleList;
-import android.os.Looper;
-import android.os.Message;
-import android.os.Parcel;
-import android.os.ParcelFileDescriptor;
-import android.os.PersistableBundle;
-import android.os.PowerManager;
-import android.os.PowerManagerInternal;
-import android.os.Process;
-import android.os.RemoteCallbackList;
-import android.os.RemoteException;
-import android.os.ResultReceiver;
-import android.os.ServiceManager;
-import android.os.ShellCallback;
-import android.os.StrictMode;
-import android.os.SystemClock;
-import android.os.SystemProperties;
-import android.os.Trace;
-import android.os.TransactionTooLargeException;
-import android.os.UpdateLock;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.os.WorkSource;
-import android.os.storage.IStorageManager;
-import android.os.storage.StorageManagerInternal;
-import android.os.storage.StorageManager;
-import android.provider.Downloads;
-import android.provider.Settings;
-import android.service.autofill.AutoFillService;
-import android.service.voice.IVoiceInteractionSession;
-import android.service.voice.VoiceInteractionManagerInternal;
-import android.service.voice.VoiceInteractionSession;
-import android.telecom.TelecomManager;
-import android.text.format.DateUtils;
-import android.text.format.Time;
-import android.text.style.SuggestionSpan;
-import android.util.ArrayMap;
-import android.util.ArraySet;
-import android.util.AtomicFile;
-import android.util.BootTimingsTraceLog;
-import android.util.DebugUtils;
-import android.util.DisplayMetrics;
-import android.util.EventLog;
-import android.util.Log;
-import android.util.Pair;
-import android.util.PrintWriterPrinter;
-import android.util.Slog;
-import android.util.SparseArray;
-import android.util.SparseIntArray;
-import android.util.TimeUtils;
-import android.util.Xml;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.WindowManager;
-
-import java.io.File;
-import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.ref.WeakReference;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicLong;
-
-import dalvik.system.VMRuntime;
-
-import libcore.io.IoUtils;
-import libcore.util.EmptyArray;
-
import static android.Manifest.permission.CHANGE_CONFIGURATION;
import static android.Manifest.permission.INTERACT_ACROSS_USERS;
import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL;
import static android.Manifest.permission.MANAGE_ACTIVITY_STACKS;
+import static android.Manifest.permission.READ_FRAME_BUFFER;
import static android.Manifest.permission.START_TASKS_FROM_RECENTS;
import static android.app.ActivityManager.DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT;
import static android.app.ActivityManager.RESIZE_MODE_PRESERVE_WINDOW;
@@ -300,7 +54,6 @@
import static android.provider.Settings.Global.WAIT_FOR_DEBUGGER;
import static android.provider.Settings.System.FONT_SCALE;
import static android.view.Display.DEFAULT_DISPLAY;
-
import static com.android.internal.util.XmlUtils.readBooleanAttribute;
import static com.android.internal.util.XmlUtils.readIntAttribute;
import static com.android.internal.util.XmlUtils.readLongAttribute;
@@ -385,6 +138,256 @@
import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT;
import static org.xmlpull.v1.XmlPullParser.START_TAG;
+import android.Manifest;
+import android.Manifest.permission;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.UserIdInt;
+import android.app.Activity;
+import android.app.ActivityManager;
+import android.app.ActivityManager.RunningTaskInfo;
+import android.app.ActivityManager.StackId;
+import android.app.ActivityManager.StackInfo;
+import android.app.ActivityManager.TaskSnapshot;
+import android.app.ActivityManager.TaskThumbnailInfo;
+import android.app.ActivityManagerInternal;
+import android.app.ActivityManagerInternal.PictureInPictureArguments;
+import android.app.ActivityManagerInternal.SleepToken;
+import android.app.ActivityOptions;
+import android.app.ActivityThread;
+import android.app.AlertDialog;
+import android.app.AppGlobals;
+import android.app.AppOpsManager;
+import android.app.ApplicationErrorReport;
+import android.app.ApplicationThreadConstants;
+import android.app.BroadcastOptions;
+import android.app.ContentProviderHolder;
+import android.app.Dialog;
+import android.app.IActivityContainer;
+import android.app.IActivityContainerCallback;
+import android.app.IActivityController;
+import android.app.IActivityManager;
+import android.app.IAppTask;
+import android.app.IApplicationThread;
+import android.app.IInstrumentationWatcher;
+import android.app.INotificationManager;
+import android.app.IProcessObserver;
+import android.app.IServiceConnection;
+import android.app.IStopUserCallback;
+import android.app.ITaskStackListener;
+import android.app.IUiAutomationConnection;
+import android.app.IUidObserver;
+import android.app.IUserSwitchObserver;
+import android.app.Instrumentation;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.ProfilerInfo;
+import android.app.RemoteAction;
+import android.app.WaitResult;
+import android.app.admin.DevicePolicyManager;
+import android.app.assist.AssistContent;
+import android.app.assist.AssistStructure;
+import android.app.backup.IBackupManager;
+import android.app.usage.UsageEvents;
+import android.app.usage.UsageStatsManagerInternal;
+import android.appwidget.AppWidgetManager;
+import android.content.ActivityNotFoundException;
+import android.content.BroadcastReceiver;
+import android.content.ClipData;
+import android.content.ComponentCallbacks2;
+import android.content.ComponentName;
+import android.content.ContentProvider;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.IContentProvider;
+import android.content.IIntentReceiver;
+import android.content.IIntentSender;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.IntentSender;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.ConfigurationInfo;
+import android.content.pm.IPackageDataObserver;
+import android.content.pm.IPackageManager;
+import android.content.pm.InstrumentationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.PackageManagerInternal;
+import android.content.pm.ParceledListSlice;
+import android.content.pm.PathPermission;
+import android.content.pm.PermissionInfo;
+import android.content.pm.ProviderInfo;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.content.pm.UserInfo;
+import android.content.res.CompatibilityInfo;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.database.ContentObserver;
+import android.graphics.Bitmap;
+import android.graphics.GraphicBuffer;
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.location.LocationManager;
+import android.net.Proxy;
+import android.net.ProxyInfo;
+import android.net.Uri;
+import android.os.BatteryStats;
+import android.os.Binder;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Debug;
+import android.os.DropBoxManager;
+import android.os.Environment;
+import android.os.FactoryTest;
+import android.os.FileObserver;
+import android.os.FileUtils;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.IDeviceIdentifiersPolicyService;
+import android.os.IPermissionController;
+import android.os.IProcessInfoService;
+import android.os.IProgressListener;
+import android.os.LocaleList;
+import android.os.Looper;
+import android.os.Message;
+import android.os.Parcel;
+import android.os.ParcelFileDescriptor;
+import android.os.PersistableBundle;
+import android.os.PowerManager;
+import android.os.PowerManagerInternal;
+import android.os.Process;
+import android.os.RemoteCallbackList;
+import android.os.RemoteException;
+import android.os.ResultReceiver;
+import android.os.ServiceManager;
+import android.os.ShellCallback;
+import android.os.StrictMode;
+import android.os.SystemClock;
+import android.os.SystemProperties;
+import android.os.Trace;
+import android.os.TransactionTooLargeException;
+import android.os.UpdateLock;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.os.WorkSource;
+import android.os.storage.IStorageManager;
+import android.os.storage.StorageManager;
+import android.os.storage.StorageManagerInternal;
+import android.provider.Downloads;
+import android.provider.Settings;
+import android.service.autofill.AutoFillService;
+import android.service.voice.IVoiceInteractionSession;
+import android.service.voice.VoiceInteractionManagerInternal;
+import android.service.voice.VoiceInteractionSession;
+import android.telecom.TelecomManager;
+import android.text.format.DateUtils;
+import android.text.format.Time;
+import android.text.style.SuggestionSpan;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+import android.util.AtomicFile;
+import android.util.BootTimingsTraceLog;
+import android.util.DebugUtils;
+import android.util.DisplayMetrics;
+import android.util.EventLog;
+import android.util.Log;
+import android.util.Pair;
+import android.util.PrintWriterPrinter;
+import android.util.Slog;
+import android.util.SparseArray;
+import android.util.SparseIntArray;
+import android.util.TimeUtils;
+import android.util.Xml;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.WindowManager;
+
+import com.google.android.collect.Lists;
+import com.google.android.collect.Maps;
+
+import com.android.internal.R;
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.app.AssistUtils;
+import com.android.internal.app.DumpHeapActivity;
+import com.android.internal.app.IAppOpsCallback;
+import com.android.internal.app.IAppOpsService;
+import com.android.internal.app.IVoiceInteractor;
+import com.android.internal.app.ProcessMap;
+import com.android.internal.app.SystemUserHomeActivity;
+import com.android.internal.app.procstats.ProcessStats;
+import com.android.internal.os.BackgroundThread;
+import com.android.internal.os.BatteryStatsImpl;
+import com.android.internal.os.IResultReceiver;
+import com.android.internal.os.ProcessCpuTracker;
+import com.android.internal.os.TransferPipe;
+import com.android.internal.os.Zygote;
+import com.android.internal.policy.IKeyguardDismissCallback;
+import com.android.internal.telephony.TelephonyIntents;
+import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.FastPrintWriter;
+import com.android.internal.util.FastXmlSerializer;
+import com.android.internal.util.MemInfoReader;
+import com.android.internal.util.Preconditions;
+import com.android.server.AppOpsService;
+import com.android.server.AttributeCache;
+import com.android.server.DeviceIdleController;
+import com.android.server.IntentResolver;
+import com.android.server.LocalServices;
+import com.android.server.LockGuard;
+import com.android.server.ServiceThread;
+import com.android.server.SystemService;
+import com.android.server.SystemServiceManager;
+import com.android.server.Watchdog;
+import com.android.server.am.ActivityStack.ActivityState;
+import com.android.server.firewall.IntentFirewall;
+import com.android.server.pm.Installer;
+import com.android.server.pm.Installer.InstallerException;
+import com.android.server.statusbar.StatusBarManagerInternal;
+import com.android.server.vr.VrManagerInternal;
+import com.android.server.wm.WindowManagerService;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.File;
+import java.io.FileDescriptor;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.lang.ref.WeakReference;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicLong;
+
+import dalvik.system.VMRuntime;
+import libcore.io.IoUtils;
+import libcore.util.EmptyArray;
+
+import static com.android.server.am.ActivityStackSupervisor.CREATE_IF_NEEDED;
public class ActivityManagerService extends IActivityManager.Stub
implements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback {
@@ -689,19 +692,21 @@
public AssistStructure structure = null;
public AssistContent content = null;
public Bundle receiverExtras;
+ public int resultCode;
public int flags;
public PendingAssistExtras(ActivityRecord _activity, Bundle _extras, Intent _intent,
- String _hint, IResultReceiver _receiver, Bundle _receiverExtras, int _flags,
- int _userHandle) {
+ String _hint, IResultReceiver _receiver, Bundle _receiverExtras, int _resultCode,
+ int _userHandle, int _flags) {
activity = _activity;
extras = _extras;
intent = _intent;
hint = _hint;
receiver = _receiver;
receiverExtras = _receiverExtras;
- flags = _flags;
+ resultCode = _resultCode;
userHandle = _userHandle;
+ flags = _flags;
}
@Override
public void run() {
@@ -1465,6 +1470,7 @@
MONITOR_THREAD_CPU_USAGE);
final AtomicLong mLastCpuTime = new AtomicLong(0);
final AtomicBoolean mProcessCpuMutexFree = new AtomicBoolean(true);
+ final CountDownLatch mProcessCpuInitLatch = new CountDownLatch(1);
long mLastWriteTime = 0;
@@ -2647,13 +2653,9 @@
}
mTrackingAssociations = "1".equals(SystemProperties.get("debug.track-associations"));
-
mTempConfig.setToDefaults();
mTempConfig.setLocales(LocaleList.getDefault());
mConfigurationSeq = mTempConfig.seq = 1;
-
- mProcessCpuTracker.init();
-
mStackSupervisor = new ActivityStackSupervisor(this);
mStackSupervisor.onConfigurationChanged(mTempConfig);
mKeyguardController = mStackSupervisor.mKeyguardController;
@@ -2667,6 +2669,10 @@
mProcessCpuThread = new Thread("CpuTracker") {
@Override
public void run() {
+ synchronized (mProcessCpuTracker) {
+ mProcessCpuInitLatch.countDown();
+ mProcessCpuTracker.init();
+ }
while (true) {
try {
try {
@@ -2714,6 +2720,16 @@
mAppOpsService.publish(mContext);
Slog.d("AppOps", "AppOpsService published");
LocalServices.addService(ActivityManagerInternal.class, new LocalService());
+ // Wait for the synchronized block started in mProcessCpuThread,
+ // so that any other acccess to mProcessCpuTracker from main thread
+ // will be blocked during mProcessCpuTracker initialization.
+ try {
+ mProcessCpuInitLatch.await();
+ } catch (InterruptedException e) {
+ Slog.wtf(TAG, "Interrupted wait during start", e);
+ Thread.currentThread().interrupt();
+ throw new IllegalStateException("Interrupted wait during start");
+ }
}
void onUserStoppedLocked(int userId) {
@@ -4737,7 +4753,7 @@
if (r == null) {
return ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
}
- return mWindowManager.getAppOrientation(r.appToken);
+ return r.getRequestedOrientation();
}
}
@@ -6400,6 +6416,7 @@
// the pid if we are running in multiple processes, or just pull the
// next app record if we are emulating process with anonymous threads.
ProcessRecord app;
+ long startTime = SystemClock.uptimeMillis();
if (pid != MY_PID && pid >= 0) {
synchronized (mPidsSelfLocked) {
app = mPidsSelfLocked.get(pid);
@@ -6478,6 +6495,8 @@
mHandler.sendMessageDelayed(msg, CONTENT_PROVIDER_PUBLISH_TIMEOUT);
}
+ checkTime(startTime, "attachApplicationLocked: before bindApplication");
+
if (!normalMode) {
Slog.i(TAG, "Launching preboot mode app: " + app);
}
@@ -6549,6 +6568,7 @@
.getSerial();
// }
+ checkTime(startTime, "attachApplicationLocked: immediately before bindApplication");
thread.bindApplication(processName, appInfo, providers, app.instrumentationClass,
profilerInfo, app.instrumentationArguments, app.instrumentationWatcher,
app.instrumentationUiAutomationConnection, testMode,
@@ -6559,7 +6579,9 @@
mCoreSettingsObserver.getCoreSettingsLocked(),
buildSerial);
+ checkTime(startTime, "attachApplicationLocked: immediately after bindApplication");
updateLruProcessLocked(app, false, null);
+ checkTime(startTime, "attachApplicationLocked: after updateLruProcessLocked");
app.lastRequestedGc = app.lastLowMemory = SystemClock.uptimeMillis();
} catch (Exception e) {
// todo: Yikes! What should we do? For now we will try to
@@ -6598,6 +6620,7 @@
if (!badApp) {
try {
didSomething |= mServices.attachApplicationLocked(app, processName);
+ checkTime(startTime, "attachApplicationLocked: after mServices.attachApplicationLocked");
} catch (Exception e) {
Slog.wtf(TAG, "Exception thrown starting services in " + app, e);
badApp = true;
@@ -6608,6 +6631,7 @@
if (!badApp && isPendingBroadcastProcessLocked(pid)) {
try {
didSomething |= sendPendingBroadcastsLocked(app);
+ checkTime(startTime, "attachApplicationLocked: after sendPendingBroadcastsLocked");
} catch (Exception e) {
// If the app died trying to launch the receiver we declare it 'bad'
Slog.wtf(TAG, "Exception thrown dispatching broadcasts in " + app, e);
@@ -6639,6 +6663,7 @@
if (!didSomething) {
updateOomAdjLocked();
+ checkTime(startTime, "attachApplicationLocked: after updateOomAdjLocked");
}
return true;
@@ -9513,12 +9538,7 @@
Slog.w(TAG, "setTaskResizeable: taskId=" + taskId + " not found");
return;
}
- if (task.mResizeMode != resizeableMode) {
- task.mResizeMode = resizeableMode;
- mWindowManager.setTaskResizeable(taskId, resizeableMode);
- mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
- mStackSupervisor.resumeFocusedStackTopActivityLocked();
- }
+ task.setResizeMode(resizeableMode);
}
}
@@ -9551,13 +9571,12 @@
}
boolean preserveWindow = (resizeMode & RESIZE_MODE_PRESERVE_WINDOW) != 0;
if (stackId != task.getStackId()) {
- mStackSupervisor.moveTaskToStackUncheckedLocked(
- task, stackId, ON_TOP, !FORCE_FOCUS, "resizeTask");
+ mStackSupervisor.moveTaskToStackUncheckedLocked(task, stackId, ON_TOP,
+ !FORCE_FOCUS, "resizeTask", true /* allowStackOnTop */);
preserveWindow = false;
}
- mStackSupervisor.resizeTaskLocked(task, bounds, resizeMode, preserveWindow,
- false /* deferResume */);
+ task.resize(bounds, resizeMode, preserveWindow, false /* deferResume */);
}
} finally {
Binder.restoreCallingIdentity(ident);
@@ -9580,7 +9599,7 @@
if (task.getStack() != null) {
// Return the bounds from window manager since it will be adjusted for various
// things like the presense of a docked stack for tasks that aren't resizeable.
- mWindowManager.getTaskBounds(task.taskId, rect);
+ task.getWindowContainerBounds(rect);
} else {
// Task isn't in window manager yet since it isn't associated with a stack.
// Return the persist value from activity manager
@@ -9598,6 +9617,63 @@
}
@Override
+ public void cancelTaskWindowTransition(int taskId) {
+ enforceCallingPermission(MANAGE_ACTIVITY_STACKS, "cancelTaskWindowTransition()");
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ synchronized (this) {
+ final TaskRecord task = mStackSupervisor.anyTaskForIdLocked(
+ taskId, !RESTORE_FROM_RECENTS, INVALID_STACK_ID);
+ if (task == null) {
+ Slog.w(TAG, "cancelTaskWindowTransition: taskId=" + taskId + " not found");
+ return;
+ }
+ task.cancelWindowTransition();
+ }
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
+ @Override
+ public void cancelTaskThumbnailTransition(int taskId) {
+ enforceCallingPermission(MANAGE_ACTIVITY_STACKS, "cancelTaskThumbnailTransition()");
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ synchronized (this) {
+ final TaskRecord task = mStackSupervisor.anyTaskForIdLocked(
+ taskId, !RESTORE_FROM_RECENTS, INVALID_STACK_ID);
+ if (task == null) {
+ Slog.w(TAG, "cancelTaskThumbnailTransition: taskId=" + taskId + " not found");
+ return;
+ }
+ task.cancelThumbnailTransition();
+ }
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
+ @Override
+ public TaskSnapshot getTaskSnapshot(int taskId) {
+ enforceCallingPermission(READ_FRAME_BUFFER, "getTaskSnapshot()");
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ synchronized (this) {
+ final TaskRecord task = mStackSupervisor.anyTaskForIdLocked(
+ taskId, !RESTORE_FROM_RECENTS, INVALID_STACK_ID);
+ if (task == null) {
+ Slog.w(TAG, "getTaskSnapshot: taskId=" + taskId + " not found");
+ return null;
+ }
+ return task.getSnapshot();
+ }
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
+ @Override
public Bitmap getTaskDescriptionIcon(String filePath, int userId) {
if (userId != UserHandle.getCallingUserId()) {
enforceCallingPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL,
@@ -9746,6 +9822,15 @@
}
mStackSupervisor.findTaskToMoveToFrontLocked(task, flags, options, "moveTaskToFront",
false /* forceNonResizable */);
+
+ final ActivityRecord topActivity = task.getTopActivity();
+ if (topActivity != null) {
+
+ // We are reshowing a task, use a starting window to hide the initial draw delay
+ // so the transition can start earlier.
+ topActivity.showStartingWindow(null /* prev */, false /* newTask */,
+ true /* taskSwitch */);
+ }
} finally {
Binder.restoreCallingIdentity(origId);
}
@@ -9935,7 +10020,7 @@
// Defer the resume so resume/pausing while moving stacks is dangerous.
mStackSupervisor.moveTaskToStackLocked(topTask.taskId, DOCKED_STACK_ID,
false /* toTop */, !FORCE_FOCUS, "swapDockedAndFullscreenStack",
- ANIMATE, true /* deferResume */);
+ ANIMATE, true /* deferResume */, true /* allowStackOnTop */);
final int size = tasks.size();
for (int i = 0; i < size; i++) {
final int id = tasks.get(i).taskId;
@@ -9944,7 +10029,8 @@
}
mStackSupervisor.moveTaskToStackLocked(id,
FULLSCREEN_WORKSPACE_STACK_ID, true /* toTop */, !FORCE_FOCUS,
- "swapDockedAndFullscreenStack", ANIMATE, true /* deferResume */);
+ "swapDockedAndFullscreenStack", ANIMATE, true /* deferResume */,
+ true /* allowStackOnTop */);
}
// Because we deferred the resume, to avoid conflicts with stack switches while
@@ -9985,7 +10071,7 @@
mWindowManager.setDockedStackCreateState(createMode, initialBounds);
final boolean moved = mStackSupervisor.moveTaskToStackLocked(
taskId, DOCKED_STACK_ID, toTop, !FORCE_FOCUS, "moveTaskToDockedStack",
- animate, DEFER_RESUME);
+ animate, DEFER_RESUME, true /* allowStackOnTop */);
if (moved) {
if (moveHomeStackFront) {
mStackSupervisor.moveHomeStackToFront("moveTaskToDockedStack");
@@ -10099,10 +10185,12 @@
synchronized (this) {
long ident = Binder.clearCallingIdentity();
try {
- if (DEBUG_STACK) Slog.d(TAG_STACK,
- "positionTaskInStack: positioning task=" + taskId
- + " in stackId=" + stackId + " at position=" + position);
- mStackSupervisor.positionTaskInStackLocked(taskId, stackId, position);
+ if (DEBUG_STACK) Slog.d(TAG_STACK, "positionTaskInStack: positioning task="
+ + taskId + " in stackId=" + stackId + " at position=" + position);
+ final ActivityStack stack = mStackSupervisor.getStack(stackId, CREATE_IF_NEEDED,
+ !ON_TOP);
+
+ stack.positionChildAt(taskId, position);
} finally {
Binder.restoreCallingIdentity(ident);
}
@@ -11825,20 +11913,20 @@
}
synchronized (this) {
- if (mStackSupervisor.isUserLockedProfile(userId)) {
- final long ident = Binder.clearCallingIdentity();
- try {
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ if (mUserController.shouldConfirmCredentials(userId)) {
final int currentUserId = mUserController.getCurrentUserIdLocked();
- if (mUserController.isLockScreenDisabled(currentUserId)) {
- // If there is no device lock, we will show the profile's credential page.
- mActivityStarter.showConfirmDeviceCredential(userId);
+ if (!mKeyguardController.isKeyguardLocked()) {
+ // If the device is not locked, we will prompt for credentials immediately.
+ mStackSupervisor.lockAllProfileTasks(userId);
} else {
// Showing launcher to avoid user entering credential twice.
startHomeActivityLocked(currentUserId, "notifyLockedProfile");
}
- } finally {
- Binder.restoreCallingIdentity(ident);
}
+ } finally {
+ Binder.restoreCallingIdentity(ident);
}
}
}
@@ -12079,6 +12167,9 @@
case ActivityManager.BUGREPORT_OPTION_WEAR:
extraOptions = "bugreportwear";
break;
+ case ActivityManager.BUGREPORT_OPTION_TELEPHONY:
+ extraOptions = "bugreporttelephony";
+ break;
default:
throw new IllegalArgumentException("Provided bugreport type is not correct, value: "
+ bugreportType);
@@ -12178,7 +12269,7 @@
@Override
public Bundle getAssistContextExtras(int requestType) {
PendingAssistExtras pae = enqueueAssistContext(requestType, null, null, null,
- null, null, true /* focused */, true /* newSessionId */,
+ null, 0, null, true /* focused */, true /* newSessionId */,
UserHandle.getCallingUserId(), null, PENDING_ASSIST_EXTRAS_TIMEOUT, 0);
if (pae == null) {
return null;
@@ -12246,22 +12337,37 @@
Bundle receiverExtras,
IBinder activityToken, boolean focused, boolean newSessionId) {
return enqueueAssistContext(requestType, null, null, receiver, receiverExtras,
- activityToken, focused, newSessionId,
- UserHandle.getCallingUserId(), null, PENDING_ASSIST_EXTRAS_LONG_TIMEOUT, 0)
- != null;
+ 0, activityToken, focused, newSessionId, UserHandle.getCallingUserId(), null,
+ PENDING_ASSIST_EXTRAS_LONG_TIMEOUT, 0) != null;
}
@Override
public boolean requestAutoFillData(IResultReceiver receiver, Bundle receiverExtras,
- IBinder activityToken, int flags) {
- return enqueueAssistContext(ActivityManager.ASSIST_CONTEXT_FULL, null, null, receiver,
- receiverExtras, activityToken, true, true,
- UserHandle.getCallingUserId(), null, PENDING_AUTO_FILL_ASSIST_STRUCTURE_TIMEOUT,
- flags) != null;
+ int resultCode, IBinder activityToken, int flags) {
+ final boolean forFill = (flags & View.AUTO_FILL_FLAG_TYPE_FILL) != 0;
+ final boolean forSave = (flags & View.AUTO_FILL_FLAG_TYPE_SAVE) != 0;
+ if ((forFill && forSave) || (!forFill) && !(forSave)) {
+ // There can be only one!
+ Slog.w(TAG, "requestAutoFillData(): invalid flags (" + flags + ")");
+ return false;
+ }
+
+ // NOTE: we could always use ActivityManager.ASSIST_CONTEXT_FULL and let ActivityThread
+ // rely on the flags to decide whether the handleRequestAssistContextExtras() is for
+ // auto-fill, but it's safer to explicitly use new AutoFill types, in case the Assist
+ // requests use flags in the future as well (since their flags value might collide with the
+ // auto-fill flag values).
+ final int type = forFill?
+ ActivityManager.ASSIST_CONTEXT_AUTO_FILL :
+ ActivityManager.ASSIST_CONTEXT_AUTO_FILL_SAVE;
+
+ return enqueueAssistContext(type, null, null, receiver, receiverExtras, resultCode,
+ activityToken, true, true, UserHandle.getCallingUserId(), null,
+ PENDING_AUTO_FILL_ASSIST_STRUCTURE_TIMEOUT, flags) != null;
}
private PendingAssistExtras enqueueAssistContext(int requestType, Intent intent, String hint,
- IResultReceiver receiver, Bundle receiverExtras, IBinder activityToken,
+ IResultReceiver receiver, Bundle receiverExtras, int resultCode, IBinder activityToken,
boolean focused, boolean newSessionId, int userHandle, Bundle args, long timeout,
int flags) {
enforceCallingPermission(android.Manifest.permission.GET_TOP_ACTIVITY_INFO,
@@ -12302,7 +12408,7 @@
extras.putString(Intent.EXTRA_ASSIST_PACKAGE, activity.packageName);
extras.putInt(Intent.EXTRA_ASSIST_UID, activity.app.uid);
pae = new PendingAssistExtras(activity, extras, intent, hint, receiver, receiverExtras,
- flags, userHandle);
+ resultCode, userHandle, flags);
// Increment the sessionId if necessary
if (newSessionId) {
mViSessionId++;
@@ -12388,17 +12494,15 @@
if (pae.flags > 0) {
sendBundle.putInt(VoiceInteractionSession.KEY_FLAGS, pae.flags);
}
- IBinder autoFillCallback =
- extras.getBinder(AutoFillService.KEY_CALLBACK);
- if (autoFillCallback != null) {
- sendBundle.putBinder(AutoFillService.KEY_CALLBACK,
- autoFillCallback);
+ IBinder cb = extras.getBinder(AutoFillService.KEY_CALLBACK);
+ if (cb != null) {
+ sendBundle.putBinder(AutoFillService.KEY_CALLBACK, cb);
}
}
}
if (sendReceiver != null) {
try {
- sendReceiver.send(0, sendBundle);
+ sendReceiver.send(pae.resultCode, sendBundle);
} catch (RemoteException e) {
}
return;
@@ -12423,9 +12527,9 @@
public boolean launchAssistIntent(Intent intent, int requestType, String hint, int userHandle,
Bundle args) {
- return enqueueAssistContext(requestType, intent, hint, null, null, null,
- true /* focused */, true /* newSessionId */,
- userHandle, args, PENDING_ASSIST_EXTRAS_TIMEOUT, 0) != null;
+ return enqueueAssistContext(requestType, intent, hint, null, null, 0, null,
+ true /* focused */, true /* newSessionId */, userHandle, args,
+ PENDING_ASSIST_EXTRAS_TIMEOUT, 0) != null;
}
public void registerProcessObserver(IProcessObserver observer) {
@@ -17863,6 +17967,11 @@
private void checkBroadcastFromSystem(Intent intent, ProcessRecord callerApp,
String callerPackage, int callingUid, boolean isProtectedBroadcast, List receivers) {
+ if ((intent.getFlags() & Intent.FLAG_RECEIVER_FROM_SHELL) != 0) {
+ // Don't yell about broadcasts sent via shell
+ return;
+ }
+
final String action = intent.getAction();
if (isProtectedBroadcast
|| Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)
@@ -18006,11 +18115,7 @@
case Process.PHONE_UID:
case Process.BLUETOOTH_UID:
case Process.NFC_UID:
- if ((intent.getFlags() & Intent.FLAG_RECEIVER_FROM_SHELL) != 0) {
- isCallerSystem = false;
- } else {
- isCallerSystem = true;
- }
+ isCallerSystem = true;
break;
default:
isCallerSystem = (callerApp != null) && callerApp.persistent;
@@ -21802,6 +21907,10 @@
profilerInfo.profileFd = fd;
proc.thread.profilerControl(start, profilerInfo, profileType);
fd = null;
+ try {
+ mProfileFd.close();
+ } catch (IOException e) {
+ }
mProfileFd = null;
} else {
stopProfilerLocked(proc, profileType);
@@ -22649,6 +22758,11 @@
}
}
+ @Override
+ public int restartUserInBackground(final int userId) {
+ return mUserController.restartUser(userId, /* foreground */ false);
+ }
+
/**
* Attach an agent to the specified process (proces name or PID)
*/
diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
index 0d13ac6..29a4781 100644
--- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
+++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
@@ -818,6 +818,8 @@
while ((opt=getNextOption()) != null) {
if (opt.equals("--progress")) {
bugreportType = ActivityManager.BUGREPORT_OPTION_INTERACTIVE;
+ } else if (opt.equals("--telephony")) {
+ bugreportType = ActivityManager.BUGREPORT_OPTION_TELEPHONY;
} else {
getErrPrintWriter().println("Error: Unknown option: " + opt);
return -1;
@@ -2453,10 +2455,11 @@
pw.println(" above <HEAP-LIMIT> then a heap dump is collected for the user to report.");
pw.println(" clear-watch-heap");
pw.println(" Clear the previously set-watch-heap.");
- pw.println(" bug-report [--progress]");
+ pw.println(" bug-report [--progress | --telephony]");
pw.println(" Request bug report generation; will launch a notification");
pw.println(" when done to select where it should be delivered. Options are:");
pw.println(" --progress: will launch a notification right away to show its progress.");
+ pw.println(" --telephony: will dump only telephony sections.");
pw.println(" force-stop [--user <USER_ID> | all | current] <PACKAGE>");
pw.println(" Completely stop the given application package.");
pw.println(" kill [--user <USER_ID> | all | current] <PACKAGE>");
diff --git a/services/core/java/com/android/server/am/ActivityMetricsLogger.java b/services/core/java/com/android/server/am/ActivityMetricsLogger.java
index 32dec96..e46d204 100644
--- a/services/core/java/com/android/server/am/ActivityMetricsLogger.java
+++ b/services/core/java/com/android/server/am/ActivityMetricsLogger.java
@@ -17,6 +17,7 @@
import android.os.SystemClock;
import android.util.Slog;
+import com.android.internal.logging.LogBuilder;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -170,6 +171,13 @@
processRunning);
MetricsLogger.action(mContext, MetricsEvent.APP_TRANSITION_DEVICE_UPTIME_SECONDS,
(int) (SystemClock.uptimeMillis() / 1000));
+
+ LogBuilder builder = new LogBuilder(MetricsEvent.APP_TRANSITION);
+ builder.addTaggedData(MetricsEvent.APP_TRANSITION_COMPONENT_NAME, componentName);
+ builder.addTaggedData(MetricsEvent.APP_TRANSITION_PROCESS_RUNNING, processRunning ? 1 : 0);
+ builder.addTaggedData(MetricsEvent.APP_TRANSITION_DEVICE_UPTIME_SECONDS,
+ SystemClock.uptimeMillis() / 1000);
+ MetricsLogger.action(builder);
}
/**
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index ef19700..47c3e6f 100644
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -16,23 +16,32 @@
package com.android.server.am;
+import static android.app.ActivityManager.ENABLE_TASK_SNAPSHOTS;
import static android.app.ActivityManager.StackId;
import static android.app.ActivityManager.StackId.DOCKED_STACK_ID;
import static android.app.ActivityManager.StackId.FREEFORM_WORKSPACE_STACK_ID;
import static android.app.ActivityManager.StackId.HOME_STACK_ID;
import static android.app.ActivityManager.StackId.PINNED_STACK_ID;
+import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
import static android.content.pm.ActivityInfo.CONFIG_ORIENTATION;
import static android.content.pm.ActivityInfo.CONFIG_SCREEN_LAYOUT;
import static android.content.pm.ActivityInfo.CONFIG_SCREEN_SIZE;
import static android.content.pm.ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE;
-import static android.content.pm.ActivityInfo.FLAG_SHOW_FOR_ALL_USERS;
import static android.content.pm.ActivityInfo.FLAG_ALWAYS_FOCUSABLE;
+import static android.content.pm.ActivityInfo.FLAG_EXCLUDE_FROM_RECENTS;
+import static android.content.pm.ActivityInfo.FLAG_IMMERSIVE;
+import static android.content.pm.ActivityInfo.FLAG_MULTIPROCESS;
+import static android.content.pm.ActivityInfo.FLAG_SHOW_FOR_ALL_USERS;
+import static android.content.pm.ActivityInfo.FLAG_STATE_NOT_NEEDED;
+import static android.content.pm.ActivityInfo.LAUNCH_MULTIPLE;
+import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_TOP;
import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZEABLE;
import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;
import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE_AND_PIPABLE;
import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
-import static android.view.Display.DEFAULT_DISPLAY;
+import static android.os.Build.VERSION_CODES.HONEYCOMB;
+import static android.os.Process.SYSTEM_UID;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_CONFIGURATION;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_SAVED_STATE;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_SCREENSHOTS;
@@ -66,7 +75,6 @@
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Rect;
-import android.os.Build;
import android.os.Bundle;
import android.os.Debug;
import android.os.IBinder;
@@ -92,6 +100,13 @@
import com.android.server.AttributeCache;
import com.android.server.am.ActivityStack.ActivityState;
import com.android.server.am.ActivityStackSupervisor.ActivityContainer;
+import com.android.server.wm.AppWindowContainerController;
+import com.android.server.wm.AppWindowContainerListener;
+import com.android.server.wm.TaskWindowContainerController;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
import java.io.File;
import java.io.IOException;
@@ -103,14 +118,10 @@
import java.util.List;
import java.util.Objects;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-import org.xmlpull.v1.XmlSerializer;
-
/**
* An entry in the history stack, representing an activity.
*/
-final class ActivityRecord {
+final class ActivityRecord implements AppWindowContainerListener {
private static final String TAG = TAG_WITH_CLASS_NAME ? "ActivityRecord" : TAG_AM;
private static final String TAG_CONFIGURATION = TAG + POSTFIX_CONFIGURATION;
private static final String TAG_SAVED_STATE = TAG + POSTFIX_SAVED_STATE;
@@ -135,6 +146,7 @@
final ActivityManagerService service; // owner
final IApplicationToken.Stub appToken; // window manager token
+ AppWindowContainerController mWindowContainerController;
final ActivityInfo info; // all about me
final ApplicationInfo appInfo; // information about activity's app
final int launchedFromUid; // always the uid who started the activity.
@@ -150,7 +162,7 @@
final boolean stateNotNeeded; // As per ActivityInfo.flags
boolean fullscreen; // covers the full screen?
final boolean noDisplay; // activity is not displayed?
- final boolean componentSpecified; // did caller specify an explicit component?
+ private final boolean componentSpecified; // did caller specify an explicit component?
final boolean rootVoiceInteraction; // was this the root activity of a voice interaction?
static final int APPLICATION_ACTIVITY_TYPE = 0;
@@ -158,18 +170,18 @@
static final int RECENTS_ACTIVITY_TYPE = 2;
int mActivityType;
- CharSequence nonLocalizedLabel; // the label information from the package mgr.
- int labelRes; // the label information from the package mgr.
- int icon; // resource identifier of activity's icon.
- int logo; // resource identifier of activity's logo.
- int theme; // resource identifier of activity's theme.
- int realTheme; // actual theme resource we will use, never 0.
- int windowFlags; // custom window flags for preview window.
+ private CharSequence nonLocalizedLabel; // the label information from the package mgr.
+ private int labelRes; // the label information from the package mgr.
+ private int icon; // resource identifier of activity's icon.
+ private int logo; // resource identifier of activity's logo.
+ private int theme; // resource identifier of activity's theme.
+ private int realTheme; // actual theme resource we will use, never 0.
+ private int windowFlags; // custom window flags for preview window.
TaskRecord task; // the task this is in.
- long createTime = System.currentTimeMillis();
+ private long createTime = System.currentTimeMillis();
long displayStartTime; // when we started launching this activity
long fullyDrawnStartTime; // when we started launching this activity
- long startTime; // last time this activity was started
+ private long startTime; // last time this activity was started
long lastVisibleTime; // last time this activity became visible
long cpuTimeAtResume; // the cpu time of host process at the time of resuming activity
long pauseTime; // last time we started pausing the activity
@@ -542,70 +554,9 @@
static class Token extends IApplicationToken.Stub {
private final WeakReference<ActivityRecord> weakActivity;
- private final ActivityManagerService mService;
- Token(ActivityRecord activity, ActivityManagerService service) {
+ Token(ActivityRecord activity) {
weakActivity = new WeakReference<>(activity);
- mService = service;
- }
-
- @Override
- public void windowsDrawn() {
- synchronized (mService) {
- ActivityRecord r = tokenToActivityRecordLocked(this);
- if (r != null) {
- r.windowsDrawnLocked();
- }
- }
- }
-
- @Override
- public void windowsVisible() {
- synchronized (mService) {
- ActivityRecord r = tokenToActivityRecordLocked(this);
- if (r != null) {
- r.windowsVisibleLocked();
- }
- }
- }
-
- @Override
- public void windowsGone() {
- synchronized (mService) {
- ActivityRecord r = tokenToActivityRecordLocked(this);
- if (r != null) {
- if (DEBUG_SWITCH) Log.v(TAG_SWITCH, "windowsGone(): " + r);
- r.nowVisible = false;
- }
- }
- }
-
- @Override
- public boolean keyDispatchingTimedOut(String reason) {
- ActivityRecord r;
- ActivityRecord anrActivity;
- ProcessRecord anrApp;
- synchronized (mService) {
- r = tokenToActivityRecordLocked(this);
- if (r == null) {
- return false;
- }
- anrActivity = r.getWaitingHistoryRecordLocked();
- anrApp = r.app;
- }
- return mService.inputDispatchingTimedOut(anrApp, anrActivity, r, false, reason);
- }
-
- @Override
- public long getKeyDispatchingTimeout() {
- synchronized (mService) {
- ActivityRecord r = tokenToActivityRecordLocked(this);
- if (r == null) {
- return 0;
- }
- r = r.getWaitingHistoryRecordLocked();
- return ActivityManagerService.getInputDispatchingTimeoutLocked(r);
- }
}
private static ActivityRecord tokenToActivityRecordLocked(Token token) {
@@ -652,7 +603,7 @@
ActivityStackSupervisor supervisor,
ActivityContainer container, ActivityOptions options, ActivityRecord sourceRecord) {
service = _service;
- appToken = new Token(this, service);
+ appToken = new Token(this);
info = aInfo;
launchedFromUid = _launchedFromUid;
launchedFromPackage = _launchedFromPackage;
@@ -700,97 +651,110 @@
}
}
- // This starts out true, since the initial state of an activity
- // is that we have everything, and we shouldn't never consider it
- // lacking in state to be removed if it dies.
+ // This starts out true, since the initial state of an activity is that we have everything,
+ // and we shouldn't never consider it lacking in state to be removed if it dies.
haveState = true;
- if (aInfo != null) {
- // If the class name in the intent doesn't match that of the target, this is
- // probably an alias. We have to create a new ComponentName object to keep track
- // of the real activity name, so that FLAG_ACTIVITY_CLEAR_TOP is handled properly.
- if (aInfo.targetActivity == null
- || (aInfo.targetActivity.equals(_intent.getComponent().getClassName())
- && (aInfo.launchMode == ActivityInfo.LAUNCH_MULTIPLE
- || aInfo.launchMode == ActivityInfo.LAUNCH_SINGLE_TOP))) {
- realActivity = _intent.getComponent();
- } else {
- realActivity = new ComponentName(aInfo.packageName, aInfo.targetActivity);
- }
- taskAffinity = aInfo.taskAffinity;
- stateNotNeeded = (aInfo.flags&
- ActivityInfo.FLAG_STATE_NOT_NEEDED) != 0;
- appInfo = aInfo.applicationInfo;
- nonLocalizedLabel = aInfo.nonLocalizedLabel;
- labelRes = aInfo.labelRes;
- if (nonLocalizedLabel == null && labelRes == 0) {
- ApplicationInfo app = aInfo.applicationInfo;
- nonLocalizedLabel = app.nonLocalizedLabel;
- labelRes = app.labelRes;
- }
- icon = aInfo.getIconResource();
- logo = aInfo.getLogoResource();
- theme = aInfo.getThemeResource();
- realTheme = theme;
- if (realTheme == 0) {
- realTheme = aInfo.applicationInfo.targetSdkVersion
- < Build.VERSION_CODES.HONEYCOMB
- ? android.R.style.Theme
- : android.R.style.Theme_Holo;
- }
- if ((aInfo.flags&ActivityInfo.FLAG_HARDWARE_ACCELERATED) != 0) {
- windowFlags |= LayoutParams.FLAG_HARDWARE_ACCELERATED;
- }
- if ((aInfo.flags&ActivityInfo.FLAG_MULTIPROCESS) != 0
- && _caller != null
- && (aInfo.applicationInfo.uid == Process.SYSTEM_UID
- || aInfo.applicationInfo.uid == _caller.info.uid)) {
- processName = _caller.processName;
- } else {
- processName = aInfo.processName;
- }
-
- if (intent != null && (aInfo.flags & ActivityInfo.FLAG_EXCLUDE_FROM_RECENTS) != 0) {
- intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
- }
-
- packageName = aInfo.applicationInfo.packageName;
- launchMode = aInfo.launchMode;
-
- AttributeCache.Entry ent = AttributeCache.instance().get(packageName,
- realTheme, com.android.internal.R.styleable.Window, userId);
- final boolean translucent = ent != null && (ent.array.getBoolean(
- com.android.internal.R.styleable.Window_windowIsTranslucent, false)
- || (!ent.array.hasValue(
- com.android.internal.R.styleable.Window_windowIsTranslucent)
- && ent.array.getBoolean(
- com.android.internal.R.styleable.Window_windowSwipeToDismiss,
- false)));
- fullscreen = ent != null && !ent.array.getBoolean(
- com.android.internal.R.styleable.Window_windowIsFloating, false)
- && !translucent;
- noDisplay = ent != null && ent.array.getBoolean(
- com.android.internal.R.styleable.Window_windowNoDisplay, false);
-
- setActivityType(_componentSpecified, _launchedFromUid, _intent, sourceRecord);
-
- immersive = (aInfo.flags & ActivityInfo.FLAG_IMMERSIVE) != 0;
-
- requestedVrComponent = (aInfo.requestedVrComponent == null) ?
- null : ComponentName.unflattenFromString(aInfo.requestedVrComponent);
+ // If the class name in the intent doesn't match that of the target, this is
+ // probably an alias. We have to create a new ComponentName object to keep track
+ // of the real activity name, so that FLAG_ACTIVITY_CLEAR_TOP is handled properly.
+ if (aInfo.targetActivity == null
+ || (aInfo.targetActivity.equals(_intent.getComponent().getClassName())
+ && (aInfo.launchMode == LAUNCH_MULTIPLE
+ || aInfo.launchMode == LAUNCH_SINGLE_TOP))) {
+ realActivity = _intent.getComponent();
} else {
- realActivity = null;
- taskAffinity = null;
- stateNotNeeded = false;
- appInfo = null;
- processName = null;
- packageName = null;
- fullscreen = true;
- noDisplay = false;
- mActivityType = APPLICATION_ACTIVITY_TYPE;
- immersive = false;
- requestedVrComponent = null;
+ realActivity = new ComponentName(aInfo.packageName, aInfo.targetActivity);
}
+ taskAffinity = aInfo.taskAffinity;
+ stateNotNeeded = (aInfo.flags & FLAG_STATE_NOT_NEEDED) != 0;
+ appInfo = aInfo.applicationInfo;
+ nonLocalizedLabel = aInfo.nonLocalizedLabel;
+ labelRes = aInfo.labelRes;
+ if (nonLocalizedLabel == null && labelRes == 0) {
+ ApplicationInfo app = aInfo.applicationInfo;
+ nonLocalizedLabel = app.nonLocalizedLabel;
+ labelRes = app.labelRes;
+ }
+ icon = aInfo.getIconResource();
+ logo = aInfo.getLogoResource();
+ theme = aInfo.getThemeResource();
+ realTheme = theme;
+ if (realTheme == 0) {
+ realTheme = aInfo.applicationInfo.targetSdkVersion < HONEYCOMB
+ ? android.R.style.Theme : android.R.style.Theme_Holo;
+ }
+ if ((aInfo.flags & ActivityInfo.FLAG_HARDWARE_ACCELERATED) != 0) {
+ windowFlags |= LayoutParams.FLAG_HARDWARE_ACCELERATED;
+ }
+ if ((aInfo.flags & FLAG_MULTIPROCESS) != 0 && _caller != null
+ && (aInfo.applicationInfo.uid == SYSTEM_UID
+ || aInfo.applicationInfo.uid == _caller.info.uid)) {
+ processName = _caller.processName;
+ } else {
+ processName = aInfo.processName;
+ }
+
+ if ((aInfo.flags & FLAG_EXCLUDE_FROM_RECENTS) != 0) {
+ intent.addFlags(FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
+ }
+
+ packageName = aInfo.applicationInfo.packageName;
+ launchMode = aInfo.launchMode;
+
+ AttributeCache.Entry ent = AttributeCache.instance().get(packageName,
+ realTheme, com.android.internal.R.styleable.Window, userId);
+ final boolean translucent = ent != null && (ent.array.getBoolean(
+ com.android.internal.R.styleable.Window_windowIsTranslucent, false)
+ || (!ent.array.hasValue(
+ com.android.internal.R.styleable.Window_windowIsTranslucent)
+ && ent.array.getBoolean(
+ com.android.internal.R.styleable.Window_windowSwipeToDismiss,
+ false)));
+ fullscreen = ent != null && !ent.array.getBoolean(
+ com.android.internal.R.styleable.Window_windowIsFloating, false) && !translucent;
+ noDisplay = ent != null && ent.array.getBoolean(
+ com.android.internal.R.styleable.Window_windowNoDisplay, false);
+
+ setActivityType(_componentSpecified, _launchedFromUid, _intent, sourceRecord);
+
+ immersive = (aInfo.flags & FLAG_IMMERSIVE) != 0;
+
+ requestedVrComponent = (aInfo.requestedVrComponent == null) ?
+ null : ComponentName.unflattenFromString(aInfo.requestedVrComponent);
+ }
+
+ AppWindowContainerController getWindowContainerController() {
+ return mWindowContainerController;
+ }
+
+ void createWindowContainer() {
+ if (mWindowContainerController != null) {
+ throw new IllegalArgumentException("Window container=" + mWindowContainerController
+ + " already created for r=" + this);
+
+ }
+
+ inHistory = true;
+
+ task.updateOverrideConfigurationFromLaunchBounds();
+ final TaskWindowContainerController taskController = task.getWindowContainerController();
+
+ mWindowContainerController = new AppWindowContainerController(taskController, appToken,
+ this, Integer.MAX_VALUE /* add on top */, info.screenOrientation, fullscreen,
+ (info.flags & FLAG_SHOW_FOR_ALL_USERS) != 0, info.configChanges,
+ task.voiceSession != null, mLaunchTaskBehind, isAlwaysFocusable(),
+ appInfo.targetSdkVersion, mRotationAnimationHint,
+ ActivityManagerService.getInputDispatchingTimeoutLocked(this) * 1000000L);
+
+ task.addActivityToTop(this);
+
+ onOverrideConfigurationSent();
+ }
+
+ void removeWindowContainer() {
+ mWindowContainerController.removeContainer(getDisplayId());
+ mWindowContainerController = null;
}
private boolean isHomeIntent(Intent intent) {
@@ -890,12 +854,6 @@
return true;
}
- void putInHistory() {
- if (!inHistory) {
- inHistory = true;
- }
- }
-
void takeFromHistory() {
if (inHistory) {
inHistory = false;
@@ -931,7 +889,7 @@
return (info.persistableMode == ActivityInfo.PERSIST_ROOT_ONLY ||
info.persistableMode == ActivityInfo.PERSIST_ACROSS_REBOOTS) &&
(intent == null ||
- (intent.getFlags() & Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) == 0);
+ (intent.getFlags() & FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) == 0);
}
boolean isFocusable() {
@@ -1222,14 +1180,14 @@
void pauseKeyDispatchingLocked() {
if (!keysPaused) {
keysPaused = true;
- service.mWindowManager.pauseKeyDispatching(appToken);
+ mWindowContainerController.pauseKeyDispatching();
}
}
void resumeKeyDispatchingLocked() {
if (keysPaused) {
keysPaused = false;
- service.mWindowManager.resumeKeyDispatching(appToken);
+ mWindowContainerController.resumeKeyDispatching();
}
}
@@ -1247,6 +1205,14 @@
final Bitmap screenshotActivityLocked() {
if (DEBUG_SCREENSHOTS) Slog.d(TAG_SCREENSHOTS, "screenshotActivityLocked: " + this);
+
+ if (ENABLE_TASK_SNAPSHOTS) {
+ // No need to screenshot if snapshots are enabled.
+ if (DEBUG_SCREENSHOTS) Slog.d(TAG_SCREENSHOTS,
+ "\tSnapshots are enabled, abort taking screenshot");
+ return null;
+ }
+
if (noDisplay) {
if (DEBUG_SCREENSHOTS) Slog.d(TAG_SCREENSHOTS, "\tNo display");
return null;
@@ -1277,7 +1243,7 @@
return null;
}
- final float scale;
+ float scale = 0;
if (DEBUG_SCREENSHOTS) Slog.d(TAG_SCREENSHOTS, "\tTaking screenshot");
// When this flag is set, we currently take the fullscreen screenshot of the activity but
@@ -1288,17 +1254,21 @@
scale = service.mFullscreenThumbnailScale;
}
- return service.mWindowManager.screenshotApplications(appToken, DEFAULT_DISPLAY, w, h,
- scale);
+ return mWindowContainerController.screenshotApplications(getDisplayId(), w, h, scale);
}
+ void setVisibility(boolean visible) {
+ mWindowContainerController.setVisibility(visible);
+ }
+
+ // TODO: Look into merging with #setVisibility()
void setVisible(boolean newVisible) {
visible = newVisible;
if (!visible && mUpdateTaskThumbnailWhenHidden) {
updateThumbnailLocked(screenshotActivityLocked(), null /* description */);
mUpdateTaskThumbnailWhenHidden = false;
}
- service.mWindowManager.setAppVisibility(appToken, visible);
+ mWindowContainerController.setVisibility(visible);
final ArrayList<ActivityContainer> containers = mChildContainers;
for (int containerNdx = containers.size() - 1; containerNdx >= 0; --containerNdx) {
final ActivityContainer container = containers.get(containerNdx);
@@ -1307,6 +1277,14 @@
mStackSupervisor.mAppVisibilitiesChangedSinceLastPause = true;
}
+ void notifyAppResumed(boolean wasStopped, boolean allowSavedSurface) {
+ mWindowContainerController.notifyAppResumed(wasStopped, allowSavedSurface);
+ }
+
+ void notifyUnknownVisibilityLaunched() {
+ mWindowContainerController.notifyUnknownVisibilityLaunched();
+ }
+
/**
* @return true if the input activity should be made visible, ignoring any effect Keyguard
* might have on the visibility
@@ -1458,6 +1436,7 @@
service.notifyTaskPersisterLocked(task, false);
}
if (DEBUG_SAVED_STATE) Slog.i(TAG_SAVED_STATE, "Saving icicle of " + this + ": " + icicle);
+
if (newIcicle != null) {
// If icicle is null, this is happening due to a timeout, so we haven't really saved
// the state.
@@ -1472,7 +1451,7 @@
stopped = true;
state = ActivityState.STOPPED;
- service.mWindowManager.notifyAppStopped(appToken);
+ mWindowContainerController.notifyAppStopped();
if (stack.getVisibleBehindActivity() == this) {
mStackSupervisor.requestVisibleBehindLocked(this, false /* visible */);
@@ -1536,14 +1515,14 @@
public void startFreezingScreenLocked(ProcessRecord app, int configChanges) {
if (mayFreezeScreenLocked(app)) {
- service.mWindowManager.startAppFreezingScreen(appToken, configChanges);
+ mWindowContainerController.startFreezingScreen(configChanges);
}
}
public void stopFreezingScreenLocked(boolean force) {
if (force || frozenBeforeDestroy) {
frozenBeforeDestroy = false;
- service.mWindowManager.stopAppFreezingScreen(appToken, force);
+ mWindowContainerController.stopFreezingScreen(force);
}
}
@@ -1617,48 +1596,73 @@
stack.mLaunchStartTime = 0;
}
- void windowsDrawnLocked() {
- mStackSupervisor.mActivityMetricsLogger.notifyWindowsDrawn();
- if (displayStartTime != 0) {
- reportLaunchTimeLocked(SystemClock.uptimeMillis());
- }
- mStackSupervisor.sendWaitingVisibleReportLocked(this);
- startTime = 0;
- finishLaunchTickingLocked();
- if (task != null) {
- task.hasBeenVisible = true;
- }
- }
-
- void windowsVisibleLocked() {
- mStackSupervisor.reportActivityVisibleLocked(this);
- if (DEBUG_SWITCH) Log.v(TAG_SWITCH, "windowsVisibleLocked(): " + this);
- if (!nowVisible) {
- nowVisible = true;
- lastVisibleTime = SystemClock.uptimeMillis();
- if (!idle) {
- // Instead of doing the full stop routine here, let's just hide any activities
- // we now can, and let them stop when the normal idle happens.
- mStackSupervisor.processStoppingActivitiesLocked(false);
- } else {
- // If this activity was already idle, then we now need to make sure we perform
- // the full stop of any activities that are waiting to do so. This is because
- // we won't do that while they are still waiting for this one to become visible.
- final int size = mStackSupervisor.mWaitingVisibleActivities.size();
- if (size > 0) {
- for (int i = 0; i < size; i++) {
- ActivityRecord r = mStackSupervisor.mWaitingVisibleActivities.get(i);
- if (DEBUG_SWITCH) Log.v(TAG_SWITCH, "Was waiting for visible: " + r);
- }
- mStackSupervisor.mWaitingVisibleActivities.clear();
- mStackSupervisor.scheduleIdleLocked();
- }
+ @Override
+ public void onWindowsDrawn() {
+ synchronized (service) {
+ mStackSupervisor.mActivityMetricsLogger.notifyWindowsDrawn();
+ if (displayStartTime != 0) {
+ reportLaunchTimeLocked(SystemClock.uptimeMillis());
}
- service.scheduleAppGcsLocked();
+ mStackSupervisor.sendWaitingVisibleReportLocked(this);
+ startTime = 0;
+ finishLaunchTickingLocked();
+ if (task != null) {
+ task.hasBeenVisible = true;
+ }
}
}
- ActivityRecord getWaitingHistoryRecordLocked() {
+ @Override
+ public void onWindowsVisible() {
+ synchronized (service) {
+ mStackSupervisor.reportActivityVisibleLocked(this);
+ if (DEBUG_SWITCH) Log.v(TAG_SWITCH, "windowsVisibleLocked(): " + this);
+ if (!nowVisible) {
+ nowVisible = true;
+ lastVisibleTime = SystemClock.uptimeMillis();
+ if (!idle) {
+ // Instead of doing the full stop routine here, let's just hide any activities
+ // we now can, and let them stop when the normal idle happens.
+ mStackSupervisor.processStoppingActivitiesLocked(false);
+ } else {
+ // If this activity was already idle, then we now need to make sure we perform
+ // the full stop of any activities that are waiting to do so. This is because
+ // we won't do that while they are still waiting for this one to become visible.
+ final int size = mStackSupervisor.mWaitingVisibleActivities.size();
+ if (size > 0) {
+ for (int i = 0; i < size; i++) {
+ ActivityRecord r = mStackSupervisor.mWaitingVisibleActivities.get(i);
+ if (DEBUG_SWITCH) Log.v(TAG_SWITCH, "Was waiting for visible: " + r);
+ }
+ mStackSupervisor.mWaitingVisibleActivities.clear();
+ mStackSupervisor.scheduleIdleLocked();
+ }
+ }
+ service.scheduleAppGcsLocked();
+ }
+ }
+ }
+
+ @Override
+ public void onWindowsGone() {
+ synchronized (service) {
+ if (DEBUG_SWITCH) Log.v(TAG_SWITCH, "windowsGone(): " + this);
+ nowVisible = false;
+ }
+ }
+
+ @Override
+ public boolean keyDispatchingTimedOut(String reason) {
+ ActivityRecord anrActivity;
+ ProcessRecord anrApp;
+ synchronized (service) {
+ anrActivity = getWaitingHistoryRecordLocked();
+ anrApp = app;
+ }
+ return service.inputDispatchingTimedOut(anrApp, anrActivity, this, false, reason);
+ }
+
+ private ActivityRecord getWaitingHistoryRecordLocked() {
// First find the real culprit... if this activity is waiting for
// another activity to start or has stopped, then the key dispatching
// timeout should not be caused by this.
@@ -1797,28 +1801,43 @@
pendingVoiceInteractionStart = false;
}
- void showStartingWindow(ActivityRecord prev, boolean createIfNeeded) {
+ void showStartingWindow(ActivityRecord prev, boolean newTask, boolean taskSwitch) {
final CompatibilityInfo compatInfo =
service.compatibilityInfoForPackageLocked(info.applicationInfo);
- final boolean shown = service.mWindowManager.setAppStartingWindow(
- appToken, packageName, theme, compatInfo, nonLocalizedLabel, labelRes, icon,
- logo, windowFlags, prev != null ? prev.appToken : null, createIfNeeded);
+ final boolean shown = mWindowContainerController.addStartingWindow(packageName, theme,
+ compatInfo, nonLocalizedLabel, labelRes, icon, logo, windowFlags,
+ prev != null ? prev.appToken : null, newTask, taskSwitch, isProcessRunning());
if (shown) {
mStartingWindowState = STARTING_WINDOW_SHOWN;
}
}
+ void removeOrphanedStartingWindow(boolean behindFullscreenActivity) {
+ if (state == ActivityState.INITIALIZING
+ && mStartingWindowState == STARTING_WINDOW_SHOWN
+ && behindFullscreenActivity) {
+ if (DEBUG_VISIBILITY) Slog.w(TAG_VISIBILITY, "Found orphaned starting window " + this);
+ mStartingWindowState = STARTING_WINDOW_REMOVED;
+ mWindowContainerController.removeStartingWindow();
+ }
+ }
+
+ int getRequestedOrientation() {
+ return mWindowContainerController.getOrientation();
+ }
+
void setRequestedOrientation(int requestedOrientation) {
if (task != null && (!task.mFullscreen || !task.getStack().mFullscreen)) {
// Fixed screen orientation isn't supported when activities aren't in full screen mode.
return;
}
- service.mWindowManager.setAppOrientation(appToken, requestedOrientation);
final int displayId = getDisplayId();
- final Configuration config = service.mWindowManager.updateOrientationFromAppTokens(
- mStackSupervisor.getDisplayOverrideConfiguration(displayId),
- mayFreezeScreenLocked(app) ? appToken : null, displayId);
+ final Configuration displayConfig =
+ mStackSupervisor.getDisplayOverrideConfiguration(displayId);
+
+ final Configuration config = mWindowContainerController.setOrientation(requestedOrientation,
+ displayId, displayConfig, mayFreezeScreenLocked(app));
if (config != null) {
frozenBeforeDestroy = true;
if (!service.updateDisplayOverrideConfigurationLocked(config, this,
@@ -2079,6 +2098,14 @@
preserveWindowOnDeferredRelaunch = false;
}
+ boolean isProcessRunning() {
+ ProcessRecord proc = app;
+ if (proc == null) {
+ proc = service.mProcessNames.get(processName, info.applicationInfo.uid);
+ }
+ return proc != null && proc.thread != null;
+ }
+
void saveToXml(XmlSerializer out) throws IOException, XmlPullParserException {
out.attribute(null, ATTR_ID, String.valueOf(createTime));
out.attribute(null, ATTR_LAUNCHEDFROMUID, String.valueOf(launchedFromUid));
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index beeadac..abcaa24 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -61,8 +61,6 @@
import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.am.ActivityRecord.APPLICATION_ACTIVITY_TYPE;
import static com.android.server.am.ActivityRecord.HOME_ACTIVITY_TYPE;
-import static com.android.server.am.ActivityRecord.STARTING_WINDOW_REMOVED;
-import static com.android.server.am.ActivityRecord.STARTING_WINDOW_SHOWN;
import static com.android.server.am.ActivityStackSupervisor.FindTaskResult;
import static com.android.server.am.ActivityStackSupervisor.ON_TOP;
import static com.android.server.am.ActivityStackSupervisor.PRESERVE_WINDOWS;
@@ -739,7 +737,7 @@
task = topTask();
if (task != null) {
- mWindowManager.moveTaskToTop(task.taskId);
+ task.moveWindowContainerToTop(true /* includingParents */);
}
}
@@ -758,7 +756,7 @@
mTaskHistory.remove(task);
mTaskHistory.add(0, task);
updateTaskMovement(task, false);
- mWindowManager.moveTaskToBottom(task.taskId);
+ task.moveWindowContainerToBottom();
}
}
@@ -1392,24 +1390,6 @@
return null;
}
- ActivityStack getNextFocusableStackLocked() {
- ArrayList<ActivityStack> stacks = mStacks;
- final ActivityRecord parent = mActivityContainer.mParentActivity;
- if (parent != null) {
- stacks = parent.getStack().mStacks;
- }
- if (stacks != null) {
- for (int i = stacks.size() - 1; i >= 0; --i) {
- ActivityStack stack = stacks.get(i);
- if (stack != this && stack.isFocusable()
- && stack.getStackVisibilityLocked(null) != STACK_INVISIBLE) {
- return stack;
- }
- }
- }
- return null;
- }
-
/** Returns true if the stack contains a fullscreen task. */
private boolean hasFullscreenTask() {
for (int i = mTaskHistory.size() - 1; i >= 0; --i) {
@@ -2046,15 +2026,7 @@
continue;
}
- if (r.state == ActivityState.INITIALIZING
- && r.mStartingWindowState == STARTING_WINDOW_SHOWN
- && behindFullscreenActivity) {
- if (DEBUG_VISIBILITY) Slog.w(TAG_VISIBILITY,
- "Found orphaned starting window " + r);
- r.mStartingWindowState = STARTING_WINDOW_REMOVED;
- mWindowManager.removeAppStartingWindow(r.appToken);
- }
-
+ r.removeOrphanedStartingWindow(behindFullscreenActivity);
behindFullscreenActivity |= r.fullscreen;
}
}
@@ -2108,9 +2080,15 @@
return false;
}
- ActivityRecord parent = mActivityContainer.mParentActivity;
- if ((parent != null && parent.state != ActivityState.RESUMED) ||
- !mActivityContainer.isAttachedLocked()) {
+ // Find the topmost activity in this stack that is not finishing.
+ final ActivityRecord next = topRunningActivityLocked();
+
+ final boolean hasRunningActivity = next != null;
+
+ final ActivityRecord parent = mActivityContainer.mParentActivity;
+ final boolean isParentNotResumed = parent != null && parent.state != ActivityState.RESUMED;
+ if (hasRunningActivity
+ && (isParentNotResumed || !mActivityContainer.isAttachedLocked())) {
// Do not resume this stack if its parent is not resumed.
// TODO: If in a loop, make sure that parent stack resumeTopActivity is called 1st.
return false;
@@ -2118,33 +2096,14 @@
mStackSupervisor.cancelInitializingActivities();
- // Find the first activity that is not finishing.
- final ActivityRecord next = topRunningActivityLocked();
-
// Remember how we'll process this pause/resume situation, and ensure
// that the state is reset however we wind up proceeding.
final boolean userLeaving = mStackSupervisor.mUserLeaving;
mStackSupervisor.mUserLeaving = false;
- final TaskRecord prevTask = prev != null ? prev.task : null;
- if (next == null) {
- // There are no more activities!
- final String reason = "noMoreActivities";
- if (!mFullscreen && adjustFocusToNextFocusableStackLocked(reason)) {
- // Try to move focus to the next visible stack with a running activity if this
- // stack is not covering the entire screen.
- return mStackSupervisor.resumeFocusedStackTopActivityLocked(
- mStackSupervisor.getFocusedStack(), prev, null);
- }
-
- // Let's just start up the Launcher...
- ActivityOptions.abort(options);
- if (DEBUG_STATES) Slog.d(TAG_STATES,
- "resumeTopActivityLocked: No more activities go home");
- if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked();
- // Only resume home if on home display
- return isOnHomeDisplay() &&
- mStackSupervisor.resumeHomeStackTask(prev, reason);
+ if (!hasRunningActivity) {
+ // There are no activities left in the stack, let's look somewhere else.
+ return resumeTopActivityInNextFocusableStack(prev, options, "noMoreActivities");
}
next.delayedResume = false;
@@ -2162,6 +2121,7 @@
}
final TaskRecord nextTask = next.task;
+ final TaskRecord prevTask = prev != null ? prev.task : null;
if (prevTask != null && prevTask.getStack() == this &&
prevTask.isOverHomeStack() && prev.finishing && prev.frontOfTask) {
if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked();
@@ -2287,7 +2247,7 @@
// previous should actually be hidden depending on whether the
// new one is found to be full-screen or not.
if (prev.finishing) {
- mWindowManager.setAppVisibility(prev.appToken, false);
+ prev.setVisibility(false);
if (DEBUG_SWITCH) Slog.v(TAG_SWITCH,
"Not waiting for visible to hide: " + prev + ", waitingVisible="
+ mStackSupervisor.mWaitingVisibleActivities.contains(prev)
@@ -2329,7 +2289,7 @@
? TRANSIT_ACTIVITY_CLOSE
: TRANSIT_TASK_CLOSE, false);
}
- mWindowManager.setAppVisibility(prev.appToken, false);
+ prev.setVisibility(false);
} else {
if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION,
"Prepare open transition: prev=" + prev);
@@ -2384,7 +2344,7 @@
// This activity is now becoming visible.
if (!next.visible || next.stopped || lastActivityTranslucent) {
- mWindowManager.setAppVisibility(next.appToken, true);
+ next.setVisibility(true);
}
// schedule launch ticks to collect information about slow apps.
@@ -2433,7 +2393,7 @@
mStackSupervisor.scheduleResumeTopActivities();
}
if (!next.visible || next.stopped) {
- mWindowManager.setAppVisibility(next.appToken, true);
+ next.setVisibility(true);
}
next.completeResumeLocked();
if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked();
@@ -2471,7 +2431,7 @@
// Well the app will no longer be stopped.
// Clear app token stopped state in window manager if needed.
- mWindowManager.notifyAppResumed(next.appToken, next.stopped, allowSavedSurface);
+ next.notifyAppResumed(next.stopped, allowSavedSurface);
EventLog.writeEvent(EventLogTags.AM_RESUME_ACTIVITY, next.userId,
System.identityHashCode(next), next.task.taskId, next.shortComponentName);
@@ -2499,7 +2459,8 @@
next.hasBeenLaunched = true;
} else if (SHOW_APP_STARTING_PREVIEW && lastStack != null &&
mStackSupervisor.isFrontStack(lastStack)) {
- next.showStartingWindow(null, true);
+ next.showStartingWindow(null /* prev */, false /* newTask */,
+ false /* taskSwitch */);
}
mStackSupervisor.startSpecificActivityLocked(next, true, false);
if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked();
@@ -2525,7 +2486,8 @@
next.hasBeenLaunched = true;
} else {
if (SHOW_APP_STARTING_PREVIEW) {
- next.showStartingWindow(null, true);
+ next.showStartingWindow(null /* prev */, false /* newTask */,
+ false /* taskSwich */);
}
if (DEBUG_SWITCH) Slog.v(TAG_SWITCH, "Restarting: " + next);
}
@@ -2537,6 +2499,27 @@
return true;
}
+ private boolean resumeTopActivityInNextFocusableStack(ActivityRecord prev,
+ ActivityOptions options, String reason) {
+ if ((!mFullscreen || !isOnHomeDisplay())
+ && adjustFocusToNextFocusableStackLocked(reason)) {
+ // Try to move focus to the next visible stack with a running activity if this
+ // stack is not covering the entire screen or is on a secondary display (with no home
+ // stack).
+ return mStackSupervisor.resumeFocusedStackTopActivityLocked(
+ mStackSupervisor.getFocusedStack(), prev, null);
+ }
+
+ // Let's just start up the Launcher...
+ ActivityOptions.abort(options);
+ if (DEBUG_STATES) Slog.d(TAG_STATES,
+ "resumeTopActivityInNextFocusableStack: " + reason + ", go home");
+ if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked();
+ // Only resume home if on home display
+ return isOnHomeDisplay() &&
+ mStackSupervisor.resumeHomeStackTask(prev, reason);
+ }
+
private TaskRecord getNextTask(TaskRecord targetTask) {
final int index = mTaskHistory.indexOf(targetTask);
if (index >= 0) {
@@ -2576,10 +2559,16 @@
position = Math.min(position, maxPosition);
mTaskHistory.remove(task);
mTaskHistory.add(position, task);
+ task.positionWindowContainerAt(mStackId, position);
updateTaskMovement(task, true);
}
private void insertTaskAtTop(TaskRecord task, ActivityRecord newActivity) {
+ insertTaskAtTop(task, newActivity, true /* allowStackOnTop */);
+ }
+
+ private void insertTaskAtTop(TaskRecord task, ActivityRecord newActivity,
+ boolean allowStackOnTop) {
boolean isLastTaskOverHome = false;
// If the moving task is over home stack, transfer its return type to next task
if (task.isOverHomeStack()) {
@@ -2638,7 +2627,7 @@
}
mTaskHistory.add(taskNdx, task);
updateTaskMovement(task, true);
- mWindowManager.moveTaskToTop(task.taskId);
+ task.moveWindowContainerToTop(allowStackOnTop /* includingParents */);
}
final void startActivityLocked(ActivityRecord r, ActivityRecord focusedTopActivity,
@@ -2669,9 +2658,7 @@
if (!startIt) {
if (DEBUG_ADD_REMOVE) Slog.i(TAG, "Adding activity " + r + " to task "
+ task, new RuntimeException("here").fillInStackTrace());
- task.addActivityToTop(r);
- r.putInHistory();
- addConfigOverride(r, task);
+ r.createWindowContainer();
ActivityOptions.abort(options);
return;
}
@@ -2682,12 +2669,10 @@
}
}
- // Place a new activity at top of stack, so it is next to interact
- // with the user.
+ // Place a new activity at top of stack, so it is next to interact with the user.
- // If we are not placing the new activity frontmost, we do not want
- // to deliver the onUserLeaving callback to the actual frontmost
- // activity
+ // If we are not placing the new activity frontmost, we do not want to deliver the
+ // onUserLeaving callback to the actual frontmost activity
if (task == r.task && mTaskHistory.indexOf(task) != (mTaskHistory.size() - 1)) {
mStackSupervisor.mUserLeaving = false;
if (DEBUG_USER_LEAVING) Slog.v(TAG_USER_LEAVING,
@@ -2699,22 +2684,10 @@
// Slot the activity into the history stack and proceed
if (DEBUG_ADD_REMOVE) Slog.i(TAG, "Adding activity " + r + " to stack to task " + task,
new RuntimeException("here").fillInStackTrace());
- task.addActivityToTop(r);
+ r.createWindowContainer();
task.setFrontOfTask();
- r.putInHistory();
if (!isHomeOrRecentsStack() || numActivities() > 0) {
- // We want to show the starting preview window if we are
- // switching to a new task, or the next activity's process is
- // not currently running.
- boolean showStartingIcon = newTask;
- ProcessRecord proc = r.app;
- if (proc == null) {
- proc = mService.mProcessNames.get(r.processName, r.info.applicationInfo.uid);
- }
- if (proc == null || proc.thread == null) {
- showStartingIcon = true;
- }
if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION,
"Prepare open transition: starting " + r);
if ((r.intent.getFlags() & Intent.FLAG_ACTIVITY_NO_ANIMATION) != 0) {
@@ -2737,7 +2710,6 @@
mWindowManager.prepareAppTransition(transit, keepCurTransition);
mNoAnimActivities.remove(r);
}
- addConfigOverride(r, task);
boolean doShow = true;
if (newTask) {
// Even though this activity is starting fresh, we still need
@@ -2756,7 +2728,7 @@
if (r.mLaunchTaskBehind) {
// Don't do a starting window for mLaunchTaskBehind. More importantly make sure we
// tell WindowManager that r is visible even though it is at the back of the stack.
- mWindowManager.setAppVisibility(r.appToken, true);
+ r.setVisibility(true);
ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
} else if (SHOW_APP_STARTING_PREVIEW && doShow) {
// Figure out if we are transitioning from another activity that is
@@ -2775,16 +2747,20 @@
prev = null;
}
}
- r.showStartingWindow(prev, showStartingIcon);
+ r.showStartingWindow(prev, newTask, isTaskSwitch(r, focusedTopActivity));
}
} else {
// If this is the first activity, don't do any fancy animations,
// because there is nothing for it to animate on top of.
- addConfigOverride(r, task);
ActivityOptions.abort(options);
}
}
+ private boolean isTaskSwitch(ActivityRecord r,
+ ActivityRecord topFocusedActivity) {
+ return topFocusedActivity != null && r.task != topFocusedActivity.task;
+ }
+
/**
* Perform a reset of the given task, if needed as part of launching it.
* Returns the new HistoryRecord at the top of the task.
@@ -2865,8 +2841,6 @@
+ " out to new task " + target.task);
}
- setAppTask(target, targetTask);
-
boolean noOptions = canMoveOptions;
final int start = replyChainEnd < 0 ? i : replyChainEnd;
for (int srcPos = start; srcPos >= i; --srcPos) {
@@ -2889,11 +2863,9 @@
"Pushing next activity " + p + " out to target's task " + target.task);
p.setTask(targetTask, null);
targetTask.addActivityAtBottom(p);
-
- setAppTask(p, targetTask);
}
- mWindowManager.moveTaskToBottom(targetTask.taskId);
+ targetTask.moveWindowContainerToBottom();
replyChainEnd = -1;
} else if (forceReset || finishOnTaskLaunch || clearWhenTaskReset) {
// If the activity should just be removed -- either
@@ -3028,9 +3000,8 @@
+ " callers=" + Debug.getCallers(3));
if (DEBUG_TASKS) Slog.v(TAG_TASKS, "Pulling activity " + p
+ " from " + srcPos + " in to resetting task " + task);
- setAppTask(p, task);
}
- mWindowManager.moveTaskToTop(taskId);
+ task.moveWindowContainerToTop(true /* includingParents */);
// Now we've moved it in to place... but what if this is
// a singleTop activity and we have put it on top of another
@@ -3173,7 +3144,7 @@
}
private boolean adjustFocusToNextFocusableStackLocked(String reason) {
- final ActivityStack stack = getNextFocusableStackLocked();
+ final ActivityStack stack = mStackSupervisor.getNextFocusableStackLocked(this);
final String myReason = reason + " adjustFocusToNextFocusableStack";
if (stack == null) {
return false;
@@ -3223,7 +3194,7 @@
if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY,
"Stopping visible=" + r.visible + " for " + r);
if (!r.visible) {
- mWindowManager.setAppVisibility(r.appToken, false);
+ r.setVisibility(false);
}
EventLogTags.writeAmStopActivity(
r.userId, System.identityHashCode(r), r.shortComponentName);
@@ -3457,7 +3428,7 @@
mWindowManager.prepareAppTransition(transit, false);
// Tell window manager to prepare for this one to be removed.
- mWindowManager.setAppVisibility(r.appToken, false);
+ r.setVisibility(false);
if (mPausingActivity == null) {
if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Finish needs to pause: " + r);
@@ -3475,7 +3446,7 @@
if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Finish not pausing: " + r);
if (r.visible) {
mWindowManager.prepareAppTransition(transit, false);
- mWindowManager.setAppVisibility(r.appToken, false);
+ r.setVisibility(false);
mWindowManager.executeAppTransition();
if (!mStackSupervisor.mWaitingVisibleActivities.contains(r)) {
mStackSupervisor.mWaitingVisibleActivities.add(r);
@@ -3782,7 +3753,7 @@
r.state = ActivityState.DESTROYED;
if (DEBUG_APP) Slog.v(TAG_APP, "Clearing app during remove for activity " + r);
r.app = null;
- mWindowManager.removeAppToken(r.appToken, r.getDisplayId());
+ r.removeWindowContainer();
final TaskRecord task = r.task;
if (task != null && task.removeActivity(r)) {
if (DEBUG_STACK) Slog.i(TAG_STACK,
@@ -4399,7 +4370,7 @@
}
mWindowManager.prepareAppTransition(TRANSIT_TASK_TO_BACK, false);
- mWindowManager.moveTaskToBottom(taskId);
+ tr.moveWindowContainerToBottom();
final TaskRecord task = mResumedActivity != null ? mResumedActivity.task : null;
if (prevIsHome || (task == tr && canGoHome) || (numTasks <= 1 && isOnHomeDisplay())) {
@@ -4831,14 +4802,7 @@
*/
void removeTask(TaskRecord task, String reason, int mode) {
if (mode == REMOVE_TASK_MODE_DESTROYING) {
- mStackSupervisor.removeLockedTaskLocked(task);
- mWindowManager.removeTask(task.taskId);
- if (!StackId.persistTaskBounds(mStackId)) {
- // Reset current bounds for task whose bounds shouldn't be persisted so it uses
- // default configuration the next time it launches.
- task.updateOverrideConfiguration(null);
- }
- mService.mTaskChangeNotificationController.notifyTaskRemoved(task.taskId);
+ task.removeWindowContainer();
}
final ActivityRecord r = mResumedActivity;
@@ -4910,11 +4874,7 @@
&& !isLockscreenShown) {
task.updateOverrideConfiguration(mBounds);
}
- final Rect bounds = task.updateOverrideConfigurationFromLaunchBounds();
- final boolean showForAllUsers = (info.flags & FLAG_SHOW_FOR_ALL_USERS) != 0;
- mWindowManager.addTask(taskId, mStackId, task.userId, bounds,
- task.getOverrideConfiguration(), task.mResizeMode, task.isHomeTask(),
- task.isOnTopLauncher(), toTop, showForAllUsers);
+ task.createWindowContainer(toTop, (info.flags & FLAG_SHOW_FOR_ALL_USERS) != 0);
return task;
}
@@ -4931,11 +4891,16 @@
}
void addTask(final TaskRecord task, final boolean toTop, String reason) {
+ addTask(task, toTop, reason, true /* allowStackOnTop */);
+ }
+
+ void addTask(final TaskRecord task, final boolean toTop, String reason,
+ boolean allowStackOnTop) {
final ActivityStack prevStack = preAddTask(task, reason, toTop);
task.setStack(this);
if (toTop) {
- insertTaskAtTop(task, null);
+ insertTaskAtTop(task, null, allowStackOnTop);
} else {
mTaskHistory.add(0, task);
updateTaskMovement(task, false);
@@ -4943,13 +4908,20 @@
postAddTask(task, prevStack);
}
- /** @see ActivityManagerService#positionTaskInStack(int, int, int). */
- void positionTask(final TaskRecord task, int position) {
+ void positionChildAt(int taskId, int index) {
+ final TaskRecord task = mStackSupervisor.anyTaskForIdLocked(taskId);
+ if (task == null) {
+ Slog.w(TAG, "positionTaskInStackLocked: no task for id=" + taskId);
+ return;
+ }
+
+ task.updateOverrideConfigurationForStack(this);
+
final ActivityRecord topRunningActivity = task.topRunningActivityLocked();
final boolean wasResumed = topRunningActivity == task.getStack().mResumedActivity;
final ActivityStack prevStack = preAddTask(task, "positionTask", !ON_TOP);
task.setStack(this);
- insertTaskAtPosition(task, position);
+ insertTaskAtPosition(task, index);
postAddTask(task, prevStack);
if (wasResumed) {
if (mResumedActivity != null) {
@@ -4959,6 +4931,11 @@
}
mResumedActivity = topRunningActivity;
}
+
+ // The task might have already been running and its visibility needs to be synchronized with
+ // the visibility of the stack / windows.
+ ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
+ mStackSupervisor.resumeFocusedStackTopActivityLocked();
}
private ActivityStack preAddTask(TaskRecord task, String reason, boolean toTop) {
@@ -4981,17 +4958,6 @@
}
}
- void addConfigOverride(ActivityRecord r, TaskRecord task) {
- task.updateOverrideConfigurationFromLaunchBounds();
- // TODO: VI deal with activity
- mWindowManager.addAppToken(task.mActivities.indexOf(r), r.appToken,
- r.task.taskId, r.info.screenOrientation, r.fullscreen,
- (r.info.flags & FLAG_SHOW_FOR_ALL_USERS) != 0, r.info.configChanges,
- task.voiceSession != null, r.mLaunchTaskBehind, r.isAlwaysFocusable(),
- r.appInfo.targetSdkVersion, r.mRotationAnimationHint);
- r.onOverrideConfigurationSent();
- }
-
void moveToFrontAndResumeStateIfNeeded(
ActivityRecord r, boolean moveToFront, boolean setResume, String reason) {
if (!moveToFront) {
@@ -5030,7 +4996,6 @@
r.info, r.intent, null, null, true, r.mActivityType);
r.setTask(task, null);
task.addActivityToTop(r);
- setAppTask(r, task);
mStackSupervisor.scheduleReportPictureInPictureModeChangedIfNeeded(task, prevStack);
moveToFrontAndResumeStateIfNeeded(r, wasFocused, wasResumed, "moveActivityToStack");
if (wasResumed) {
@@ -5038,12 +5003,6 @@
}
}
- private void setAppTask(ActivityRecord r, TaskRecord task) {
- task.updateOverrideConfigurationFromLaunchBounds();
- mWindowManager.addAppToTask(r.appToken, task.taskId);
- r.onOverrideConfigurationSent();
- }
-
public int getStackId() {
return mStackId;
}
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 028c571..8cf0708 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -33,7 +33,6 @@
import static android.app.ActivityManager.StackId.INVALID_STACK_ID;
import static android.app.ActivityManager.StackId.LAST_STATIC_STACK_ID;
import static android.app.ActivityManager.StackId.PINNED_STACK_ID;
-import static android.app.ActivityManager.StackId.RECENTS_STACK_ID;
import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
@@ -90,6 +89,8 @@
import static com.android.server.am.TaskRecord.LOCK_TASK_AUTH_PINNABLE;
import static com.android.server.am.TaskRecord.LOCK_TASK_AUTH_WHITELISTED;
import static com.android.server.wm.AppTransition.TRANSIT_DOCK_TASK_FROM_RECENTS;
+import static java.lang.Integer.MAX_VALUE;
+import static java.lang.Integer.MIN_VALUE;
import android.Manifest;
import android.annotation.NonNull;
@@ -176,11 +177,9 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
-import java.util.Objects;
import java.util.Set;
-public class ActivityStackSupervisor extends ConfigurationContainer
- implements DisplayListener {
+public class ActivityStackSupervisor extends ConfigurationContainer implements DisplayListener {
private static final String TAG = TAG_WITH_CLASS_NAME ? "ActivityStackSupervisor" : TAG_AM;
private static final String TAG_CONTAINERS = TAG + POSTFIX_CONTAINERS;
private static final String TAG_FOCUS = TAG + POSTFIX_FOCUS;
@@ -457,6 +456,13 @@
private final FindTaskResult mTmpFindTaskResult = new FindTaskResult();
/**
+ * Temp storage for display ids sorted in focus order.
+ * Maps position to id. Using {@link SparseIntArray} instead of {@link ArrayList} because
+ * it's more efficient, as the number of displays is usually small.
+ */
+ private SparseIntArray mTmpOrderedDisplayIds = new SparseIntArray();
+
+ /**
* Used to keep track whether app visibilities got changed since the last pause. Useful to
* determine whether to invoke the task stack change listener after pausing.
*/
@@ -639,7 +645,7 @@
void setFocusStackUnchecked(String reason, ActivityStack focusCandidate) {
if (!focusCandidate.isFocusable()) {
// The focus candidate isn't focusable. Move focus to the top stack that is focusable.
- focusCandidate = focusCandidate.getNextFocusableStackLocked();
+ focusCandidate = getNextFocusableStackLocked(focusCandidate);
}
if (focusCandidate != mFocusedStack) {
@@ -758,43 +764,52 @@
}
/**
- * TODO: Handle freefom mode.
- * @return true when credential confirmation is needed for the user and there is any
- * activity started by the user in any visible stack.
+ * Detects whether we should show a lock screen in front of this task for a locked user.
+ * <p>
+ * We'll do this if either of the following holds:
+ * <ul>
+ * <li>The top activity explicitly belongs to {@param userId}.</li>
+ * <li>The top activity returns a result to an activity belonging to {@param userId}.</li>
+ * </ul>
+ *
+ * @return {@code true} if the top activity looks like it belongs to {@param userId}.
*/
- boolean isUserLockedProfile(@UserIdInt int userId) {
- if (!mService.mUserController.shouldConfirmCredentials(userId)) {
- return false;
- }
- final ActivityStack fullScreenStack = getStack(FULLSCREEN_WORKSPACE_STACK_ID);
- final ActivityStack dockedStack = getStack(DOCKED_STACK_ID);
- final ActivityStack[] activityStacks = new ActivityStack[] {fullScreenStack, dockedStack};
- for (final ActivityStack activityStack : activityStacks) {
- if (activityStack == null) {
- continue;
- }
- if (activityStack.topRunningActivityLocked() == null) {
- continue;
- }
- if (activityStack.getStackVisibilityLocked(null) == STACK_INVISIBLE) {
- continue;
- }
- if (activityStack.isDockedStack() && mIsDockMinimized) {
- continue;
- }
- final TaskRecord topTask = activityStack.topTask();
- if (topTask == null) {
- continue;
- }
- // To handle the case that work app is in the task but just is not the top one.
- for (int i = topTask.mActivities.size() - 1; i >= 0; i--) {
- final ActivityRecord activityRecord = topTask.mActivities.get(i);
- if (activityRecord.userId == userId) {
- return true;
+ private boolean taskTopActivityIsUser(TaskRecord 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 resultTo = (activityRecord != null ? activityRecord.resultTo : null);
+
+ return (activityRecord != null && activityRecord.userId == userId)
+ || (resultTo != null && resultTo.userId == userId);
+ }
+
+ /**
+ * Find all visible task stacks containing {@param userId} and intercept them with an activity
+ * to block out the contents and possibly start a credential-confirming intent.
+ *
+ * @param userId user handle for the locked managed profile.
+ */
+ void lockAllProfileTasks(@UserIdInt int userId) {
+ mWindowManager.deferSurfaceLayout();
+ try {
+ final List<ActivityStack> stacks = getStacks();
+ for (int stackNdx = stacks.size() - 1; stackNdx >= 0; stackNdx--) {
+ final List<TaskRecord> tasks = stacks.get(stackNdx).getAllTasks();
+ for (int taskNdx = tasks.size() - 1; taskNdx >= 0; taskNdx--) {
+ final TaskRecord task = tasks.get(taskNdx);
+
+ // Check the task for a top activity belonging to userId, or returning a result
+ // to an activity belonging to userId. Example case: a document picker for
+ // personal files, opened by a work app, should still get locked.
+ if (taskTopActivityIsUser(task, userId)) {
+ mService.mTaskChangeNotificationController.notifyTaskProfileLocked(
+ task.taskId, userId);
+ }
}
}
+ } finally {
+ mWindowManager.continueSurfaceLayout();
}
- return false;
}
void setNextTaskIdForUserLocked(int taskId, int userId) {
@@ -1204,7 +1219,7 @@
if (andResume) {
r.startFreezingScreenLocked(app, 0);
- mWindowManager.setAppVisibility(r.appToken, true);
+ r.setVisibility(true);
// schedule launch ticks to collect information about slow apps.
r.startLaunchTickingLocked();
@@ -1227,7 +1242,7 @@
}
if (mKeyguardController.isKeyguardLocked()) {
- mWindowManager.notifyUnknownAppVisibilityLaunched(r.appToken);
+ r.notifyUnknownVisibilityLaunched();
}
r.app = app;
@@ -1918,7 +1933,7 @@
}
if (stackId != currentStack.mStackId) {
currentStack = moveTaskToStackUncheckedLocked(task, stackId, ON_TOP,
- !FORCE_FOCUS, reason);
+ !FORCE_FOCUS, reason, true /* allowStackOnTop */);
stackId = currentStack.mStackId;
// moveTaskToStackUncheckedLocked() should already placed the task on top,
// still need moveTaskToFrontLocked() below for any transition settings.
@@ -1931,9 +1946,7 @@
// WM resizeTask must be done after the task is moved to the correct stack,
// because Task's setBounds() also updates dim layer's bounds, but that has
// dependency on the stack.
- mWindowManager.resizeTask(task.taskId, task.mBounds,
- task.getOverrideConfiguration(), false /* relayout */,
- false /* forced */);
+ task.resizeWindowContainer();
}
}
}
@@ -2021,6 +2034,35 @@
return mActivityDisplays.valueAt(DEFAULT_DISPLAY).mStacks;
}
+ /**
+ * Get next focusable stack in the system. This will search across displays and stacks
+ * in last-focused order for a focusable and visible stack, different from the target stack.
+ *
+ * @param currentFocus The stack that previously had focus and thus needs to be ignored when
+ * searching for next candidate.
+ * @return Next focusable {@link ActivityStack}, null if not found.
+ */
+ ActivityStack getNextFocusableStackLocked(ActivityStack currentFocus) {
+ mWindowManager.getDisplaysInFocusOrder(mTmpOrderedDisplayIds);
+
+ for (int i = mTmpOrderedDisplayIds.size() - 1; i >= 0; --i) {
+ final int displayId = mTmpOrderedDisplayIds.get(i);
+ final List<ActivityStack> stacks = mActivityDisplays.get(displayId).mStacks;
+ if (stacks == null) {
+ continue;
+ }
+ for (int j = stacks.size() - 1; j >= 0; --j) {
+ final ActivityStack stack = stacks.get(j);
+ if (stack != currentFocus && stack.isFocusable()
+ && stack.getStackVisibilityLocked(null) != STACK_INVISIBLE) {
+ return stack;
+ }
+ }
+ }
+
+ return null;
+ }
+
ActivityRecord getHomeActivity() {
return getHomeActivityForUser(mCurrentUser);
}
@@ -2130,8 +2172,10 @@
continueUpdateBounds(HOME_STACK_ID);
for (int i = mResizingTasksDuringAnimation.size() - 1; i >= 0; i--) {
final int taskId = mResizingTasksDuringAnimation.valueAt(i);
- if (anyTaskForIdLocked(taskId, !RESTORE_FROM_RECENTS, INVALID_STACK_ID) != null) {
- mWindowManager.setTaskDockedResizing(taskId, false);
+ final TaskRecord task =
+ anyTaskForIdLocked(taskId, !RESTORE_FROM_RECENTS, INVALID_STACK_ID);
+ if (task != null) {
+ task.setTaskDockedResizing(false);
}
}
mResizingTasksDuringAnimation.clear();
@@ -2177,7 +2221,7 @@
// display because it no longer contains any tasks.
mAllowDockedStackResize = false;
}
- final ActivityStack fullscreenStack = getStack(FULLSCREEN_WORKSPACE_STACK_ID);
+ ActivityStack fullscreenStack = getStack(FULLSCREEN_WORKSPACE_STACK_ID);
final boolean isFullscreenStackVisible = fullscreenStack != null &&
fullscreenStack.getStackVisibilityLocked(null) == STACK_VISIBLE;
final ArrayList<TaskRecord> tasks = stack.getAllTasks();
@@ -2194,15 +2238,18 @@
}
moveTaskToStackLocked(tasks.get(i).taskId,
FULLSCREEN_WORKSPACE_STACK_ID, onTop, onTop /*forceFocus*/,
- "moveTasksToFullscreenStack", ANIMATE, DEFER_RESUME);
+ "moveTasksToFullscreenStack - onTop", ANIMATE, DEFER_RESUME,
+ true /* allowStackOnTop */);
}
ensureActivitiesVisibleLocked(null, 0, PRESERVE_WINDOWS);
resumeFocusedStackTopActivityLocked();
} else {
- for (int i = size - 1; i >= 0; i--) {
- positionTaskInStackLocked(tasks.get(i).taskId,
- FULLSCREEN_WORKSPACE_STACK_ID, 0 /* position */);
+ for (int i = 0; i < size; i++) {
+ moveTaskToStackLocked(tasks.get(i).taskId, FULLSCREEN_WORKSPACE_STACK_ID,
+ true /* onTop */, false /* forceFocus */,
+ "moveTasksToFullscreenStack - NOT_onTop", !ANIMATE, DEFER_RESUME,
+ false /* allowStackOnTop */);
}
}
} finally {
@@ -2303,71 +2350,6 @@
}
}
- boolean resizeTaskLocked(TaskRecord task, Rect bounds, int resizeMode, boolean preserveWindow,
- boolean deferResume) {
- if (!task.isResizeable()) {
- Slog.w(TAG, "resizeTask: task " + task + " not resizeable.");
- return true;
- }
-
- // If this is a forced resize, let it go through even if the bounds is not changing,
- // as we might need a relayout due to surface size change (to/from fullscreen).
- final boolean forced = (resizeMode & RESIZE_MODE_FORCED) != 0;
- if (Objects.equals(task.mBounds, bounds) && !forced) {
- // Nothing to do here...
- return true;
- }
- bounds = TaskRecord.validateBounds(bounds);
-
- if (!mWindowManager.isValidTaskId(task.taskId)) {
- // Task doesn't exist in window manager yet (e.g. was restored from recents).
- // All we can do for now is update the bounds so it can be used when the task is
- // added to window manager.
- task.updateOverrideConfiguration(bounds);
- if (task.getStackId() != FREEFORM_WORKSPACE_STACK_ID) {
- // re-restore the task so it can have the proper stack association.
- restoreRecentTaskLocked(task, FREEFORM_WORKSPACE_STACK_ID);
- }
- return true;
- }
-
- if (!task.canResizeToBounds(bounds)) {
- throw new IllegalArgumentException("resizeTaskLocked: Can not resize task=" + task
- + " to bounds=" + bounds + " resizeMode=" + task.mResizeMode);
- }
-
- // Do not move the task to another stack here.
- // This method assumes that the task is already placed in the right stack.
- // we do not mess with that decision and we only do the resize!
-
- Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "am.resizeTask_" + task.taskId);
-
- final boolean updatedConfig = task.updateOverrideConfiguration(bounds);
- // This variable holds information whether the configuration didn't change in a significant
- // way and the activity was kept the way it was. If it's false, it means the activity had
- // to be relaunched due to configuration change.
- boolean kept = true;
- if (updatedConfig) {
- final ActivityRecord r = task.topRunningActivityLocked();
- if (r != null) {
- kept = r.ensureActivityConfigurationLocked(0 /* globalChanges */, preserveWindow);
-
- if (!deferResume) {
- // All other activities must be made visible with their correct configuration.
- ensureActivitiesVisibleLocked(r, 0, !PRESERVE_WINDOWS);
- if (!kept) {
- resumeFocusedStackTopActivityLocked();
- }
- }
- }
- }
- mWindowManager.resizeTask(task.taskId, task.mBounds, task.getOverrideConfiguration(), kept,
- forced);
-
- Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
- return kept;
- }
-
ActivityStack createStackOnDisplay(int stackId, int displayId, boolean onTop) {
ActivityDisplay activityDisplay = mActivityDisplays.get(displayId);
if (activityDisplay == null) {
@@ -2381,7 +2363,7 @@
}
/**
- * Removes the stack associed with the given {@param stackId}. If the {@param stackId} is the
+ * Removes the stack associated with the given {@param stackId}. If the {@param stackId} is the
* pinned stack, then its tasks are not explicitly removed when the stack is destroyed, but
* instead moved back onto the fullscreen stack.
*/
@@ -2403,8 +2385,7 @@
final int insertPosition = isFullscreenStackVisible
? Math.max(0, fullscreenStack.getChildCount() - 1)
: fullscreenStack.getChildCount();
- positionTaskInStackLocked(tasks.get(i).taskId, FULLSCREEN_WORKSPACE_STACK_ID,
- insertPosition);
+ fullscreenStack.positionChildAt(tasks.get(i).taskId, insertPosition);
}
ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
resumeFocusedStackTopActivityLocked();
@@ -2534,7 +2515,7 @@
* or is not a static stack).
* @return true if the task has been restored successfully.
*/
- private boolean restoreRecentTaskLocked(TaskRecord task, int stackId) {
+ boolean restoreRecentTaskLocked(TaskRecord task, int stackId) {
if (!StackId.isStaticStack(stackId)) {
// If stack is not static (or stack id is invalid) - use the default one.
// This means that tasks that were on external displays will be restored on the
@@ -2569,15 +2550,13 @@
}
stack.addTask(task, false /* toTop */, "restoreRecentTask");
- final Rect bounds = task.updateOverrideConfigurationFromLaunchBounds();
- mWindowManager.addTask(task.taskId, stack.mStackId, task.userId, bounds,
- task.getOverrideConfiguration(), task.mResizeMode, task.isHomeTask(),
- task.isOnTopLauncher(), false /* toTop */, true /* showForAllUsers */);
+ // TODO: move call for creation here and other place into Stack.addTask()
+ task.createWindowContainer(false /* toTop */, true /* showForAllUsers */);
if (DEBUG_RECENTS) Slog.v(TAG_RECENTS,
"Added restored task=" + task + " to stack=" + stack);
final ArrayList<ActivityRecord> activities = task.mActivities;
for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) {
- stack.addConfigOverride(activities.get(activityNdx), task);
+ activities.get(activityNdx).createWindowContainer();
}
return true;
}
@@ -2626,10 +2605,13 @@
* @param toTop True if the task should be placed at the top of the stack.
* @param forceFocus if focus should be moved to the new stack
* @param reason Reason the task is been moved.
+ * @param allowStackOnTop If stack movement should be moved to the top due to the addition of
+ * the task to the stack. E.g. Moving the stack to the front because it
+ * should be focused because it now contains the focused activity.
* @return The stack the task was moved to.
*/
- ActivityStack moveTaskToStackUncheckedLocked(
- TaskRecord task, int stackId, boolean toTop, boolean forceFocus, String reason) {
+ ActivityStack moveTaskToStackUncheckedLocked(TaskRecord task, int stackId, boolean toTop,
+ boolean forceFocus, String reason, boolean allowStackOnTop) {
if (StackId.isMultiWindowStack(stackId) && !mService.mSupportsMultiWindow) {
throw new IllegalStateException("moveTaskToStackUncheckedLocked: Device doesn't "
@@ -2660,15 +2642,15 @@
// if a docked stack is created below which will lead to the stack we are moving from and
// its resizeable tasks being resized.
task.mTemporarilyUnresizable = true;
- final ActivityStack stack = getStack(stackId, CREATE_IF_NEEDED, toTop);
+ final ActivityStack stack = getStack(stackId, CREATE_IF_NEEDED, toTop && allowStackOnTop);
task.mTemporarilyUnresizable = false;
- mWindowManager.moveTaskToStack(task.taskId, stack.mStackId, toTop);
- stack.addTask(task, toTop, reason);
+ task.reparentWindowContainer(stack.mStackId, toTop ? MAX_VALUE : MIN_VALUE);
+ stack.addTask(task, toTop, reason, allowStackOnTop);
// If the task had focus before (or we're requested to move focus),
// move focus to the new stack by moving the stack to the front.
stack.moveToFrontAndResumeStateIfNeeded(
- r, forceFocus || wasFocused || wasFront, wasResumed, reason);
+ r, allowStackOnTop && (forceFocus || wasFocused || wasFront), wasResumed, reason);
return stack;
}
@@ -2676,11 +2658,11 @@
boolean moveTaskToStackLocked(int taskId, int stackId, boolean toTop, boolean forceFocus,
String reason, boolean animate) {
return moveTaskToStackLocked(taskId, stackId, toTop, forceFocus, reason, animate,
- false /* deferResume */);
+ false /* deferResume */, true /* allowStackOnTop */);
}
boolean moveTaskToStackLocked(int taskId, int stackId, boolean toTop, boolean forceFocus,
- String reason, boolean animate, boolean deferResume) {
+ String reason, boolean animate, boolean deferResume, boolean allowStackOnTop) {
final TaskRecord task = anyTaskForIdLocked(taskId);
if (task == null) {
Slog.w(TAG, "moveTaskToStack: no task for id=" + taskId);
@@ -2720,7 +2702,7 @@
boolean kept = true;
try {
final ActivityStack stack = moveTaskToStackUncheckedLocked(
- task, stackId, toTop, forceFocus, reason + " moveTaskToStack");
+ task, stackId, toTop, forceFocus, reason + " moveTaskToStack", allowStackOnTop);
stackId = stack.mStackId;
if (!animate) {
@@ -2732,19 +2714,18 @@
// Make sure the task has the appropriate bounds/size for the stack it is in.
if (stackId == FULLSCREEN_WORKSPACE_STACK_ID && task.mBounds != null) {
- kept = resizeTaskLocked(task, stack.mBounds, RESIZE_MODE_SYSTEM,
- !mightReplaceWindow, deferResume);
+ kept = task.resize(stack.mBounds, RESIZE_MODE_SYSTEM, !mightReplaceWindow,
+ deferResume);
} else if (stackId == FREEFORM_WORKSPACE_STACK_ID) {
Rect bounds = task.getLaunchBounds();
if (bounds == null) {
stack.layoutTaskInStack(task, null);
bounds = task.mBounds;
}
- kept = resizeTaskLocked(task, bounds, RESIZE_MODE_FORCED, !mightReplaceWindow,
- deferResume);
+ kept = task.resize(bounds, RESIZE_MODE_FORCED, !mightReplaceWindow, deferResume);
} else if (stackId == DOCKED_STACK_ID || stackId == PINNED_STACK_ID) {
- kept = resizeTaskLocked(task, stack.mBounds, RESIZE_MODE_SYSTEM,
- !mightReplaceWindow, deferResume);
+ kept = task.resize(stack.mBounds, RESIZE_MODE_SYSTEM, !mightReplaceWindow,
+ deferResume);
}
} finally {
mWindowManager.continueSurfaceLayout();
@@ -2874,28 +2855,6 @@
return true;
}
- /** @see ActivityManagerService#positionTaskInStack(int, int, int). */
- void positionTaskInStackLocked(int taskId, int stackId, int position) {
- final TaskRecord task = anyTaskForIdLocked(taskId);
- if (task == null) {
- Slog.w(TAG, "positionTaskInStackLocked: no task for id=" + taskId);
- return;
- }
- final ActivityStack stack = getStack(stackId, CREATE_IF_NEEDED, !ON_TOP);
-
- task.updateOverrideConfigurationForStack(stack);
-
- // TODO: Return final position from WM for AM to use instead of duplicating computations in
- // ActivityStack#insertTaskAtPosition.
- mWindowManager.positionTaskInStack(
- taskId, stackId, position, task.mBounds, task.getOverrideConfiguration());
- stack.positionTask(task, position);
- // The task might have already been running and its visibility needs to be synchronized with
- // the visibility of the stack / windows.
- stack.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
- resumeFocusedStackTopActivityLocked();
- }
-
ActivityRecord findTaskLocked(ActivityRecord r) {
mTmpFindTaskResult.r = null;
mTmpFindTaskResult.matchedByRootAffinity = false;
@@ -3169,7 +3128,7 @@
task.setLastThumbnailLocked(r.screenshotActivityLocked());
mRecentTasks.addLocked(task);
mService.mTaskChangeNotificationController.notifyTaskStackChanged();
- mWindowManager.setAppVisibility(r.appToken, false);
+ r.setVisibility(false);
// When launching tasks behind, update the last active time of the top task after the new
// task has been shown briefly
@@ -3301,6 +3260,10 @@
final int focusStackId = mFocusedStack.getStackId();
// We dismiss the docked stack whenever we switch users.
moveTasksToFullscreenStackLocked(DOCKED_STACK_ID, focusStackId == DOCKED_STACK_ID);
+ // Also dismiss the pinned stack whenever we switch users. Removing the pinned stack will
+ // also cause all tasks to be moved to the fullscreen stack at a position that is
+ // appropriate.
+ removeStackLocked(PINNED_STACK_ID);
mUserStackInFront.put(mCurrentUser, focusStackId);
final int restoreStackId = mUserStackInFront.get(userId, HOME_STACK_ID);
@@ -3314,7 +3277,7 @@
stack.switchUserLocked(userId);
TaskRecord task = stack.topTask();
if (task != null) {
- mWindowManager.moveTaskToTop(task.taskId);
+ task.moveWindowContainerToTop(true /* includingParents */);
}
}
}
@@ -3360,7 +3323,7 @@
// normal flow and hide it once we determine that it is
// hidden by the activities in front of it.
if (DEBUG_STATES) Slog.v(TAG, "Before stopping, can hide: " + s);
- mWindowManager.setAppVisibility(s.appToken, false);
+ s.setVisibility(false);
}
}
if ((!waitingVisible || mService.isSleepingOrShuttingDownLocked()) && remove) {
@@ -3775,7 +3738,7 @@
: task.getTopActivity() != null ? task.getTopActivity().packageName
: "unknown";
taskBounds[i] = new Rect();
- mWindowManager.getTaskBounds(task.taskId, taskBounds[i]);
+ task.getWindowContainerBounds(taskBounds[i]);
taskUserIds[i] = task.userId;
}
info.taskIds = taskIds;
@@ -4730,11 +4693,11 @@
/**
* Puts a task into resizing mode during the next app transition.
*
- * @param taskId the id of the task to put into resizing mode
+ * @param task The task to put into resizing mode
*/
- private void setResizingDuringAnimation(int taskId) {
- mResizingTasksDuringAnimation.add(taskId);
- mWindowManager.setTaskDockedResizing(taskId, true);
+ private void setResizingDuringAnimation(TaskRecord task) {
+ mResizingTasksDuringAnimation.add(task.taskId);
+ task.setTaskDockedResizing(true);
}
final int startActivityFromRecentsInner(int taskId, Bundle bOptions) {
@@ -4799,7 +4762,7 @@
// the window renders full-screen with the background filling the void. Also only
// call this at the end to make sure that tasks exists on the window manager side.
if (launchStackId == DOCKED_STACK_ID) {
- setResizingDuringAnimation(taskId);
+ setResizingDuringAnimation(task);
}
mService.mActivityStarter.postStartActivityUncheckedProcessing(task.getTopActivity(),
@@ -4816,7 +4779,7 @@
int result = mService.startActivityInPackage(callingUid, callingPackage, intent, null,
null, null, 0, 0, bOptions, userId, null, task);
if (launchStackId == DOCKED_STACK_ID) {
- setResizingDuringAnimation(task.taskId);
+ setResizingDuringAnimation(task);
}
return result;
}
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java
index 3bb9ccc..f401863 100644
--- a/services/core/java/com/android/server/am/ActivityStarter.java
+++ b/services/core/java/com/android/server/am/ActivityStarter.java
@@ -31,8 +31,8 @@
import static android.app.ActivityManager.StackId.HOME_STACK_ID;
import static android.app.ActivityManager.StackId.INVALID_STACK_ID;
import static android.app.ActivityManager.StackId.PINNED_STACK_ID;
-import static android.app.ActivityManager.StackId.isStaticStack;
import static android.app.ActivityManager.StackId.RECENTS_STACK_ID;
+import static android.app.ActivityManager.StackId.isStaticStack;
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK;
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
@@ -53,7 +53,6 @@
import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_TASK;
import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_TOP;
import static android.view.Display.INVALID_DISPLAY;
-
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_CONFIGURATION;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_FOCUS;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_PERMISSIONS_REVIEW;
@@ -106,7 +105,6 @@
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
-import android.os.PowerManagerInternal;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.UserHandle;
@@ -949,14 +947,18 @@
}
void sendPowerHintForLaunchStartIfNeeded(boolean forceSend) {
- // Trigger launch power hint if activity being launched is not in the current task
- final ActivityStack focusStack = mSupervisor.getFocusedStack();
- final ActivityRecord curTop = (focusStack == null)
- ? null : focusStack.topRunningNonDelayedActivityLocked(mNotTop);
- if ((forceSend || (!mPowerHintSent && curTop != null &&
- curTop.task != null && mStartActivity != null &&
- curTop.task != mStartActivity.task )) &&
- mService.mLocalPowerManager != null) {
+ boolean sendHint = forceSend;
+
+ if (!sendHint) {
+ // If not forced, send power hint when the activity's process is different than the
+ // current resumed activity.
+ final ActivityRecord resumedActivity = mSupervisor.getResumedActivityLocked();
+ sendHint = resumedActivity == null
+ || resumedActivity.app == null
+ || !resumedActivity.app.equals(mStartActivity.app);
+ }
+
+ if (sendHint && mService.mLocalPowerManager != null) {
mService.mLocalPowerManager.powerHint(PowerHint.LAUNCH, 1);
mPowerHintSent = true;
}
@@ -1238,7 +1240,7 @@
r.mTaskOverlay = true;
final TaskRecord task = mSupervisor.anyTaskForIdLocked(mOptions.getLaunchTaskId());
final ActivityRecord top = task != null ? task.getTopActivity() : null;
- if (top != null && !top.visible) {
+ if (top != null && top.state != RESUMED) {
// The caller specifies that we'd like to be avoided to be moved to the front, so be
// it!
@@ -1505,6 +1507,11 @@
mMovedToFront = true;
}
mOptions = null;
+
+ // We are moving a task to the front, use starting window to hide initial drawn
+ // delay.
+ intentActivity.showStartingWindow(null /* prev */, false /* newTask */,
+ true /* taskSwitch */);
}
updateTaskReturnToType(intentActivity.task, mLaunchFlags, focusStack);
}
@@ -1766,8 +1773,8 @@
mInTask.updateOverrideConfiguration(mLaunchBounds);
int stackId = mInTask.getLaunchStackId();
if (stackId != mInTask.getStackId()) {
- final ActivityStack stack = mSupervisor.moveTaskToStackUncheckedLocked(
- mInTask, stackId, ON_TOP, !FORCE_FOCUS, "inTaskToFront");
+ final ActivityStack stack = mSupervisor.moveTaskToStackUncheckedLocked(mInTask,
+ stackId, ON_TOP, !FORCE_FOCUS, "inTaskToFront", true /* allowStackOnTop */);
stackId = stack.mStackId;
}
if (StackId.resizeStackWithLaunchBounds(stackId)) {
@@ -1820,7 +1827,7 @@
mSupervisor.getNextTaskIdForUserLocked(mStartActivity.userId), mStartActivity.info,
mIntent, null, null, true, mStartActivity.mActivityType);
mStartActivity.setTask(task, null);
- mWindowManager.moveTaskToTop(mStartActivity.task.taskId);
+ mStartActivity.task.moveWindowContainerToTop(true /* includingParents */);
if (DEBUG_TASKS) Slog.v(TAG_TASKS,
"Starting new activity " + mStartActivity + " in new guessed " + mStartActivity.task);
}
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index 0ea78b3..f1f8bb2 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -991,7 +991,8 @@
@Override
public void setBatteryState(final int status, final int health, final int plugType,
- final int level, final int temp, final int volt, final int chargeUAh) {
+ final int level, final int temp, final int volt, final int chargeUAh,
+ final int chargeFullUAh) {
enforceCallingPermission();
// BatteryService calls us here and we may update external state. It would be wrong
@@ -1005,7 +1006,7 @@
// The battery state has not changed, so we don't need to sync external
// stats immediately.
mStats.setBatteryStateLocked(status, health, plugType, level, temp, volt,
- chargeUAh);
+ chargeUAh, chargeFullUAh);
return;
}
}
@@ -1015,7 +1016,7 @@
updateExternalStatsSync("battery-state", BatteryStatsImpl.ExternalStatsSync.UPDATE_ALL);
synchronized (mStats) {
mStats.setBatteryStateLocked(status, health, plugType, level, temp, volt,
- chargeUAh);
+ chargeUAh, chargeFullUAh);
}
}
});
diff --git a/services/core/java/com/android/server/am/TaskChangeNotificationController.java b/services/core/java/com/android/server/am/TaskChangeNotificationController.java
index b6e35d2..cb20eac 100644
--- a/services/core/java/com/android/server/am/TaskChangeNotificationController.java
+++ b/services/core/java/com/android/server/am/TaskChangeNotificationController.java
@@ -19,12 +19,15 @@
import android.app.ITaskStackListener;
import android.app.ActivityManager.TaskDescription;
import android.content.ComponentName;
+import android.os.Binder;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
+import java.util.ArrayList;
+
class TaskChangeNotificationController {
static final int LOG_STACK_STATE_MSG = 1;
static final int NOTIFY_TASK_STACK_CHANGE_LISTENERS_MSG = 2;
@@ -39,6 +42,7 @@
static final int NOTIFY_TASK_DESCRIPTION_CHANGED_LISTENERS_MSG = 11;
static final int NOTIFY_ACTIVITY_REQUESTED_ORIENTATION_CHANGED_LISTENERS = 12;
static final int NOTIFY_TASK_REMOVAL_STARTED_LISTENERS = 13;
+ static final int NOTIFY_TASK_PROFILE_LOCKED_LISTENERS_MSG = 14;
// Delay in notifying task stack change listeners (in millis)
static final int NOTIFY_TASK_STACK_CHANGE_LISTENERS_DELAY = 100;
@@ -47,13 +51,71 @@
private final ActivityStackSupervisor mStackSupervisor;
private final Handler mHandler;
- /** Task stack change listeners. */
- private final RemoteCallbackList<ITaskStackListener> mTaskStackListeners =
- new RemoteCallbackList<ITaskStackListener>();
+ // Task stack change listeners in a remote process.
+ private final RemoteCallbackList<ITaskStackListener> mRemoteTaskStackListeners =
+ new RemoteCallbackList<>();
+
+ /*
+ * Task stack change listeners in a local process. Tracked separately so that they can be
+ * called on the same thread.
+ */
+ private final ArrayList<ITaskStackListener> mLocalTaskStackListeners = new ArrayList<>();
+
+ private final TaskStackConsumer mNotifyTaskStackChanged = (l, m) -> {
+ l.onTaskStackChanged();
+ };
+
+ private final TaskStackConsumer mNotifyTaskCreated = (l, m) -> {
+ l.onTaskCreated(m.arg1, (ComponentName) m.obj);
+ };
+
+ private final TaskStackConsumer mNotifyTaskRemoved = (l, m) -> {
+ l.onTaskRemoved(m.arg1);
+ };
+
+ private final TaskStackConsumer mNotifyTaskMovedToFront = (l, m) -> {
+ l.onTaskMovedToFront(m.arg1);
+ };
+
+ private final TaskStackConsumer mNotifyTaskDescriptionChanged = (l, m) -> {
+ l.onTaskDescriptionChanged(m.arg1, (TaskDescription) m.obj);
+ };
+
+ private final TaskStackConsumer mNotifyActivityRequestedOrientationChanged = (l, m) -> {
+ l.onActivityRequestedOrientationChanged(m.arg1, m.arg2);
+ };
+
+ private final TaskStackConsumer mNotifyTaskRemovalStarted = (l, m) -> {
+ l.onTaskRemovalStarted(m.arg1);
+ };
+
+ private final TaskStackConsumer mNotifyActivityPinned = (l, m) -> {
+ l.onActivityPinned();
+ };
+
+ private final TaskStackConsumer mNotifyPinnedActivityRestartAttempt = (l, m) -> {
+ l.onPinnedActivityRestartAttempt();
+ };
+
+ private final TaskStackConsumer mNotifyPinnedStackAnimationEnded = (l, m) -> {
+ l.onPinnedStackAnimationEnded();
+ };
+
+ private final TaskStackConsumer mNotifyActivityForcedResizable = (l, m) -> {
+ l.onActivityForcedResizable((String) m.obj, m.arg1);
+ };
+
+ private final TaskStackConsumer mNotifyActivityDismissingDockedStack = (l, m) -> {
+ l.onActivityDismissingDockedStack();
+ };
+
+ private final TaskStackConsumer mNotifyTaskProfileLocked = (l, m) -> {
+ l.onTaskProfileLocked(m.arg1, m.arg2);
+ };
@FunctionalInterface
- public interface ConsumerWithRemoteException<T> {
- void accept(T t) throws RemoteException;
+ public interface TaskStackConsumer {
+ void accept(ITaskStackListener t, Message m) throws RemoteException;
}
private class MainHandler extends Handler {
@@ -71,43 +133,44 @@
break;
}
case NOTIFY_TASK_STACK_CHANGE_LISTENERS_MSG:
- forAllListeners((listener) -> listener.onTaskStackChanged());
+ forAllRemoteListeners(mNotifyTaskStackChanged, msg);
break;
case NOTIFY_TASK_ADDED_LISTENERS_MSG:
- forAllListeners((listener) -> listener.onTaskCreated(msg.arg1,
- (ComponentName) msg.obj));
+ forAllRemoteListeners(mNotifyTaskCreated, msg);
break;
case NOTIFY_TASK_REMOVED_LISTENERS_MSG:
- forAllListeners((listener) -> listener.onTaskRemoved(msg.arg1));
+ forAllRemoteListeners(mNotifyTaskRemoved, msg);
break;
case NOTIFY_TASK_MOVED_TO_FRONT_LISTENERS_MSG:
- forAllListeners((listener) -> listener.onTaskMovedToFront(msg.arg1));
+ forAllRemoteListeners(mNotifyTaskMovedToFront, msg);
break;
case NOTIFY_TASK_DESCRIPTION_CHANGED_LISTENERS_MSG:
- forAllListeners((listener) -> listener.onTaskDescriptionChanged(msg.arg1,
- (TaskDescription) msg.obj));
+ forAllRemoteListeners(mNotifyTaskDescriptionChanged, msg);
break;
case NOTIFY_ACTIVITY_REQUESTED_ORIENTATION_CHANGED_LISTENERS:
- forAllListeners((listener) -> listener.onActivityRequestedOrientationChanged(
- msg.arg1, msg.arg2));
+ forAllRemoteListeners(mNotifyActivityRequestedOrientationChanged, msg);
+ break;
case NOTIFY_TASK_REMOVAL_STARTED_LISTENERS:
- forAllListeners((listener) -> listener.onTaskRemovalStarted(msg.arg1));
+ forAllRemoteListeners(mNotifyTaskRemovalStarted, msg);
break;
case NOTIFY_ACTIVITY_PINNED_LISTENERS_MSG:
- forAllListeners((listener) -> listener.onActivityPinned());
+ forAllRemoteListeners(mNotifyActivityPinned, msg);
break;
case NOTIFY_PINNED_ACTIVITY_RESTART_ATTEMPT_LISTENERS_MSG:
- forAllListeners((listener) -> listener.onPinnedActivityRestartAttempt());
+ forAllRemoteListeners(mNotifyPinnedActivityRestartAttempt, msg);
break;
case NOTIFY_PINNED_STACK_ANIMATION_ENDED_LISTENERS_MSG:
- forAllListeners((listener) -> listener.onPinnedStackAnimationEnded());
+ forAllRemoteListeners(mNotifyPinnedStackAnimationEnded, msg);
break;
case NOTIFY_FORCED_RESIZABLE_MSG:
- forAllListeners((listener) -> listener.onActivityForcedResizable(
- (String) msg.obj, msg.arg1));
+ forAllRemoteListeners(mNotifyActivityForcedResizable, msg);
break;
case NOTIFY_ACTIVITY_DISMISSING_DOCKED_STACK_MSG:
- forAllListeners((listener) -> listener.onActivityDismissingDockedStack());
+ forAllRemoteListeners(mNotifyActivityDismissingDockedStack, msg);
+ break;
+ case NOTIFY_TASK_PROFILE_LOCKED_LISTENERS_MSG:
+ forAllRemoteListeners(mNotifyTaskProfileLocked, msg);
+
break;
}
}
@@ -123,7 +186,13 @@
public void registerTaskStackListener(ITaskStackListener listener) {
synchronized (mService) {
if (listener != null) {
- mTaskStackListeners.register(listener);
+ if (Binder.getCallingPid() == android.os.Process.myPid()) {
+ if (!mLocalTaskStackListeners.contains(listener)) {
+ mLocalTaskStackListeners.add(listener);
+ }
+ } else {
+ mRemoteTaskStackListeners.register(listener);
+ }
}
}
}
@@ -131,30 +200,47 @@
public void unregisterTaskStackListener(ITaskStackListener listener) {
synchronized (mService) {
if (listener != null) {
- mTaskStackListeners.unregister(listener);
+ if (Binder.getCallingPid() == android.os.Process.myPid()) {
+ mLocalTaskStackListeners.remove(listener);
+ } else {
+ mRemoteTaskStackListeners.unregister(listener);
+ }
}
}
}
- void forAllListeners(ConsumerWithRemoteException<ITaskStackListener> callback) {
+ void forAllRemoteListeners(TaskStackConsumer callback, Message message) {
synchronized (mService) {
- for (int i = mTaskStackListeners.beginBroadcast() - 1; i >= 0; i--) {
+ for (int i = mRemoteTaskStackListeners.beginBroadcast() - 1; i >= 0; i--) {
try {
// Make a one-way callback to the listener
- callback.accept(mTaskStackListeners.getBroadcastItem(i));
+ callback.accept(mRemoteTaskStackListeners.getBroadcastItem(i), message);
} catch (RemoteException e) {
// Handled by the RemoteCallbackList.
}
}
- mTaskStackListeners.finishBroadcast();
- }
- }
+ mRemoteTaskStackListeners.finishBroadcast();
+ }
+ }
+
+ void forAllLocalListeners(TaskStackConsumer callback, Message message) {
+ synchronized (mService) {
+ for (int i = mLocalTaskStackListeners.size() - 1; i >= 0; i--) {
+ try {
+ callback.accept(mLocalTaskStackListeners.get(i), message);
+ } catch (RemoteException e) {
+ // Never thrown since this is called locally.
+ }
+ }
+ }
+ }
/** Notifies all listeners when the task stack has changed. */
void notifyTaskStackChanged() {
mHandler.sendEmptyMessage(LOG_STACK_STATE_MSG);
mHandler.removeMessages(NOTIFY_TASK_STACK_CHANGE_LISTENERS_MSG);
- Message msg = mHandler.obtainMessage(NOTIFY_TASK_STACK_CHANGE_LISTENERS_MSG);
+ final Message msg = mHandler.obtainMessage(NOTIFY_TASK_STACK_CHANGE_LISTENERS_MSG);
+ forAllLocalListeners(mNotifyTaskStackChanged, msg);
// Only the main task stack change notification requires a delay.
mHandler.sendMessageDelayed(msg, NOTIFY_TASK_STACK_CHANGE_LISTENERS_DELAY);
}
@@ -162,7 +248,9 @@
/** Notifies all listeners when an Activity is pinned. */
void notifyActivityPinned() {
mHandler.removeMessages(NOTIFY_ACTIVITY_PINNED_LISTENERS_MSG);
- mHandler.obtainMessage(NOTIFY_ACTIVITY_PINNED_LISTENERS_MSG).sendToTarget();
+ final Message msg = mHandler.obtainMessage(NOTIFY_ACTIVITY_PINNED_LISTENERS_MSG);
+ forAllLocalListeners(mNotifyActivityPinned, msg);
+ msg.sendToTarget();
}
/**
@@ -172,50 +260,69 @@
*/
void notifyPinnedActivityRestartAttempt() {
mHandler.removeMessages(NOTIFY_PINNED_ACTIVITY_RESTART_ATTEMPT_LISTENERS_MSG);
- mHandler.obtainMessage(NOTIFY_PINNED_ACTIVITY_RESTART_ATTEMPT_LISTENERS_MSG).sendToTarget();
+ final Message msg =
+ mHandler.obtainMessage(NOTIFY_PINNED_ACTIVITY_RESTART_ATTEMPT_LISTENERS_MSG);
+ forAllLocalListeners(mNotifyPinnedActivityRestartAttempt, msg);
+ msg.sendToTarget();
}
/** Notifies all listeners when the pinned stack animation ends. */
void notifyPinnedStackAnimationEnded() {
mHandler.removeMessages(NOTIFY_PINNED_STACK_ANIMATION_ENDED_LISTENERS_MSG);
- mHandler.obtainMessage(NOTIFY_PINNED_STACK_ANIMATION_ENDED_LISTENERS_MSG)
- .sendToTarget();
+ final Message msg =
+ mHandler.obtainMessage(NOTIFY_PINNED_STACK_ANIMATION_ENDED_LISTENERS_MSG);
+ forAllLocalListeners(mNotifyPinnedStackAnimationEnded, msg);
+ msg.sendToTarget();
}
void notifyActivityDismissingDockedStack() {
mHandler.removeMessages(NOTIFY_ACTIVITY_DISMISSING_DOCKED_STACK_MSG);
- mHandler.obtainMessage(NOTIFY_ACTIVITY_DISMISSING_DOCKED_STACK_MSG).sendToTarget();
+ final Message message = mHandler.obtainMessage(NOTIFY_ACTIVITY_DISMISSING_DOCKED_STACK_MSG);
+ forAllLocalListeners(mNotifyActivityDismissingDockedStack, message);
}
void notifyActivityForcedResizable(int taskId, String packageName) {
mHandler.removeMessages(NOTIFY_FORCED_RESIZABLE_MSG);
- mHandler.obtainMessage(NOTIFY_FORCED_RESIZABLE_MSG, taskId, 0 /* unused */, packageName)
- .sendToTarget();
+ final Message msg = mHandler.obtainMessage(NOTIFY_FORCED_RESIZABLE_MSG, taskId,
+ 0 /* unused */, packageName);
+ forAllLocalListeners(mNotifyActivityForcedResizable, msg);
+ msg.sendToTarget();
}
void notifyTaskCreated(int taskId, ComponentName componentName) {
- mHandler.obtainMessage(NOTIFY_TASK_ADDED_LISTENERS_MSG, taskId, 0 /* unused */,
- componentName).sendToTarget();
+ final Message msg = mHandler.obtainMessage(NOTIFY_TASK_ADDED_LISTENERS_MSG,
+ taskId, 0 /* unused */, componentName);
+ forAllLocalListeners(mNotifyTaskCreated, msg);
+ msg.sendToTarget();
}
void notifyTaskRemoved(int taskId) {
- mHandler.obtainMessage(NOTIFY_TASK_REMOVED_LISTENERS_MSG, taskId, 0 /* unused */)
- .sendToTarget();
+ final Message msg = mHandler.obtainMessage(NOTIFY_TASK_REMOVED_LISTENERS_MSG,
+ taskId, 0 /* unused */);
+ forAllLocalListeners(mNotifyTaskRemoved, msg);
+ msg.sendToTarget();
}
void notifyTaskMovedToFront(int taskId) {
- mHandler.obtainMessage(NOTIFY_TASK_MOVED_TO_FRONT_LISTENERS_MSG, taskId, 0 /* unused */)
- .sendToTarget();
+ final Message msg = mHandler.obtainMessage(NOTIFY_TASK_MOVED_TO_FRONT_LISTENERS_MSG,
+ taskId, 0 /* unused */);
+ forAllLocalListeners(mNotifyTaskMovedToFront, msg);
+ msg.sendToTarget();
}
void notifyTaskDescriptionChanged(int taskId, TaskDescription taskDescription) {
- mHandler.obtainMessage(NOTIFY_TASK_DESCRIPTION_CHANGED_LISTENERS_MSG, taskId,
- 0 /* unused */, taskDescription).sendToTarget();
+ final Message msg = mHandler.obtainMessage(NOTIFY_TASK_DESCRIPTION_CHANGED_LISTENERS_MSG,
+ taskId, 0 /* unused */, taskDescription);
+ forAllLocalListeners(mNotifyTaskDescriptionChanged, msg);
+ msg.sendToTarget();
+
}
void notifyActivityRequestedOrientationChanged(int taskId, int orientation) {
- mHandler.obtainMessage(NOTIFY_ACTIVITY_REQUESTED_ORIENTATION_CHANGED_LISTENERS, taskId,
- orientation).sendToTarget();
+ final Message msg = mHandler.obtainMessage(
+ NOTIFY_ACTIVITY_REQUESTED_ORIENTATION_CHANGED_LISTENERS, taskId, orientation);
+ forAllLocalListeners(mNotifyActivityRequestedOrientationChanged, msg);
+ msg.sendToTarget();
}
/**
@@ -224,7 +331,21 @@
* the window disappears.
*/
void notifyTaskRemovalStarted(int taskId) {
- mHandler.obtainMessage(NOTIFY_TASK_REMOVAL_STARTED_LISTENERS, taskId, 0 /* unused */)
- .sendToTarget();
+ final Message msg = mHandler.obtainMessage(NOTIFY_TASK_REMOVAL_STARTED_LISTENERS, taskId,
+ 0 /* unused */);
+ forAllLocalListeners(mNotifyTaskRemovalStarted, msg);
+ msg.sendToTarget();
+
+ }
+
+ /**
+ * Notify listeners that the task has been put in a locked state because one or more of the
+ * activities inside it belong to a managed profile user that has been locked.
+ */
+ void notifyTaskProfileLocked(int taskId, int userId) {
+ final Message msg = mHandler.obtainMessage(NOTIFY_TASK_PROFILE_LOCKED_LISTENERS_MSG, taskId,
+ userId);
+ forAllLocalListeners(mNotifyTaskProfileLocked, msg);
+ msg.sendToTarget();
}
}
diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java
index 9e28068..9e22c50 100644
--- a/services/core/java/com/android/server/am/TaskRecord.java
+++ b/services/core/java/com/android/server/am/TaskRecord.java
@@ -21,6 +21,7 @@
import android.app.ActivityManager;
import android.app.ActivityManager.StackId;
import android.app.ActivityManager.TaskDescription;
+import android.app.ActivityManager.TaskSnapshot;
import android.app.ActivityManager.TaskThumbnail;
import android.app.ActivityManager.TaskThumbnailInfo;
import android.app.ActivityOptions;
@@ -34,11 +35,13 @@
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.graphics.Bitmap;
+import android.graphics.GraphicBuffer;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Debug;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
+import android.os.Trace;
import android.os.UserHandle;
import android.provider.Settings;
import android.service.voice.IVoiceInteractionSession;
@@ -48,6 +51,7 @@
import com.android.internal.app.IVoiceInteractor;
import com.android.internal.util.XmlUtils;
+import com.android.server.wm.TaskWindowContainerController;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
@@ -58,6 +62,7 @@
import java.util.ArrayList;
import java.util.Objects;
+import static android.app.ActivityManager.RESIZE_MODE_FORCED;
import static android.app.ActivityManager.StackId.DOCKED_STACK_ID;
import static android.app.ActivityManager.StackId.FREEFORM_WORKSPACE_STACK_ID;
import static android.app.ActivityManager.StackId.FULLSCREEN_WORKSPACE_STACK_ID;
@@ -80,6 +85,7 @@
import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;
import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_PRIVILEGED;
+import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;
import static android.provider.Settings.Secure.USER_SETUP_COMPLETE;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ADD_REMOVE;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_LOCKTASK;
@@ -95,6 +101,7 @@
import static com.android.server.am.ActivityRecord.HOME_ACTIVITY_TYPE;
import static com.android.server.am.ActivityRecord.RECENTS_ACTIVITY_TYPE;
import static com.android.server.am.ActivityRecord.STARTING_WINDOW_SHOWN;
+import static com.android.server.am.ActivityStackSupervisor.PRESERVE_WINDOWS;
final class TaskRecord extends ConfigurationContainer {
private static final String TAG = TAG_WITH_CLASS_NAME ? "TaskRecord" : TAG_AM;
@@ -280,6 +287,8 @@
/** Helper object used for updating override configuration. */
private Configuration mTmpConfig = new Configuration();
+ private TaskWindowContainerController mWindowContainerController;
+
TaskRecord(ActivityManagerService service, int _taskId, ActivityInfo info, Intent _intent,
IVoiceInteractionSession _voiceSession, IVoiceInteractor _voiceInteractor, int type) {
mService = service;
@@ -389,6 +398,162 @@
mService.mTaskChangeNotificationController.notifyTaskCreated(_taskId, realActivity);
}
+ TaskWindowContainerController getWindowContainerController() {
+ return mWindowContainerController;
+ }
+
+ void createWindowContainer(boolean onTop, boolean showForAllUsers) {
+ if (mWindowContainerController != null) {
+ throw new IllegalArgumentException("Window container=" + mWindowContainerController
+ + " already created for task=" + this);
+ }
+
+ final Rect bounds = updateOverrideConfigurationFromLaunchBounds();
+ final Configuration overrideConfig = getOverrideConfiguration();
+ mWindowContainerController = new TaskWindowContainerController(taskId, getStackId(), userId,
+ bounds, overrideConfig, mResizeMode, isHomeTask(), isOnTopLauncher(), onTop,
+ showForAllUsers);
+ }
+
+ void removeWindowContainer() {
+ mService.mStackSupervisor.removeLockedTaskLocked(this);
+ mWindowContainerController.removeContainer();
+ if (!StackId.persistTaskBounds(getStackId())) {
+ // Reset current bounds for task whose bounds shouldn't be persisted so it uses
+ // default configuration the next time it launches.
+ updateOverrideConfiguration(null);
+ }
+ mService.mTaskChangeNotificationController.notifyTaskRemoved(taskId);
+ mWindowContainerController = null;
+ }
+
+ void setResizeMode(int resizeMode) {
+ if (mResizeMode == resizeMode) {
+ return;
+ }
+ mResizeMode = resizeMode;
+ mWindowContainerController.setResizeable(resizeMode);
+ mService.mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
+ mService.mStackSupervisor.resumeFocusedStackTopActivityLocked();
+ }
+
+ void setTaskDockedResizing(boolean resizing) {
+ mWindowContainerController.setTaskDockedResizing(resizing);
+ }
+
+ boolean resize(Rect bounds, int resizeMode, boolean preserveWindow, boolean deferResume) {
+ if (!isResizeable()) {
+ Slog.w(TAG, "resizeTask: task " + this + " not resizeable.");
+ return true;
+ }
+
+ // If this is a forced resize, let it go through even if the bounds is not changing,
+ // as we might need a relayout due to surface size change (to/from fullscreen).
+ final boolean forced = (resizeMode & RESIZE_MODE_FORCED) != 0;
+ if (Objects.equals(mBounds, bounds) && !forced) {
+ // Nothing to do here...
+ return true;
+ }
+ bounds = validateBounds(bounds);
+
+ if (mWindowContainerController == null) {
+ // Task doesn't exist in window manager yet (e.g. was restored from recents).
+ // All we can do for now is update the bounds so it can be used when the task is
+ // added to window manager.
+ updateOverrideConfiguration(bounds);
+ if (getStackId() != FREEFORM_WORKSPACE_STACK_ID) {
+ // re-restore the task so it can have the proper stack association.
+ mService.mStackSupervisor.restoreRecentTaskLocked(this,
+ FREEFORM_WORKSPACE_STACK_ID);
+ }
+ return true;
+ }
+
+ if (!canResizeToBounds(bounds)) {
+ throw new IllegalArgumentException("resizeTask: Can not resize task=" + this
+ + " to bounds=" + bounds + " resizeMode=" + mResizeMode);
+ }
+
+ // Do not move the task to another stack here.
+ // This method assumes that the task is already placed in the right stack.
+ // we do not mess with that decision and we only do the resize!
+
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "am.resizeTask_" + taskId);
+
+ final boolean updatedConfig = updateOverrideConfiguration(bounds);
+ // This variable holds information whether the configuration didn't change in a significant
+ // way and the activity was kept the way it was. If it's false, it means the activity had
+ // to be relaunched due to configuration change.
+ boolean kept = true;
+ if (updatedConfig) {
+ final ActivityRecord r = topRunningActivityLocked();
+ if (r != null) {
+ kept = r.ensureActivityConfigurationLocked(0 /* globalChanges */, preserveWindow);
+
+ if (!deferResume) {
+ // All other activities must be made visible with their correct configuration.
+ mService.mStackSupervisor.ensureActivitiesVisibleLocked(r, 0, !PRESERVE_WINDOWS);
+ if (!kept) {
+ mService.mStackSupervisor.resumeFocusedStackTopActivityLocked();
+ }
+ }
+ }
+ }
+ mWindowContainerController.resize(mBounds, getOverrideConfiguration(), kept, forced);
+
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ return kept;
+ }
+
+ // TODO: Investigate combining with the resize() method above.
+ void resizeWindowContainer() {
+ mWindowContainerController.resize(mBounds, getOverrideConfiguration(), false /* relayout */,
+ false /* forced */);
+ }
+
+ // TODO: Remove once we have a stack controller.
+ void positionWindowContainerAt(int stackId, int index) {
+ mWindowContainerController.positionAt(stackId, index, mBounds, getOverrideConfiguration());
+ }
+
+ // TODO: Replace with moveChildToTop?
+ void moveWindowContainerToTop(boolean includingParents) {
+ if (mWindowContainerController != null) {
+ mWindowContainerController.moveToTop(includingParents);
+ }
+ }
+
+ // TODO: Replace with moveChildToBottom?
+ void moveWindowContainerToBottom() {
+ if (mWindowContainerController != null) {
+ mWindowContainerController.moveToBottom();
+ }
+ }
+
+ void getWindowContainerBounds(Rect bounds) {
+ mWindowContainerController.getBounds(bounds);
+ }
+
+ // TODO: make this part of adding it to the stack?
+ void reparentWindowContainer(int stackId, int position) {
+ mWindowContainerController.reparent(stackId, position);
+ }
+
+ void cancelWindowTransition() {
+ mWindowContainerController.cancelWindowTransition();
+ }
+
+ void cancelThumbnailTransition() {
+ mWindowContainerController.cancelThumbnailTransition();
+ }
+
+ public TaskSnapshot getSnapshot() {
+ if (mWindowContainerController == null) {
+ return null;
+ }
+ return mWindowContainerController.getSnapshot();
+ }
+
void touchActiveTime() {
lastActiveTime = System.currentTimeMillis();
if (firstActiveTime == 0) {
@@ -849,6 +1014,11 @@
if (r.isPersistable()) {
mService.notifyTaskPersisterLocked(this, false);
}
+
+ // Sync. with window manager
+ updateOverrideConfigurationFromLaunchBounds();
+ mWindowContainerController.positionChildAt(r.getWindowContainerController(), index);
+ r.onOverrideConfigurationSent();
}
/** @return true if this was the last activity in the task */
@@ -1605,23 +1775,28 @@
boolean overrideWidth, boolean overrideHeight) {
mTmpNonDecorBounds.set(bounds);
mTmpStableBounds.set(bounds);
- subtractNonDecorInsets(
- mTmpNonDecorBounds, insetBounds != null ? insetBounds : bounds,
- overrideWidth, overrideHeight);
- subtractStableInsets(
- mTmpStableBounds, insetBounds != null ? insetBounds : bounds,
- overrideWidth, overrideHeight);
- // For calculating screenWidthDp, screenHeightDp, we use the stable inset screen area,
- // i.e. the screen area without the system bars.
- // Additionally task dimensions should not be bigger than its parents dimensions.
final Configuration parentConfig = getParent().getConfiguration();
config.unset();
final float density = parentConfig.densityDpi * DisplayMetrics.DENSITY_DEFAULT_SCALE;
- config.screenWidthDp =
- Math.min((int)(mTmpStableBounds.width() / density), parentConfig.screenWidthDp);
- config.screenHeightDp =
- Math.min((int)(mTmpStableBounds.height() / density), parentConfig.screenHeightDp);
+ final boolean isFloatingTask = mStack != null && StackId.tasksAreFloating(mStack.mStackId);
+ if (isFloatingTask) {
+ // Floating tasks should not be resized to the screen's bounds.
+ config.screenWidthDp = (int) (mTmpStableBounds.width() / density);
+ config.screenHeightDp = (int) (mTmpStableBounds.height() / density);
+ } else {
+ // For calculating screenWidthDp, screenWidthDp, we use the stable inset screen area,
+ // i.e. the screen area without the system bars.
+ // Additionally task dimensions should not be bigger than its parents dimensions.
+ subtractNonDecorInsets(mTmpNonDecorBounds, insetBounds != null ? insetBounds : bounds,
+ overrideWidth, overrideHeight);
+ subtractStableInsets(mTmpStableBounds, insetBounds != null ? insetBounds : bounds,
+ overrideWidth, overrideHeight);
+ config.screenWidthDp = Math.min(
+ (int) (mTmpStableBounds.width() / density), parentConfig.screenWidthDp);
+ config.screenHeightDp = Math.min(
+ (int) (mTmpStableBounds.height() / density), parentConfig.screenHeightDp);
+ }
// TODO: Orientation?
config.orientation = (config.screenWidthDp <= config.screenHeightDp)
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index a0a04bb..71ebad9 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -255,10 +255,11 @@
// storage is already unlocked.
if (uss.setState(STATE_BOOTING, STATE_RUNNING_LOCKED)) {
mInjector.getUserManagerInternal().setUserState(userId, uss.state);
-
- int uptimeSeconds = (int)(SystemClock.elapsedRealtime() / 1000);
- MetricsLogger.histogram(mInjector.getContext(), "framework_locked_boot_completed",
- uptimeSeconds);
+ if (!mInjector.isRuntimeRestarted() && !mInjector.isFirstBoot()) {
+ int uptimeSeconds = (int)(SystemClock.elapsedRealtime() / 1000);
+ MetricsLogger.histogram(mInjector.getContext(),
+ "framework_locked_boot_completed", uptimeSeconds);
+ }
mHandler.sendMessage(mHandler.obtainMessage(REPORT_LOCKED_BOOT_COMPLETE_MSG,
userId, 0));
@@ -429,9 +430,11 @@
}
Slog.d(TAG, "Sending BOOT_COMPLETE user #" + userId);
- int uptimeSeconds = (int)(SystemClock.elapsedRealtime() / 1000);
- MetricsLogger.histogram(mInjector.getContext(), "framework_boot_completed",
- uptimeSeconds);
+ if (!mInjector.isRuntimeRestarted() && !mInjector.isFirstBoot()) {
+ int uptimeSeconds = (int) (SystemClock.elapsedRealtime() / 1000);
+ MetricsLogger.histogram(mInjector.getContext(), "framework_boot_completed",
+ uptimeSeconds);
+ }
final Intent bootIntent = new Intent(Intent.ACTION_BOOT_COMPLETED, null);
bootIntent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
bootIntent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT
@@ -442,6 +445,19 @@
}
}
+ int restartUser(final int userId, final boolean foreground) {
+ return stopUser(userId, /* force */ true, new IStopUserCallback.Stub() {
+ @Override
+ public void userStopped(final int userId) {
+ // Post to the same handler that this callback is called from to ensure the user
+ // cleanup is complete before restarting.
+ mHandler.post(() -> startUser(userId, foreground));
+ }
+ @Override
+ public void userStopAborted(final int userId) {}
+ });
+ }
+
int stopUser(final int userId, final boolean force, final IStopUserCallback callback) {
if (mInjector.checkCallingPermission(INTERACT_ACROSS_USERS_FULL)
!= PackageManager.PERMISSION_GRANTED) {
@@ -634,6 +650,12 @@
}
if (stopped) {
+ // Evict the user's credential encryption key
+ try {
+ getStorageManager().lockUserKey(userId);
+ } catch (RemoteException re) {
+ throw re.rethrowAsRuntimeException();
+ }
mInjector.systemServiceManagerCleanupUser(userId);
synchronized (mLock) {
mInjector.stackSupervisorRemoveUserLocked(userId);
@@ -1677,6 +1699,14 @@
mService.mSystemServiceManager.stopUser(userId);
}
+ boolean isRuntimeRestarted() {
+ return mService.mSystemServiceManager.isRuntimeRestarted();
+ }
+
+ boolean isFirstBoot() {
+ return mService.mSystemServiceManager.isFirstBoot();
+ }
+
void sendPreBootBroadcast(int userId, boolean quiet, final Runnable onFinish) {
new PreBootBroadcaster(mService, userId, null, quiet) {
@Override
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 2d42c33..0f3f9ce 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -191,7 +191,6 @@
/** The controller for the volume UI. */
private final VolumeController mVolumeController = new VolumeController();
- private final ControllerService mControllerService = new ControllerService();
// sendMsg() flags
/** If the msg is already queued, replace it with this one. */
@@ -782,7 +781,6 @@
SAFE_VOLUME_CONFIGURE_TIMEOUT_MS);
initA11yMonitoring(mContext);
- mControllerService.init();
onIndicateSystemReady();
}
@@ -6065,7 +6063,6 @@
pw.print(" mMcc="); pw.println(mMcc);
pw.print(" mCameraSoundForced="); pw.println(mCameraSoundForced);
pw.print(" mHasVibrator="); pw.println(mHasVibrator);
- pw.print(" mControllerService="); pw.println(mControllerService);
pw.print(" mVolumePolicy="); pw.println(mVolumePolicy);
dumpAudioPolicies(pw);
@@ -6093,9 +6090,6 @@
}
private void enforceVolumeController(String action) {
- if (mControllerService.mUid != 0 && Binder.getCallingUid() == mControllerService.mUid) {
- return;
- }
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.STATUS_BAR_SERVICE,
"Only SystemUI can " + action);
}
@@ -6326,11 +6320,6 @@
}
@Override
- public int getVolumeControllerUid() {
- return mControllerService.mUid;
- }
-
- @Override
public void updateRingerModeAffectedStreamsInternal() {
synchronized (mSettingsLock) {
if (updateRingerModeAffectedStreams()) {
@@ -6591,42 +6580,4 @@
private HashMap<IBinder, AudioPolicyProxy> mAudioPolicies =
new HashMap<IBinder, AudioPolicyProxy>();
private int mAudioPolicyCounter = 0; // always accessed synchronized on mAudioPolicies
-
- private class ControllerService extends ContentObserver {
- private int mUid;
- private ComponentName mComponent;
-
- public ControllerService() {
- super(null);
- }
-
- @Override
- public String toString() {
- return String.format("{mUid=%d,mComponent=%s}", mUid, mComponent);
- }
-
- public void init() {
- onChange(true);
- mContentResolver.registerContentObserver(Settings.Secure.getUriFor(
- Settings.Secure.VOLUME_CONTROLLER_SERVICE_COMPONENT), false, this);
- }
-
- @Override
- public void onChange(boolean selfChange) {
- mUid = 0;
- mComponent = null;
- final String setting = Settings.Secure.getString(mContentResolver,
- Settings.Secure.VOLUME_CONTROLLER_SERVICE_COMPONENT);
- if (setting == null) return;
- try {
- mComponent = ComponentName.unflattenFromString(setting);
- if (mComponent == null) return;
- mUid = mContext.getPackageManager()
- .getApplicationInfo(mComponent.getPackageName(), 0).uid;
- } catch (Exception e) {
- Log.w(TAG, "Error loading controller service", e);
- }
- if (DEBUG_VOL) Log.d(TAG, "Reloaded controller service: " + this);
- }
- }
}
diff --git a/services/core/java/com/android/server/connectivity/NetworkMonitor.java b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
index 9ffe2b7..c40780e 100644
--- a/services/core/java/com/android/server/connectivity/NetworkMonitor.java
+++ b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
@@ -809,19 +809,26 @@
// portal. If it is considered a captive portal, a different sign-in URL
// is needed (i.e. can't browse a 204). This could be the result of an HTTP
// proxy server.
-
- // Consider 200 response with "Content-length=0" to not be a captive portal.
- // There's no point in considering this a captive portal as the user cannot
- // sign-in to an empty page. Probably the result of a broken transparent proxy.
- // See http://b/9972012.
- if (httpResponseCode == 200 && urlConnection.getContentLength() == 0) {
- validationLog("Empty 200 response interpreted as 204 response.");
- httpResponseCode = 204;
- }
-
- if (httpResponseCode == 200 && probeType == ValidationProbeEvent.PROBE_PAC) {
- validationLog("PAC fetch 200 response interpreted as 204 response.");
- httpResponseCode = 204;
+ if (httpResponseCode == 200) {
+ if (probeType == ValidationProbeEvent.PROBE_PAC) {
+ validationLog("PAC fetch 200 response interpreted as 204 response.");
+ httpResponseCode = 204;
+ } else if (urlConnection.getContentLengthLong() == 0) {
+ // Consider 200 response with "Content-length=0" to not be a captive portal.
+ // There's no point in considering this a captive portal as the user cannot
+ // sign-in to an empty page. Probably the result of a broken transparent proxy.
+ // See http://b/9972012.
+ validationLog(
+ "200 response with Content-length=0 interpreted as 204 response.");
+ httpResponseCode = 204;
+ } else if (urlConnection.getContentLengthLong() == -1) {
+ // When no Content-length (default value == -1), attempt to read a byte from the
+ // response. Do not use available() as it is unreliable. See http://b/33498325.
+ if (urlConnection.getInputStream().read() == -1) {
+ validationLog("Empty 200 response interpreted as 204 response.");
+ httpResponseCode = 204;
+ }
+ }
}
} catch (IOException e) {
validationLog("Probably not a portal: exception " + e);
diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java
index 6d96a10..e336283 100644
--- a/services/core/java/com/android/server/connectivity/Tethering.java
+++ b/services/core/java/com/android/server/connectivity/Tethering.java
@@ -199,7 +199,8 @@
mTetherMasterSM = new TetherMasterSM("TetherMaster", mLooper);
mTetherMasterSM.start();
- mUpstreamNetworkMonitor = new UpstreamNetworkMonitor();
+ mUpstreamNetworkMonitor = new UpstreamNetworkMonitor(
+ mContext, mTetherMasterSM, TetherMasterSM.EVENT_UPSTREAM_CALLBACK);
mStateReceiver = new StateReceiver();
IntentFilter filter = new IntentFilter();
@@ -1027,38 +1028,6 @@
}
/**
- * A NetworkCallback class that relays information of interest to the
- * tethering master state machine thread for subsequent processing.
- */
- class UpstreamNetworkCallback extends NetworkCallback {
- @Override
- public void onAvailable(Network network) {
- mTetherMasterSM.sendMessage(TetherMasterSM.EVENT_UPSTREAM_CALLBACK,
- UpstreamNetworkMonitor.EVENT_ON_AVAILABLE, 0, network);
- }
-
- @Override
- public void onCapabilitiesChanged(Network network, NetworkCapabilities newNc) {
- mTetherMasterSM.sendMessage(TetherMasterSM.EVENT_UPSTREAM_CALLBACK,
- UpstreamNetworkMonitor.EVENT_ON_CAPABILITIES, 0,
- new NetworkState(null, null, newNc, network, null, null));
- }
-
- @Override
- public void onLinkPropertiesChanged(Network network, LinkProperties newLp) {
- mTetherMasterSM.sendMessage(TetherMasterSM.EVENT_UPSTREAM_CALLBACK,
- UpstreamNetworkMonitor.EVENT_ON_LINKPROPERTIES, 0,
- new NetworkState(null, newLp, null, network, null, null));
- }
-
- @Override
- public void onLost(Network network) {
- mTetherMasterSM.sendMessage(TetherMasterSM.EVENT_UPSTREAM_CALLBACK,
- UpstreamNetworkMonitor.EVENT_ON_LOST, 0, network);
- }
- }
-
- /**
* A class to centralize all the network and link properties information
* pertaining to the current and any potential upstream network.
*
@@ -1072,21 +1041,31 @@
* TODO: Investigate whether more "upstream-specific" logic/functionality
* could/should be moved here.
*/
- class UpstreamNetworkMonitor {
- static final int EVENT_ON_AVAILABLE = 1;
- static final int EVENT_ON_CAPABILITIES = 2;
- static final int EVENT_ON_LINKPROPERTIES = 3;
- static final int EVENT_ON_LOST = 4;
+ public class UpstreamNetworkMonitor {
+ public static final int EVENT_ON_AVAILABLE = 1;
+ public static final int EVENT_ON_CAPABILITIES = 2;
+ public static final int EVENT_ON_LINKPROPERTIES = 3;
+ public static final int EVENT_ON_LOST = 4;
- final HashMap<Network, NetworkState> mNetworkMap = new HashMap<>();
- NetworkCallback mDefaultNetworkCallback;
- NetworkCallback mDunTetheringCallback;
+ private final Context mContext;
+ private final StateMachine mTarget;
+ private final int mWhat;
+ private final HashMap<Network, NetworkState> mNetworkMap = new HashMap<>();
+ private ConnectivityManager mCM;
+ private NetworkCallback mDefaultNetworkCallback;
+ private NetworkCallback mDunTetheringCallback;
- void start() {
+ public UpstreamNetworkMonitor(Context ctx, StateMachine tgt, int what) {
+ mContext = ctx;
+ mTarget = tgt;
+ mWhat = what;
+ }
+
+ public void start() {
stop();
mDefaultNetworkCallback = new UpstreamNetworkCallback();
- getConnectivityManager().registerDefaultNetworkCallback(mDefaultNetworkCallback);
+ cm().registerDefaultNetworkCallback(mDefaultNetworkCallback);
final NetworkRequest dunTetheringRequest = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
@@ -1094,110 +1073,150 @@
.addCapability(NetworkCapabilities.NET_CAPABILITY_DUN)
.build();
mDunTetheringCallback = new UpstreamNetworkCallback();
- getConnectivityManager().registerNetworkCallback(
- dunTetheringRequest, mDunTetheringCallback);
+ cm().registerNetworkCallback(dunTetheringRequest, mDunTetheringCallback);
}
- void stop() {
- if (mDefaultNetworkCallback != null) {
- getConnectivityManager().unregisterNetworkCallback(mDefaultNetworkCallback);
- mDefaultNetworkCallback = null;
- }
+ public void stop() {
+ releaseCallback(mDefaultNetworkCallback);
+ mDefaultNetworkCallback = null;
- if (mDunTetheringCallback != null) {
- getConnectivityManager().unregisterNetworkCallback(mDunTetheringCallback);
- mDunTetheringCallback = null;
- }
+ releaseCallback(mDunTetheringCallback);
+ mDunTetheringCallback = null;
mNetworkMap.clear();
}
- NetworkState lookup(Network network) {
+ public NetworkState lookup(Network network) {
return (network != null) ? mNetworkMap.get(network) : null;
}
- NetworkState processCallback(int arg1, Object obj) {
- switch (arg1) {
- case EVENT_ON_AVAILABLE: {
- final Network network = (Network) obj;
- if (VDBG) {
- Log.d(TAG, "EVENT_ON_AVAILABLE for " + network);
- }
- if (!mNetworkMap.containsKey(network)) {
- mNetworkMap.put(network,
- new NetworkState(null, null, null, network, null, null));
- }
-
- final ConnectivityManager cm = getConnectivityManager();
-
- if (mDefaultNetworkCallback != null) {
- cm.requestNetworkCapabilities(mDefaultNetworkCallback);
- cm.requestLinkProperties(mDefaultNetworkCallback);
- }
-
- // Requesting updates for mDunTetheringCallback is not
- // necessary. Because it's a listen, it will already have
- // heard all NetworkCapabilities and LinkProperties updates
- // since UpstreamNetworkMonitor was started. Because we
- // start UpstreamNetworkMonitor before chooseUpstreamType()
- // is ever invoked (it can register a DUN request) this is
- // mostly safe. However, if a DUN network is already up for
- // some reason (unlikely, because DUN is restricted and,
- // unless the DUN network is shared with another APN, only
- // the system can request it and this is the only part of
- // the system that requests it) we won't know its
- // LinkProperties or NetworkCapabilities.
-
- return mNetworkMap.get(network);
- }
- case EVENT_ON_CAPABILITIES: {
- final NetworkState ns = (NetworkState) obj;
- if (!mNetworkMap.containsKey(ns.network)) {
- // Ignore updates for networks for which we have not yet
- // received onAvailable() - which should never happen -
- // or for which we have already received onLost().
- return null;
- }
- if (VDBG) {
- Log.d(TAG, String.format("EVENT_ON_CAPABILITIES for %s: %s",
- ns.network, ns.networkCapabilities));
- }
-
- final NetworkState prev = mNetworkMap.get(ns.network);
- mNetworkMap.put(ns.network,
- new NetworkState(null, prev.linkProperties, ns.networkCapabilities,
- ns.network, null, null));
- return mNetworkMap.get(ns.network);
- }
- case EVENT_ON_LINKPROPERTIES: {
- final NetworkState ns = (NetworkState) obj;
- if (!mNetworkMap.containsKey(ns.network)) {
- // Ignore updates for networks for which we have not yet
- // received onAvailable() - which should never happen -
- // or for which we have already received onLost().
- return null;
- }
- if (VDBG) {
- Log.d(TAG, String.format("EVENT_ON_LINKPROPERTIES for %s: %s",
- ns.network, ns.linkProperties));
- }
-
- final NetworkState prev = mNetworkMap.get(ns.network);
- mNetworkMap.put(ns.network,
- new NetworkState(null, ns.linkProperties, prev.networkCapabilities,
- ns.network, null, null));
- return mNetworkMap.get(ns.network);
- }
- case EVENT_ON_LOST: {
- final Network network = (Network) obj;
- if (VDBG) {
- Log.d(TAG, "EVENT_ON_LOST for " + network);
- }
- return mNetworkMap.remove(network);
- }
- default:
- return null;
+ private void handleAvailable(Network network) {
+ if (VDBG) {
+ Log.d(TAG, "EVENT_ON_AVAILABLE for " + network);
}
+ if (!mNetworkMap.containsKey(network)) {
+ mNetworkMap.put(network,
+ new NetworkState(null, null, null, network, null, null));
+ }
+
+ final ConnectivityManager cm = cm();
+
+ if (mDefaultNetworkCallback != null) {
+ cm.requestNetworkCapabilities(mDefaultNetworkCallback);
+ cm.requestLinkProperties(mDefaultNetworkCallback);
+ }
+
+ // Requesting updates for mDunTetheringCallback is not
+ // necessary. Because it's a listen, it will already have
+ // heard all NetworkCapabilities and LinkProperties updates
+ // since UpstreamNetworkMonitor was started. Because we
+ // start UpstreamNetworkMonitor before chooseUpstreamType()
+ // is ever invoked (it can register a DUN request) this is
+ // mostly safe. However, if a DUN network is already up for
+ // some reason (unlikely, because DUN is restricted and,
+ // unless the DUN network is shared with another APN, only
+ // the system can request it and this is the only part of
+ // the system that requests it) we won't know its
+ // LinkProperties or NetworkCapabilities.
+
+ notifyTarget(EVENT_ON_AVAILABLE, network);
+ }
+
+ private void handleNetCap(Network network, NetworkCapabilities newNc) {
+ if (!mNetworkMap.containsKey(network)) {
+ // Ignore updates for networks for which we have not yet
+ // received onAvailable() - which should never happen -
+ // or for which we have already received onLost().
+ return;
+ }
+ if (VDBG) {
+ Log.d(TAG, String.format("EVENT_ON_CAPABILITIES for %s: %s",
+ network, newNc));
+ }
+
+ final NetworkState prev = mNetworkMap.get(network);
+ mNetworkMap.put(network,
+ new NetworkState(null, prev.linkProperties, newNc,
+ network, null, null));
+ notifyTarget(EVENT_ON_CAPABILITIES, network);
+ }
+
+ private void handleLinkProp(Network network, LinkProperties newLp) {
+ if (!mNetworkMap.containsKey(network)) {
+ // Ignore updates for networks for which we have not yet
+ // received onAvailable() - which should never happen -
+ // or for which we have already received onLost().
+ return;
+ }
+ if (VDBG) {
+ Log.d(TAG, String.format("EVENT_ON_LINKPROPERTIES for %s: %s",
+ network, newLp));
+ }
+
+ final NetworkState prev = mNetworkMap.get(network);
+ mNetworkMap.put(network,
+ new NetworkState(null, newLp, prev.networkCapabilities,
+ network, null, null));
+ notifyTarget(EVENT_ON_LINKPROPERTIES, network);
+ }
+
+ private void handleLost(Network network) {
+ if (!mNetworkMap.containsKey(network)) {
+ // Ignore updates for networks for which we have not yet
+ // received onAvailable() - which should never happen -
+ // or for which we have already received onLost().
+ return;
+ }
+ if (VDBG) {
+ Log.d(TAG, "EVENT_ON_LOST for " + network);
+ }
+ notifyTarget(EVENT_ON_LOST, mNetworkMap.remove(network));
+ }
+
+ // Fetch (and cache) a ConnectivityManager only if and when we need one.
+ private ConnectivityManager cm() {
+ if (mCM == null) {
+ mCM = mContext.getSystemService(ConnectivityManager.class);
+ }
+ return mCM;
+ }
+
+ /**
+ * A NetworkCallback class that relays information of interest to the
+ * tethering master state machine thread for subsequent processing.
+ */
+ private class UpstreamNetworkCallback extends NetworkCallback {
+ @Override
+ public void onAvailable(Network network) {
+ mTarget.getHandler().post(() -> handleAvailable(network));
+ }
+
+ @Override
+ public void onCapabilitiesChanged(Network network, NetworkCapabilities newNc) {
+ mTarget.getHandler().post(() -> handleNetCap(network, newNc));
+ }
+
+ @Override
+ public void onLinkPropertiesChanged(Network network, LinkProperties newLp) {
+ mTarget.getHandler().post(() -> handleLinkProp(network, newLp));
+ }
+
+ @Override
+ public void onLost(Network network) {
+ mTarget.getHandler().post(() -> handleLost(network));
+ }
+ }
+
+ private void releaseCallback(NetworkCallback cb) {
+ if (cb != null) cm().unregisterNetworkCallback(cb);
+ }
+
+ private void notifyTarget(int which, Network network) {
+ notifyTarget(which, mNetworkMap.get(network));
+ }
+
+ private void notifyTarget(int which, NetworkState netstate) {
+ mTarget.sendMessage(mWhat, which, 0, netstate);
}
}
@@ -1715,9 +1734,7 @@
mTryCell = !mTryCell;
break;
case EVENT_UPSTREAM_CALLBACK: {
- // First: always update local state about every network.
- final NetworkState ns = mUpstreamNetworkMonitor.processCallback(
- message.arg1, message.obj);
+ final NetworkState ns = (NetworkState) message.obj;
if (ns == null || !pertainsToCurrentUpstream(ns)) {
// TODO: In future, this is where upstream evaluation and selection
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 477ecdf..015345c 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -577,6 +577,9 @@
brightness = mPowerRequest.dozeScreenBrightness;
}
break;
+ case DisplayPowerRequest.POLICY_VR:
+ state = Display.STATE_VR;
+ break;
case DisplayPowerRequest.POLICY_DIM:
case DisplayPowerRequest.POLICY_BRIGHT:
default:
@@ -618,6 +621,7 @@
// Animate the screen state change unless already animating.
// The transition may be deferred, so after this point we will use the
// actual state instead of the desired one.
+ final int oldState = mPowerState.getScreenState();
animateScreenStateChange(state, performScreenOffTransition);
state = mPowerState.getScreenState();
@@ -717,9 +721,10 @@
}
// Animate the screen brightness when the screen is on or dozing.
- // Skip the animation when the screen is off or suspended.
+ // Skip the animation when the screen is off or suspended or transition to/from VR.
if (!mPendingScreenOff) {
- if (state == Display.STATE_ON || state == Display.STATE_DOZE) {
+ boolean wasOrWillBeInVr = (state == Display.STATE_VR || oldState == Display.STATE_VR);
+ if ((state == Display.STATE_ON || state == Display.STATE_DOZE) && !wasOrWillBeInVr) {
animateScreenBrightness(brightness,
slowChange ? mBrightnessRampRateSlow : mBrightnessRampRateFast);
} else {
@@ -903,6 +908,23 @@
mPowerState.setColorFadeLevel(1.0f);
mPowerState.dismissColorFade();
}
+ } else if (target == Display.STATE_VR) {
+ // Wait for brightness animation to complete beforehand when entering VR
+ // from screen on to prevent a perceptible jump because brightness may operate
+ // differently when the display is configured for dozing.
+ if (mScreenBrightnessRampAnimator.isAnimating()
+ && mPowerState.getScreenState() == Display.STATE_ON) {
+ return;
+ }
+
+ // Set screen state.
+ if (!setScreenState(Display.STATE_VR)) {
+ return; // screen on blocked
+ }
+
+ // Dismiss the black surface without fanfare.
+ mPowerState.setColorFadeLevel(1.0f);
+ mPowerState.dismissColorFade();
} else if (target == Display.STATE_DOZE) {
// Want screen dozing.
// Wait for brightness animation to complete beforehand when entering doze
diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
index 61c2eac..8673225 100644
--- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
@@ -471,6 +471,16 @@
}
}
+ // If the state change was from or to VR, then we need to tell the light
+ // so that it can apply appropriate VR brightness settings. This should
+ // happen prior to changing the brightness but also if there is no
+ // brightness change at all.
+ if ((state == Display.STATE_VR || currentState == Display.STATE_VR) &&
+ currentState != state) {
+ setVrMode(state == Display.STATE_VR);
+ }
+
+
// Apply brightness changes given that we are in a non-suspended state.
if (brightnessChanged) {
setDisplayBrightness(brightness);
@@ -482,6 +492,15 @@
}
}
+ private void setVrMode(boolean isVrEnabled) {
+ if (DEBUG) {
+ Slog.d(TAG, "setVrMode("
+ + "id=" + displayId
+ + ", state=" + Display.stateToString(state) + ")");
+ }
+ mBacklight.setVrMode(isVrEnabled);
+ }
+
private void setDisplayState(int state) {
if (DEBUG) {
Slog.d(TAG, "setDisplayState("
diff --git a/services/core/java/com/android/server/lights/Light.java b/services/core/java/com/android/server/lights/Light.java
index 0bab86b..b5ec603 100644
--- a/services/core/java/com/android/server/lights/Light.java
+++ b/services/core/java/com/android/server/lights/Light.java
@@ -46,4 +46,5 @@
public abstract void pulse();
public abstract void pulse(int color, int onMS);
public abstract void turnOff();
+ public abstract void setVrMode(boolean enabled);
}
diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
index bba0a50..e07156e 100644
--- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
+/* * Copyright (C) 2008 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.
@@ -17,18 +16,13 @@
package com.android.server.lights;
import com.android.server.SystemService;
-import com.android.server.vr.VrManagerService;
import android.app.ActivityManager;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
-import android.os.RemoteException;
import android.os.Trace;
-import android.os.UserHandle;
import android.provider.Settings;
-import android.service.vr.IVrManager;
-import android.service.vr.IVrStateCallbacks;
import android.util.Slog;
public class LightsService extends SystemService {
@@ -36,7 +30,6 @@
static final boolean DEBUG = false;
final LightImpl mLights[] = new LightImpl[LightsManager.LIGHT_ID_COUNT];
- private boolean mVrModeEnabled;
private final class LightImpl extends Light {
@@ -52,6 +45,13 @@
@Override
public void setBrightness(int brightness, int brightnessMode) {
synchronized (this) {
+ // LOW_PERSISTENCE cannot be manually set
+ if (brightnessMode == BRIGHTNESS_MODE_LOW_PERSISTENCE) {
+ Slog.w(TAG, "setBrightness with LOW_PERSISTENCE unexpected #" + mId +
+ ": brightness=0x" + Integer.toHexString(brightness));
+ return;
+ }
+
int color = brightness & 0x000000ff;
color = 0xff000000 | (color << 16) | (color << 8) | color;
setLightLocked(color, LIGHT_FLASH_NONE, 0, 0, brightnessMode);
@@ -80,11 +80,9 @@
@Override
public void pulse(int color, int onMS) {
synchronized (this) {
- if (mBrightnessMode == BRIGHTNESS_MODE_LOW_PERSISTENCE) {
- return;
- }
if (mColor == 0 && !mFlashing) {
- setLightLocked(color, LIGHT_FLASH_HARDWARE, onMS, 1000, BRIGHTNESS_MODE_USER);
+ setLightLocked(color, LIGHT_FLASH_HARDWARE, onMS, 1000,
+ BRIGHTNESS_MODE_USER);
mColor = 0;
mH.sendMessageDelayed(Message.obtain(mH, 1, this), onMS);
}
@@ -98,17 +96,23 @@
}
}
- void enableLowPersistence() {
- synchronized(this) {
- setLightLocked(0, LIGHT_FLASH_NONE, 0, 0, BRIGHTNESS_MODE_LOW_PERSISTENCE);
- mLocked = true;
- }
- }
+ @Override
+ public void setVrMode(boolean enabled) {
+ synchronized (this) {
+ if (mVrModeEnabled != enabled) {
+ mVrModeEnabled = enabled;
- void disableLowPersistence() {
- synchronized(this) {
- mLocked = false;
- setLightLocked(mLastColor, LIGHT_FLASH_NONE, 0, 0, mLastBrightnessMode);
+ mUseLowPersistenceForVR =
+ (getVrDisplayMode() == Settings.Secure.VR_DISPLAY_MODE_LOW_PERSISTENCE);
+ if (shouldBeInLowPersistenceMode()) {
+ mLastBrightnessMode = mBrightnessMode;
+ }
+
+ // NOTE: We do not trigger a call to setLightLocked here. We do not know the
+ // current brightness or other values when leaving VR so we avoid any incorrect
+ // jumps. The code that calls this method will immediately issue a brightness
+ // update which is when the change will occur.
+ }
}
}
@@ -119,7 +123,13 @@
}
private void setLightLocked(int color, int mode, int onMS, int offMS, int brightnessMode) {
- if (!mLocked && (color != mColor || mode != mMode || onMS != mOnMS || offMS != mOffMS ||
+ if (shouldBeInLowPersistenceMode()) {
+ brightnessMode = BRIGHTNESS_MODE_LOW_PERSISTENCE;
+ } else if (brightnessMode == BRIGHTNESS_MODE_LOW_PERSISTENCE) {
+ brightnessMode = mLastBrightnessMode;
+ }
+
+ if ((color != mColor || mode != mMode || onMS != mOnMS || offMS != mOffMS ||
mBrightnessMode != brightnessMode)) {
if (DEBUG) Slog.v(TAG, "setLight #" + mId + ": color=#"
+ Integer.toHexString(color) + ": brightnessMode=" + brightnessMode);
@@ -128,7 +138,6 @@
mMode = mode;
mOnMS = onMS;
mOffMS = offMS;
- mLastBrightnessMode = mBrightnessMode;
mBrightnessMode = brightnessMode;
Trace.traceBegin(Trace.TRACE_TAG_POWER, "setLight(" + mId + ", 0x"
+ Integer.toHexString(color) + ")");
@@ -140,6 +149,10 @@
}
}
+ private boolean shouldBeInLowPersistenceMode() {
+ return mVrModeEnabled && mUseLowPersistenceForVR;
+ }
+
private int mId;
private int mColor;
private int mMode;
@@ -149,7 +162,8 @@
private int mBrightnessMode;
private int mLastBrightnessMode;
private int mLastColor;
- private boolean mLocked;
+ private boolean mVrModeEnabled;
+ private boolean mUseLowPersistenceForVR;
}
public LightsService(Context context) {
@@ -167,17 +181,6 @@
@Override
public void onBootPhase(int phase) {
- if (phase == PHASE_SYSTEM_SERVICES_READY) {
- IVrManager vrManager =
- (IVrManager) getBinderService(VrManagerService.VR_MANAGER_BINDER_SERVICE);
- if (vrManager != null) {
- try {
- vrManager.registerListener(mVrStateCallbacks);
- } catch (RemoteException e) {
- Slog.e(TAG, "Failed to register VR mode state listener: " + e);
- }
- }
- }
}
private int getVrDisplayMode() {
@@ -188,30 +191,6 @@
currentUser);
}
- private final IVrStateCallbacks mVrStateCallbacks = new IVrStateCallbacks.Stub() {
- @Override
- public void onVrStateChanged(boolean enabled) throws RemoteException {
- LightImpl l = mLights[LightsManager.LIGHT_ID_BACKLIGHT];
- int vrDisplayMode = getVrDisplayMode();
-
- // User leaves VR mode before altering display settings.
- if (enabled && vrDisplayMode == Settings.Secure.VR_DISPLAY_MODE_LOW_PERSISTENCE) {
- if (!mVrModeEnabled) {
- if (DEBUG)
- Slog.v(TAG, "VR mode enabled, setting brightness to low persistence");
- l.enableLowPersistence();
- mVrModeEnabled = true;
- }
- } else {
- if (mVrModeEnabled) {
- if (DEBUG) Slog.v(TAG, "VR mode disabled, resetting brightnes");
- l.disableLowPersistence();
- mVrModeEnabled = false;
- }
- }
- }
- };
-
private final LightsManager mService = new LightsManager() {
@Override
public Light getLight(int id) {
diff --git a/services/core/java/com/android/server/location/ContextHubService.java b/services/core/java/com/android/server/location/ContextHubService.java
index 1262737..a4c0fa8 100644
--- a/services/core/java/com/android/server/location/ContextHubService.java
+++ b/services/core/java/com/android/server/location/ContextHubService.java
@@ -29,9 +29,6 @@
import android.hardware.location.NanoAppInstanceInfo;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.service.vr.IVrManager;
-import android.service.vr.IVrStateCallbacks;
import android.util.Log;
import java.io.FileDescriptor;
@@ -51,7 +48,6 @@
private static final String ENFORCE_HW_PERMISSION_MESSAGE = "Permission '"
+ HARDWARE_PERMISSION + "' not granted to access ContextHub Hardware";
-
public static final int ANY_HUB = -1;
public static final int MSG_LOAD_NANO_APP = 3;
public static final int MSG_UNLOAD_NANO_APP = 4;
@@ -73,8 +69,6 @@
private static final int OS_APP_INSTANCE = -1;
- private static final long APP_ID_ACTIVITY_RECOGNITION = 0x476f6f676c001000L;
-
private final Context mContext;
private final ConcurrentHashMap<Integer, NanoAppInstanceInfo> mNanoAppHash =
new ConcurrentHashMap<>();
@@ -85,18 +79,6 @@
private native int nativeSendMessage(int[] header, byte[] data);
private native ContextHubInfo[] nativeInitialize();
- private final IVrStateCallbacks mVrStateCallbacks = new IVrStateCallbacks.Stub() {
- @Override
- public void onVrStateChanged(boolean enabled) {
- for (NanoAppInstanceInfo app : mNanoAppHash.values()) {
- if (app.getAppId() == APP_ID_ACTIVITY_RECOGNITION) {
- sendVrStateChangeMessageToApp(app, enabled);
- break;
- }
- }
- }
- };
-
public ContextHubService(Context context) {
mContext = context;
mContextHubInfo = nativeInitialize();
@@ -105,18 +87,6 @@
Log.d(TAG, "ContextHub[" + i + "] id: " + mContextHubInfo[i].getId()
+ ", name: " + mContextHubInfo[i].getName());
}
-
- if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_VR_MODE)) {
- IVrManager vrManager =
- IVrManager.Stub.asInterface(ServiceManager.getService("vrmanager"));
- if (vrManager != null) {
- try {
- vrManager.registerListener(mVrStateCallbacks);
- } catch (RemoteException e) {
- Log.e(TAG, "VR state listener registration failed", e);
- }
- }
- }
}
@Override
@@ -394,19 +364,4 @@
return 0;
}
-
- private void sendVrStateChangeMessageToApp(NanoAppInstanceInfo app, boolean vrModeEnabled) {
- int[] msgHeader = new int[MSG_HEADER_SIZE];
- msgHeader[HEADER_FIELD_MSG_TYPE] = 0;
- msgHeader[HEADER_FIELD_MSG_VERSION] = 0;
- msgHeader[HEADER_FIELD_HUB_HANDLE] = ANY_HUB;
- msgHeader[HEADER_FIELD_APP_INSTANCE] = app.getHandle();
-
- byte[] data = new byte[1];
- data[0] = (byte) ((vrModeEnabled) ? 1 : 0);
- int ret = nativeSendMessage(msgHeader, data);
- if (ret != 0) {
- Log.e(TAG, "Couldn't send VR state change notification (" + ret + ")!");
- }
- }
}
diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java
index 4c58ffd..9b37f12 100644
--- a/services/core/java/com/android/server/media/MediaSessionService.java
+++ b/services/core/java/com/android/server/media/MediaSessionService.java
@@ -351,7 +351,7 @@
*/
private void enforceMediaPermissions(ComponentName compName, int pid, int uid,
int resolvedUserId) {
- if (isCurrentVolumeController(uid)) return;
+ if (isCurrentVolumeController(uid, pid)) return;
if (getContext()
.checkPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL, pid, uid)
!= PackageManager.PERMISSION_GRANTED
@@ -361,20 +361,13 @@
}
}
- private boolean isCurrentVolumeController(int uid) {
- if (mAudioManagerInternal != null) {
- final int vcuid = mAudioManagerInternal.getVolumeControllerUid();
- if (vcuid > 0 && uid == vcuid) {
- return true;
- }
- }
- return false;
+ private boolean isCurrentVolumeController(int uid, int pid) {
+ return getContext().checkPermission(android.Manifest.permission.STATUS_BAR_SERVICE,
+ pid, uid) == PackageManager.PERMISSION_GRANTED;
}
private void enforceSystemUiPermission(String action, int pid, int uid) {
- if (isCurrentVolumeController(uid)) return;
- if (getContext().checkPermission(android.Manifest.permission.STATUS_BAR_SERVICE,
- pid, uid) != PackageManager.PERMISSION_GRANTED) {
+ if (!isCurrentVolumeController(uid, pid)) {
throw new SecurityException("Only system ui may " + action);
}
}
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index b08f800..0cac406 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -55,7 +55,6 @@
import android.app.AutomaticZenRule;
import android.app.backup.BackupManager;
import android.app.IActivityManager;
-import android.app.IOnNotificationChannelCreatedListener;
import android.app.INotificationManager;
import android.app.ITransientNotification;
import android.app.Notification;
@@ -944,22 +943,16 @@
mPackageManager = packageManager;
}
- // TODO: This probably should not be mocked, it's an implementation detail.
+ // TODO: Tests should call onStart instead once the methods above are removed.
@VisibleForTesting
- void setRankingHelper(RankingHelper rankingHelper) {
- mRankingHelper = rankingHelper;
- }
-
- @Override
- public void onStart() {
+ void init(IPackageManager packageManager, LightsManager lightsManager) {
Resources resources = getContext().getResources();
-
mMaxPackageEnqueueRate = Settings.Global.getFloat(getContext().getContentResolver(),
Settings.Global.MAX_NOTIFICATION_ENQUEUE_RATE,
DEFAULT_MAX_NOTIFICATION_ENQUEUE_RATE);
mAm = ActivityManager.getService();
- mPackageManager = AppGlobals.getPackageManager();
+ mPackageManager = packageManager;
mAppOps = (AppOpsManager) getContext().getSystemService(Context.APP_OPS_SERVICE);
mVibrator = (Vibrator) getContext().getSystemService(Context.VIBRATOR_SERVICE);
mAppUsageStats = LocalServices.getService(UsageStatsManagerInternal.class);
@@ -1065,9 +1058,8 @@
mStatusBar.setNotificationDelegate(mNotificationDelegate);
}
- final LightsManager lights = getLocalService(LightsManager.class);
- mNotificationLight = lights.getLight(LightsManager.LIGHT_ID_NOTIFICATIONS);
- mAttentionLight = lights.getLight(LightsManager.LIGHT_ID_ATTENTION);
+ mNotificationLight = lightsManager.getLight(LightsManager.LIGHT_ID_NOTIFICATIONS);
+ mAttentionLight = lightsManager.getLight(LightsManager.LIGHT_ID_ATTENTION);
mDefaultNotificationColor = resources.getColor(
R.color.config_defaultNotificationColor);
@@ -1134,7 +1126,11 @@
mArchive = new Archive(resources.getInteger(
R.integer.config_notificationServiceArchiveSize));
+ }
+ @Override
+ public void onStart() {
+ init(AppGlobals.getPackageManager(), getLocalService(LightsManager.class));
publishBinderService(Context.NOTIFICATION_SERVICE, mService);
publishLocalService(NotificationManagerInternal.class, mInternalService);
}
@@ -1514,13 +1510,18 @@
}
@Override
- public void createNotificationChannel(String pkg, NotificationChannel channel,
- IOnNotificationChannelCreatedListener listener) throws RemoteException {
+ public void createNotificationChannels(String pkg,
+ ParceledListSlice channelsList) throws RemoteException {
checkCallerIsSystemOrSameApp(pkg);
- mRankingHelper.createNotificationChannel(pkg, Binder.getCallingUid(), channel,
- true /* fromTargetApp */);
+ List<NotificationChannel> channels = channelsList.getList();
+ final int channelsSize = channels.size();
+ for (int i = 0; i < channelsSize; i++) {
+ final NotificationChannel channel = channels.get(i);
+ Preconditions.checkNotNull(channel, "channel in list is null");
+ mRankingHelper.createNotificationChannel(pkg, Binder.getCallingUid(), channel,
+ true /* fromTargetApp */);
+ }
savePolicyFile();
- listener.onNotificationChannelCreated(channel);
}
@Override
@@ -1552,7 +1553,7 @@
public void updateNotificationChannelForPackage(String pkg, int uid,
NotificationChannel channel) {
enforceSystemOrSystemUI("Caller not system or systemui");
- if (!channel.isAllowed()) {
+ if (channel.getImportance() == NotificationManager.IMPORTANCE_NONE) {
// cancel
cancelAllNotificationsInt(MY_UID, MY_PID, pkg, channel.getId(), 0, 0, true,
UserHandle.getUserId(Binder.getCallingUid()), REASON_CHANNEL_BANNED,
@@ -1828,7 +1829,7 @@
*
* {@see com.android.server.StatusBarManagerService.NotificationCallbacks#onNotificationClear}
*
- * @param token The binder for the listener, to check that the caller is allowed
+ * @param info The binder for the listener, to check that the caller is allowed
*/
private void cancelNotificationFromListenerLocked(ManagedServiceInfo info,
int callingUid, int callingPid, String pkg, String tag, int id, int userId) {
@@ -1839,7 +1840,24 @@
}
/**
- * Allow an INotificationListener to snooze a single notification.
+ * Allow an INotificationListener to snooze a single notification until a context.
+ *
+ * @param token The binder for the listener, to check that the caller is allowed
+ */
+ @Override
+ public void snoozeNotificationUntilContextFromListener(INotificationListener token,
+ String key, String snoozeCriterionId) {
+ long identity = Binder.clearCallingIdentity();
+ try {
+ final ManagedServiceInfo info = mListeners.checkServiceTokenLocked(token);
+ snoozeNotificationInt(key, snoozeCriterionId, info);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
+ /**
+ * Allow an INotificationListener to snooze a single notification until a time.
*
* @param token The binder for the listener, to check that the caller is allowed
*/
@@ -2021,13 +2039,13 @@
@Override
public ZenModeConfig getZenModeConfig() {
- enforceSystemOrSystemUIOrVolume("INotificationManager.getZenModeConfig");
+ enforceSystemOrSystemUI("INotificationManager.getZenModeConfig");
return mZenModeHelper.getConfig();
}
@Override
public void setZenMode(int mode, Uri conditionId, String reason) throws RemoteException {
- enforceSystemOrSystemUIOrVolume("INotificationManager.setZenMode");
+ enforceSystemOrSystemUI("INotificationManager.setZenMode");
final long identity = Binder.clearCallingIdentity();
try {
mZenModeHelper.setManualZenMode(mode, conditionId, null, reason);
@@ -2149,16 +2167,6 @@
}
}
- private void enforceSystemOrSystemUIOrVolume(String message) {
- if (mAudioManagerInternal != null) {
- final int vcuid = mAudioManagerInternal.getVolumeControllerUid();
- if (vcuid > 0 && Binder.getCallingUid() == vcuid) {
- return;
- }
- }
- enforceSystemOrSystemUI(message);
- }
-
private void enforceSystemOrSystemUI(String message) {
if (isCallerSystem()) return;
getContext().enforceCallingPermission(android.Manifest.permission.STATUS_BAR_SERVICE,
@@ -2261,7 +2269,7 @@
@Override
public boolean isSystemConditionProviderEnabled(String path) {
- enforceSystemOrSystemUIOrVolume("INotificationManager.isSystemConditionProviderEnabled");
+ enforceSystemOrSystemUI("INotificationManager.isSystemConditionProviderEnabled");
return mConditionProviders.isSystemProviderEnabled(path);
}
@@ -2451,7 +2459,7 @@
public void updateNotificationChannelFromAssistant(INotificationListener token, String pkg,
NotificationChannel channel) throws RemoteException {
ManagedServiceInfo info = mNotificationAssistants.checkServiceTokenLocked(token);
- if (!channel.isAllowed()) {
+ if (channel.getImportance() == NotificationManager.IMPORTANCE_NONE) {
// cancel
cancelAllNotificationsInt(MY_UID, MY_PID, pkg, channel.getId(), 0, 0, true,
info.userid, REASON_CHANNEL_BANNED, null);
@@ -2577,6 +2585,9 @@
}
}
if (summaryRecord != null) {
+ synchronized (mEnqueuedNotifications) {
+ mEnqueuedNotifications.add(summaryRecord);
+ }
mHandler.post(new EnqueueNotificationRunnable(userId, summaryRecord));
}
}
@@ -2995,7 +3006,7 @@
}
final boolean isBlocked = r.getImportance() == NotificationManager.IMPORTANCE_NONE
- || !r.getChannel().isAllowed()
+ || r.getChannel().getImportance() == NotificationManager.IMPORTANCE_NONE
|| !noteNotificationOp(pkg, callingUid);
if (isBlocked) {
Slog.e(TAG, "Suppressing notification from package by user request.");
@@ -3854,12 +3865,31 @@
}
}
+ void snoozeNotificationInt(String key, String snoozeCriterionId, ManagedServiceInfo listener) {
+ String listenerName = listener == null ? null : listener.component.toShortString();
+ // TODO: write to event log
+ if (DBG) {
+ Slog.d(TAG, String.format("snooze event(%s, %s, %s)",
+ key, snoozeCriterionId, listenerName));
+ }
+ synchronized (mNotificationList) {
+ final NotificationRecord r = mNotificationsByKey.get(key);
+ if (r != null) {
+ mNotificationList.remove(r);
+ cancelNotificationLocked(r, false, REASON_SNOOZED);
+ mNotificationAssistants.notifyAssistantSnoozedLocked(r.sbn, snoozeCriterionId);
+ updateLightsLocked();
+ mSnoozeHelper.snooze(r);
+ savePolicyFile();
+ }
+ }
+ }
+
void snoozeNotificationInt(String key, long until, ManagedServiceInfo listener) {
String listenerName = listener == null ? null : listener.component.toShortString();
// TODO: write to event log
if (DBG) {
- Slog.d(TAG, String.format("snooze event(%s, %d, %s)", key, until,
- listenerName));
+ Slog.d(TAG, String.format("snooze event(%s, %d, %s)", key, until, listenerName));
}
if (until < System.currentTimeMillis()) {
return;
@@ -3870,7 +3900,7 @@
mNotificationList.remove(r);
cancelNotificationLocked(r, false, REASON_SNOOZED);
updateLightsLocked();
- mSnoozeHelper.snooze(r, r.getUser().getIdentifier(), until);
+ mSnoozeHelper.snooze(r, until);
savePolicyFile();
}
}
@@ -3888,7 +3918,7 @@
mNotificationList.remove(r);
cancelNotificationLocked(r, false, REASON_SNOOZED);
updateLightsLocked();
- mSnoozeHelper.snooze(r, r.getUser().getIdentifier());
+ mSnoozeHelper.snooze(r);
savePolicyFile();
}
}
@@ -3900,8 +3930,8 @@
if (DBG) {
Slog.d(TAG, String.format("unsnooze event(%s, %s)", key, listenerName));
}
- mSnoozeHelper.repost(key, Binder.getCallingUid());
- savePolicyFile();
+ mSnoozeHelper.repost(key);
+ savePolicyFile();
}
void cancelAllLocked(int callingUid, int callingPid, int userId, int reason,
@@ -4282,6 +4312,33 @@
}
}
+ /**
+ * asynchronously notify the assistant that a notification has been snoozed until a
+ * context
+ */
+ public void notifyAssistantSnoozedLocked(final StatusBarNotification sbn,
+ final String snoozeCriterionId) {
+ TrimCache trimCache = new TrimCache(sbn);
+ for (final ManagedServiceInfo info : mServices) {
+ final StatusBarNotification sbnToPost = trimCache.ForListener(info);
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ final INotificationListener assistant =
+ (INotificationListener) info.service;
+ StatusBarNotificationHolder sbnHolder
+ = new StatusBarNotificationHolder(sbnToPost);
+ try {
+ assistant.onNotificationSnoozedUntilContext(
+ sbnHolder, snoozeCriterionId);
+ } catch (RemoteException ex) {
+ Log.e(TAG, "unable to notify assistant (snoozed): " + assistant, ex);
+ }
+ }
+ });
+ }
+ }
+
public boolean isEnabled() {
return !mServices.isEmpty();
}
diff --git a/services/core/java/com/android/server/notification/RankingHelper.java b/services/core/java/com/android/server/notification/RankingHelper.java
index 6474613..3fcce3c 100644
--- a/services/core/java/com/android/server/notification/RankingHelper.java
+++ b/services/core/java/com/android/server/notification/RankingHelper.java
@@ -434,7 +434,8 @@
}
if (r.channels.containsKey(channel.getId()) || channel.getName().equals(
mContext.getString(R.string.default_notification_channel_label))) {
- throw new IllegalArgumentException("Channel already exists");
+ // Channel already exists, no-op.
+ return;
}
if (channel.getImportance() < NotificationManager.IMPORTANCE_NONE
|| channel.getImportance() > NotificationManager.IMPORTANCE_MAX) {
@@ -442,11 +443,9 @@
}
// Reset fields that apps aren't allowed to set.
if (fromTargetApp) {
- channel.setShowBadge(false);
channel.setBypassDnd(r.priority == Notification.PRIORITY_MAX);
channel.setLockscreenVisibility(r.visibility);
}
- channel.setAllowed(true);
clearLockedFields(channel);
if (channel.getLockscreenVisibility() == Notification.VISIBILITY_PUBLIC) {
channel.setLockscreenVisibility(Ranking.VISIBILITY_NO_OVERRIDE);
@@ -517,9 +516,6 @@
channel.setLockscreenVisibility(updatedChannel.getLockscreenVisibility());
}
}
- if ((channel.getUserLockedFields() & NotificationChannel.USER_LOCKED_ALLOWED) == 0) {
- channel.setAllowed(updatedChannel.isAllowed());
- }
if ((channel.getUserLockedFields() & NotificationChannel.USER_LOCKED_SHOW_BADGE) == 0) {
channel.setShowBadge(updatedChannel.canShowBadge());
}
diff --git a/services/core/java/com/android/server/notification/SnoozeHelper.java b/services/core/java/com/android/server/notification/SnoozeHelper.java
index 733ff67..e14700a 100644
--- a/services/core/java/com/android/server/notification/SnoozeHelper.java
+++ b/services/core/java/com/android/server/notification/SnoozeHelper.java
@@ -28,6 +28,7 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
+import android.os.Binder;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
import android.util.ArrayMap;
@@ -68,6 +69,8 @@
mSnoozedNotifications = new ArrayMap<>();
// notification key : package.
private ArrayMap<String, String> mPackages = new ArrayMap<>();
+ // key : userId
+ private ArrayMap<String, Integer> mUsers = new ArrayMap<>();
private Callback mCallback;
public SnoozeHelper(Context context, Callback callback,
@@ -98,15 +101,16 @@
/**
* Snoozes a notification and schedules an alarm to repost at that time.
*/
- protected void snooze(NotificationRecord record, int userId, long until) {
- snooze(record, userId);
- scheduleRepost(record.sbn.getPackageName(), record.getKey(), userId, until);
+ protected void snooze(NotificationRecord record, long until) {
+ snooze(record);
+ scheduleRepost(record.sbn.getPackageName(), record.getKey(), record.getUserId(), until);
}
/**
* Records a snoozed notification.
*/
- protected void snooze(NotificationRecord record, int userId) {
+ protected void snooze(NotificationRecord record) {
+ int userId = record.getUser().getIdentifier();
if (DEBUG) {
Slog.d(TAG, "Snoozing " + record.getKey());
}
@@ -123,6 +127,7 @@
records.put(record.sbn.getPackageName(), pkgRecords);
mSnoozedNotifications.put(userId, records);
mPackages.put(record.getKey(), record.sbn.getPackageName());
+ mUsers.put(record.getKey(), userId);
}
protected boolean cancel(int userId, String pkg, String tag, int id) {
@@ -142,6 +147,7 @@
recordsForPkg.remove(key);
cancelAlarm(userId, pkg, key);
mPackages.remove(key);
+ mUsers.remove(key);
return true;
}
}
@@ -165,8 +171,10 @@
if (records != null) {
int P = records.size();
for (int k = 0; k < P; k++) {
- cancelAlarm(userId, snoozedPkgs.keyAt(j), records.keyAt(k));
- mPackages.remove(records.keyAt(k));
+ final String key = records.keyAt(k);
+ cancelAlarm(userId, snoozedPkgs.keyAt(j), key);
+ mPackages.remove(key);
+ mUsers.remove(key);
}
}
}
@@ -183,8 +191,10 @@
mSnoozedNotifications.get(userId).remove(pkg);
int N = records.size();
for (int i = 0; i < N; i++) {
- cancelAlarm(userId, pkg, records.keyAt(i));
- mPackages.remove(records.keyAt(i));
+ final String key = records.keyAt(i);
+ cancelAlarm(userId, pkg, key);
+ mPackages.remove(key);
+ mUsers.remove(key);
}
return true;
}
@@ -193,8 +203,13 @@
}
private void cancelAlarm(int userId, String pkg, String key) {
- final PendingIntent pi = createPendingIntent(pkg, key, userId);
- mAm.cancel(pi);
+ long identity = Binder.clearCallingIdentity();
+ try {
+ final PendingIntent pi = createPendingIntent(pkg, key, userId);
+ mAm.cancel(pi);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
/**
@@ -213,6 +228,13 @@
pkgRecords.put(record.getKey(), record);
}
+ protected void repost(String key) {
+ Integer userId = mUsers.get(key);
+ if (userId != null) {
+ repost(key, userId);
+ }
+ }
+
protected void repost(String key, int userId) {
final String pkg = mPackages.remove(key);
ArrayMap<String, ArrayMap<String, NotificationRecord>> records =
@@ -243,10 +265,15 @@
}
private void scheduleRepost(String pkg, String key, int userId, long time) {
- final PendingIntent pi = createPendingIntent(pkg, key, userId);
- mAm.cancel(pi);
- if (DEBUG) Slog.d(TAG, "Scheduling evaluate for " + new Date(time));
- mAm.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, time, pi);
+ long identity = Binder.clearCallingIdentity();
+ try {
+ final PendingIntent pi = createPendingIntent(pkg, key, userId);
+ mAm.cancel(pi);
+ if (DEBUG) Slog.d(TAG, "Scheduling evaluate for " + new Date(time));
+ mAm.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, time, pi);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
public void dump(PrintWriter pw, NotificationManagerService.DumpFilter filter) {
diff --git a/services/core/java/com/android/server/pm/BackgroundDexOptService.java b/services/core/java/com/android/server/pm/BackgroundDexOptService.java
index cec1058..601a219 100644
--- a/services/core/java/com/android/server/pm/BackgroundDexOptService.java
+++ b/services/core/java/com/android/server/pm/BackgroundDexOptService.java
@@ -42,12 +42,18 @@
* {@hide}
*/
public class BackgroundDexOptService extends JobService {
- static final String TAG = "BackgroundDexOptService";
+ private static final String TAG = "BackgroundDexOptService";
- static final long RETRY_LATENCY = 4 * AlarmManager.INTERVAL_HOUR;
+ private static final boolean DEBUG = false;
- static final int JOB_IDLE_OPTIMIZE = 800;
- static final int JOB_POST_BOOT_UPDATE = 801;
+ private static final long RETRY_LATENCY = 4 * AlarmManager.INTERVAL_HOUR;
+
+ private static final int JOB_IDLE_OPTIMIZE = 800;
+ private static final int JOB_POST_BOOT_UPDATE = 801;
+
+ private static final long IDLE_OPTIMIZATION_PERIOD = DEBUG
+ ? TimeUnit.MINUTES.toMillis(1)
+ : TimeUnit.DAYS.toMillis(1);
private static ComponentName sDexoptServiceName = new ComponentName(
"android",
@@ -69,7 +75,7 @@
*/
final AtomicBoolean mExitPostBootUpdate = new AtomicBoolean(false);
- private final File dataDir = Environment.getDataDirectory();
+ private final File mDataDir = Environment.getDataDirectory();
public static void schedule(Context context) {
JobScheduler js = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
@@ -86,7 +92,7 @@
js.schedule(new JobInfo.Builder(JOB_IDLE_OPTIMIZE, sDexoptServiceName)
.setRequiresDeviceIdle(true)
.setRequiresCharging(true)
- .setPeriodic(TimeUnit.DAYS.toMillis(1))
+ .setPeriodic(IDLE_OPTIMIZATION_PERIOD)
.build());
if (DEBUG_DEXOPT) {
@@ -120,7 +126,7 @@
private long getLowStorageThreshold() {
@SuppressWarnings("deprecation")
- final long lowThreshold = StorageManager.from(this).getStorageLowBytes(dataDir);
+ final long lowThreshold = StorageManager.from(this).getStorageLowBytes(mDataDir);
if (lowThreshold == 0) {
Log.e(TAG, "Invalid low storage threshold");
}
@@ -134,114 +140,127 @@
// This job has already been superseded. Do not start it.
return false;
}
-
- // Load low battery threshold from the system config. This is a 0-100 integer.
- final int lowBatteryThreshold = getResources().getInteger(
- com.android.internal.R.integer.config_lowBatteryWarningLevel);
-
- final long lowThreshold = getLowStorageThreshold();
-
- mAbortPostBootUpdate.set(false);
new Thread("BackgroundDexOptService_PostBootUpdate") {
@Override
public void run() {
- for (String pkg : pkgs) {
- if (mAbortPostBootUpdate.get()) {
- // JobScheduler requested an early abort.
- return;
- }
- if (mExitPostBootUpdate.get()) {
- // Different job, which supersedes this one, is running.
- break;
- }
- if (getBatteryLevel() < lowBatteryThreshold) {
- // Rather bail than completely drain the battery.
- break;
- }
- long usableSpace = dataDir.getUsableSpace();
- if (usableSpace < lowThreshold) {
- // Rather bail than completely fill up the disk.
- Log.w(TAG, "Aborting background dex opt job due to low storage: " +
- usableSpace);
- break;
- }
+ postBootUpdate(jobParams, pm, pkgs);
+ }
- if (DEBUG_DEXOPT) {
- Log.i(TAG, "Updating package " + pkg);
- }
+ }.start();
+ return true;
+ }
- // Update package if needed. Note that there can be no race between concurrent
- // jobs because PackageDexOptimizer.performDexOpt is synchronized.
+ private void postBootUpdate(JobParameters jobParams, PackageManagerService pm,
+ ArraySet<String> pkgs) {
+ // Load low battery threshold from the system config. This is a 0-100 integer.
+ final int lowBatteryThreshold = getResources().getInteger(
+ com.android.internal.R.integer.config_lowBatteryWarningLevel);
+ final long lowThreshold = getLowStorageThreshold();
- // checkProfiles is false to avoid merging profiles during boot which
- // might interfere with background compilation (b/28612421).
- // Unfortunately this will also means that "pm.dexopt.boot=speed-profile" will
- // behave differently than "pm.dexopt.bg-dexopt=speed-profile" but that's a
- // trade-off worth doing to save boot time work.
- pm.performDexOpt(pkg,
- /* checkProfiles */ false,
- PackageManagerService.REASON_BOOT,
- /* force */ false);
- }
- // Ran to completion, so we abandon our timeslice and do not reschedule.
- jobFinished(jobParams, /* reschedule */ false);
+ mAbortPostBootUpdate.set(false);
+
+ for (String pkg : pkgs) {
+ if (mAbortPostBootUpdate.get()) {
+ // JobScheduler requested an early abort.
+ return;
+ }
+ if (mExitPostBootUpdate.get()) {
+ // Different job, which supersedes this one, is running.
+ break;
+ }
+ if (getBatteryLevel() < lowBatteryThreshold) {
+ // Rather bail than completely drain the battery.
+ break;
+ }
+ long usableSpace = mDataDir.getUsableSpace();
+ if (usableSpace < lowThreshold) {
+ // Rather bail than completely fill up the disk.
+ Log.w(TAG, "Aborting background dex opt job due to low storage: " +
+ usableSpace);
+ break;
+ }
+
+ if (DEBUG_DEXOPT) {
+ Log.i(TAG, "Updating package " + pkg);
+ }
+
+ // Update package if needed. Note that there can be no race between concurrent
+ // jobs because PackageDexOptimizer.performDexOpt is synchronized.
+
+ // checkProfiles is false to avoid merging profiles during boot which
+ // might interfere with background compilation (b/28612421).
+ // Unfortunately this will also means that "pm.dexopt.boot=speed-profile" will
+ // behave differently than "pm.dexopt.bg-dexopt=speed-profile" but that's a
+ // trade-off worth doing to save boot time work.
+ pm.performDexOpt(pkg,
+ /* checkProfiles */ false,
+ PackageManagerService.REASON_BOOT,
+ /* force */ false);
+ }
+ // Ran to completion, so we abandon our timeslice and do not reschedule.
+ jobFinished(jobParams, /* reschedule */ false);
+ }
+
+ private boolean runIdleOptimization(final JobParameters jobParams,
+ final PackageManagerService pm, final ArraySet<String> pkgs) {
+ new Thread("BackgroundDexOptService_IdleOptimization") {
+ @Override
+ public void run() {
+ idleOptimization(jobParams, pm, pkgs);
}
}.start();
return true;
}
- private boolean runIdleOptimization(final JobParameters jobParams,
- final PackageManagerService pm, final ArraySet<String> pkgs) {
+ private void idleOptimization(JobParameters jobParams, PackageManagerService pm,
+ ArraySet<String> pkgs) {
+ Log.i(TAG, "Performing idle optimizations");
// If post-boot update is still running, request that it exits early.
mExitPostBootUpdate.set(true);
mAbortIdleOptimization.set(false);
final long lowThreshold = getLowStorageThreshold();
-
- new Thread("BackgroundDexOptService_IdleOptimization") {
- @Override
- public void run() {
- for (String pkg : pkgs) {
- if (mAbortIdleOptimization.get()) {
- // JobScheduler requested an early abort.
- return;
- }
- if (sFailedPackageNames.contains(pkg)) {
- // Skip previously failing package
- continue;
- }
-
- long usableSpace = dataDir.getUsableSpace();
- if (usableSpace < lowThreshold) {
- // Rather bail than completely fill up the disk.
- Log.w(TAG, "Aborting background dex opt job due to low storage: " +
- usableSpace);
- break;
- }
-
- // Conservatively add package to the list of failing ones in case performDexOpt
- // never returns.
- synchronized (sFailedPackageNames) {
- sFailedPackageNames.add(pkg);
- }
- // Optimize package if needed. Note that there can be no race between
- // concurrent jobs because PackageDexOptimizer.performDexOpt is synchronized.
- if (pm.performDexOpt(pkg,
- /* checkProfiles */ true,
- PackageManagerService.REASON_BACKGROUND_DEXOPT,
- /* force */ false)) {
- // Dexopt succeeded, remove package from the list of failing ones.
- synchronized (sFailedPackageNames) {
- sFailedPackageNames.remove(pkg);
- }
- }
- }
- // Ran to completion, so we abandon our timeslice and do not reschedule.
- jobFinished(jobParams, /* reschedule */ false);
+ for (String pkg : pkgs) {
+ if (mAbortIdleOptimization.get()) {
+ // JobScheduler requested an early abort.
+ return;
}
- }.start();
- return true;
+
+ synchronized (sFailedPackageNames) {
+ if (sFailedPackageNames.contains(pkg)) {
+ // Skip previously failing package
+ continue;
+ }
+ }
+
+ long usableSpace = mDataDir.getUsableSpace();
+ if (usableSpace < lowThreshold) {
+ // Rather bail than completely fill up the disk.
+ Log.w(TAG, "Aborting background dex opt job due to low storage: " +
+ usableSpace);
+ break;
+ }
+
+ // Conservatively add package to the list of failing ones in case performDexOpt
+ // never returns.
+ synchronized (sFailedPackageNames) {
+ sFailedPackageNames.add(pkg);
+ }
+ // Optimize package if needed. Note that there can be no race between
+ // concurrent jobs because PackageDexOptimizer.performDexOpt is synchronized.
+ if (pm.performDexOpt(pkg,
+ /* checkProfiles */ true,
+ PackageManagerService.REASON_BACKGROUND_DEXOPT,
+ /* force */ false)) {
+ // Dexopt succeeded, remove package from the list of failing ones.
+ synchronized (sFailedPackageNames) {
+ sFailedPackageNames.remove(pkg);
+ }
+ }
+ }
+ // Ran to completion, so we abandon our timeslice and do not reschedule.
+ jobFinished(jobParams, /* reschedule */ false);
}
@Override
diff --git a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
index 00e45fd..95023da 100644
--- a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
@@ -1000,7 +1000,7 @@
permissions.clear();
}
permissions.add(permissionGrant.name);
- grantRuntimePermissionsLPw(pkg, permissions, false,
+ grantRuntimePermissionsLPw(pkg, permissions,
permissionGrant.fixed, userId);
}
}
diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java
index 605fa5d..98249dd1 100644
--- a/services/core/java/com/android/server/pm/Installer.java
+++ b/services/core/java/com/android/server/pm/Installer.java
@@ -199,16 +199,44 @@
}
}
- public void getAppSize(String uuid, String packageName, int userId, int flags, int appId,
- long ceDataInode, String codePath, String externalUuid, PackageStats stats)
+ public void getAppSize(String uuid, String[] packageNames, int userId, int flags, int appId,
+ long[] ceDataInodes, String[] codePaths, PackageStats stats)
throws InstallerException {
if (!checkBeforeRemote()) return;
try {
- final long[] res = mInstalld.getAppSize(uuid, packageName, userId, flags, appId,
- ceDataInode, codePath, externalUuid);
+ final long[] res = mInstalld.getAppSize(uuid, packageNames, userId, flags,
+ appId, ceDataInodes, codePaths);
stats.codeSize += res[0];
stats.dataSize += res[1];
stats.cacheSize += res[2];
+ stats.externalCodeSize += res[3];
+ stats.externalDataSize += res[4];
+ stats.externalCacheSize += res[5];
+ } catch (Exception e) {
+ throw InstallerException.from(e);
+ }
+ }
+
+ public void getUserSize(String uuid, int userId, int flags, int[] appIds, PackageStats stats)
+ throws InstallerException {
+ if (!checkBeforeRemote()) return;
+ try {
+ final long[] res = mInstalld.getUserSize(uuid, userId, flags, appIds);
+ stats.codeSize += res[0];
+ stats.dataSize += res[1];
+ stats.cacheSize += res[2];
+ stats.externalCodeSize += res[3];
+ stats.externalDataSize += res[4];
+ stats.externalCacheSize += res[5];
+ } catch (Exception e) {
+ throw InstallerException.from(e);
+ }
+ }
+
+ public long[] getExternalSize(String uuid, int userId, int flags) throws InstallerException {
+ if (!checkBeforeRemote()) return new long[4];
+ try {
+ return mInstalld.getExternalSize(uuid, userId, flags);
} catch (Exception e) {
throw InstallerException.from(e);
}
diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
index 2e0199b..8e201ac 100644
--- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java
+++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
@@ -27,11 +27,13 @@
import android.util.Log;
import android.util.Slog;
+import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.IndentingPrintWriter;
import com.android.server.pm.Installer.InstallerException;
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.List;
import dalvik.system.DexFile;
@@ -43,7 +45,9 @@
import static com.android.server.pm.Installer.DEXOPT_SAFEMODE;
import static com.android.server.pm.InstructionSets.getAppDexInstructionSets;
import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets;
+
import static com.android.server.pm.PackageManagerServiceCompilerMapping.getNonProfileGuidedCompilerFilter;
+import static dalvik.system.DexFile.isProfileGuidedCompilerFilter;
/**
* Helper class for running dexopt command on packages.
@@ -92,6 +96,9 @@
int performDexOpt(PackageParser.Package pkg, String[] sharedLibraries,
String[] instructionSets, boolean checkProfiles, String targetCompilationFilter,
CompilerStats.PackageStats packageStats) {
+ if (!canOptimizePackage(pkg)) {
+ return DEX_OPT_SKIPPED;
+ }
synchronized (mInstallLock) {
final boolean useLock = mSystemReady;
if (useLock) {
@@ -110,6 +117,90 @@
}
/**
+ * Performs dexopt on all code paths of the given package.
+ * It assumes the install lock is held.
+ */
+ @GuardedBy("mInstallLock")
+ private int performDexOptLI(PackageParser.Package pkg, String[] sharedLibraries,
+ String[] targetInstructionSets, boolean checkForProfileUpdates,
+ String targetCompilerFilter, CompilerStats.PackageStats packageStats) {
+ final String[] instructionSets = targetInstructionSets != null ?
+ targetInstructionSets : getAppDexInstructionSets(pkg.applicationInfo);
+ final String[] dexCodeInstructionSets = getDexCodeInstructionSets(instructionSets);
+ final List<String> paths = pkg.getAllCodePathsExcludingResourceOnly();
+ final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid);
+
+ final String compilerFilter = getRealCompilerFilter(pkg, targetCompilerFilter);
+ final boolean profileUpdated = checkForProfileUpdates &&
+ isProfileUpdated(pkg, sharedGid, compilerFilter);
+ // TODO(calin,jeffhao): shared library paths should be adjusted to include previous code
+ // paths (b/34169257).
+ final String sharedLibrariesPath = getSharedLibrariesPath(sharedLibraries);
+ final int dexoptFlags = getDexFlags(pkg, compilerFilter);
+
+ int result = DEX_OPT_SKIPPED;
+ for (String path : paths) {
+ for (String dexCodeIsa : dexCodeInstructionSets) {
+ int newResult = dexOptPath(pkg, path, dexCodeIsa, compilerFilter, profileUpdated,
+ sharedLibrariesPath, dexoptFlags, sharedGid, packageStats);
+ // The end result is:
+ // - FAILED if any path failed,
+ // - PERFORMED if at least one path needed compilation,
+ // - SKIPPED when all paths are up to date
+ if ((result != DEX_OPT_FAILED) && (newResult != DEX_OPT_SKIPPED)) {
+ result = newResult;
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Performs dexopt on the {@code path} belonging to the package {@code pkg}.
+ *
+ * @return
+ * DEX_OPT_FAILED if there was any exception during dexopt
+ * DEX_OPT_PERFORMED if dexopt was performed successfully on the given path.
+ * DEX_OPT_SKIPPED if the path does not need to be deopt-ed.
+ */
+ @GuardedBy("mInstallLock")
+ private int dexOptPath(PackageParser.Package pkg, String path, String isa,
+ String compilerFilter, boolean profileUpdated, String sharedLibrariesPath,
+ int dexoptFlags, int uid, CompilerStats.PackageStats packageStats) {
+ int dexoptNeeded = getDexoptNeeded(path, isa, compilerFilter, profileUpdated);
+ if (Math.abs(dexoptNeeded) == DexFile.NO_DEXOPT_NEEDED) {
+ return DEX_OPT_SKIPPED;
+ }
+
+ // TODO(calin): there's no need to try to create the oat dir over and over again,
+ // especially since it involve an extra installd call. We should create
+ // if (if supported) on the fly during the dexopt call.
+ String oatDir = createOatDirIfSupported(pkg, isa);
+
+ Log.i(TAG, "Running dexopt (dexoptNeeded=" + dexoptNeeded + ") on: " + path
+ + " pkg=" + pkg.applicationInfo.packageName + " isa=" + isa
+ + " dexoptFlags=" + printDexoptFlags(dexoptFlags)
+ + " target-filter=" + compilerFilter + " oatDir=" + oatDir
+ + " sharedLibraries=" + sharedLibrariesPath);
+
+ try {
+ long startTime = System.currentTimeMillis();
+
+ mInstaller.dexopt(path, uid, pkg.packageName, isa, dexoptNeeded, oatDir, dexoptFlags,
+ compilerFilter, pkg.volumeUuid, sharedLibrariesPath);
+
+ if (packageStats != null) {
+ long endTime = System.currentTimeMillis();
+ packageStats.setCompileTime(path, (int)(endTime - startTime));
+ }
+ return DEX_OPT_PERFORMED;
+ } catch (InstallerException e) {
+ Slog.w(TAG, "Failed to dexopt", e);
+ return DEX_OPT_FAILED;
+ }
+ }
+
+ /**
* Adjust the given dexopt-needed value. Can be overridden to influence the decision to
* optimize or not (and in what way).
*/
@@ -150,151 +241,111 @@
}
}
- private int performDexOptLI(PackageParser.Package pkg, String[] sharedLibraries,
- String[] targetInstructionSets, boolean checkProfiles, String targetCompilerFilter,
- CompilerStats.PackageStats packageStats) {
- final String[] instructionSets = targetInstructionSets != null ?
- targetInstructionSets : getAppDexInstructionSets(pkg.applicationInfo);
-
- if (!canOptimizePackage(pkg)) {
- return DEX_OPT_SKIPPED;
- }
-
- final List<String> paths = pkg.getAllCodePathsExcludingResourceOnly();
- final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid);
-
- boolean isProfileGuidedFilter = DexFile.isProfileGuidedCompilerFilter(targetCompilerFilter);
- // If any part of the app is used by other apps, we cannot use profile-guided
- // compilation.
- if (isProfileGuidedFilter && isUsedByOtherApps(pkg)) {
- checkProfiles = false;
-
- targetCompilerFilter = getNonProfileGuidedCompilerFilter(targetCompilerFilter);
- if (DexFile.isProfileGuidedCompilerFilter(targetCompilerFilter)) {
- throw new IllegalStateException(targetCompilerFilter);
- }
- isProfileGuidedFilter = false;
- }
-
- // Disable profile guided compilation for vmSafeMode.
- final boolean vmSafeMode = (pkg.applicationInfo.flags & ApplicationInfo.FLAG_VM_SAFE_MODE)
- != 0;
- final boolean debuggable = (pkg.applicationInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE)
- != 0;
+ /**
+ * Returns the compiler filter that should be used to optimize the package code.
+ * The target filter will be updated if the package code is used by other apps
+ * or if it has the safe mode flag set.
+ */
+ private String getRealCompilerFilter(PackageParser.Package pkg, String targetCompilerFilter) {
+ int flags = pkg.applicationInfo.flags;
+ boolean vmSafeMode = (flags & ApplicationInfo.FLAG_VM_SAFE_MODE) != 0;
if (vmSafeMode) {
- targetCompilerFilter = getNonProfileGuidedCompilerFilter(targetCompilerFilter);
- isProfileGuidedFilter = false;
+ // For the compilation, it doesn't really matter what we return here because installd
+ // will replace the filter with interpret-only anyway.
+ // However, we return a non profile guided filter so that we simplify the logic of
+ // merging profiles.
+ // TODO(calin): safe mode path could be simplified if we pass interpret-only from
+ // here rather than letting installd decide on the filter.
+ return getNonProfileGuidedCompilerFilter(targetCompilerFilter);
}
- // If we're asked to take profile updates into account, check now.
- boolean newProfile = false;
- if (checkProfiles && isProfileGuidedFilter) {
- // Merge profiles, see if we need to do anything.
- try {
- newProfile = mInstaller.mergeProfiles(sharedGid, pkg.packageName);
- } catch (InstallerException e) {
- Slog.w(TAG, "Failed to merge profiles", e);
- }
+ if (isProfileGuidedCompilerFilter(targetCompilerFilter) && isUsedByOtherApps(pkg)) {
+ // If the dex files is used by other apps, we cannot use profile-guided compilation.
+ return getNonProfileGuidedCompilerFilter(targetCompilerFilter);
}
- boolean performedDexOpt = false;
- boolean successfulDexOpt = true;
-
- final String[] dexCodeInstructionSets = getDexCodeInstructionSets(instructionSets);
- for (String dexCodeInstructionSet : dexCodeInstructionSets) {
- for (String path : paths) {
- int dexoptNeeded;
- try {
- dexoptNeeded = DexFile.getDexOptNeeded(path,
- dexCodeInstructionSet, targetCompilerFilter, newProfile);
- } catch (IOException ioe) {
- Slog.w(TAG, "IOException reading apk: " + path, ioe);
- return DEX_OPT_FAILED;
- }
- dexoptNeeded = adjustDexoptNeeded(dexoptNeeded);
- if (PackageManagerService.DEBUG_DEXOPT) {
- Log.i(TAG, "DexoptNeeded for " + path + "@" + targetCompilerFilter + " is " +
- dexoptNeeded);
- }
-
- final String dexoptType;
- String oatDir = null;
- boolean isOdexLocation = (dexoptNeeded < 0);
- switch (Math.abs(dexoptNeeded)) {
- case DexFile.NO_DEXOPT_NEEDED:
- continue;
- case DexFile.DEX2OAT_FROM_SCRATCH:
- case DexFile.DEX2OAT_FOR_BOOT_IMAGE:
- case DexFile.DEX2OAT_FOR_FILTER:
- case DexFile.DEX2OAT_FOR_RELOCATION:
- dexoptType = "dex2oat";
- oatDir = createOatDirIfSupported(pkg, dexCodeInstructionSet);
- break;
- case DexFile.PATCHOAT_FOR_RELOCATION:
- dexoptType = "patchoat";
- break;
- default:
- throw new IllegalStateException("Invalid dexopt:" + dexoptNeeded);
- }
-
- String sharedLibrariesPath = null;
- if (sharedLibraries != null && sharedLibraries.length != 0) {
- StringBuilder sb = new StringBuilder();
- for (String lib : sharedLibraries) {
- if (sb.length() != 0) {
- sb.append(":");
- }
- sb.append(lib);
- }
- sharedLibrariesPath = sb.toString();
- }
- Log.i(TAG, "Running dexopt (" + dexoptType + ") on: " + path + " pkg="
- + pkg.applicationInfo.packageName + " isa=" + dexCodeInstructionSet
- + " vmSafeMode=" + vmSafeMode + " debuggable=" + debuggable
- + " target-filter=" + targetCompilerFilter + " oatDir=" + oatDir
- + " sharedLibraries=" + sharedLibrariesPath);
- // Profile guide compiled oat files should not be public.
- final boolean isPublic = !pkg.isForwardLocked() && !isProfileGuidedFilter;
- final int profileFlag = isProfileGuidedFilter ? DEXOPT_PROFILE_GUIDED : 0;
- final int dexFlags = adjustDexoptFlags(
- ( isPublic ? DEXOPT_PUBLIC : 0)
- | (vmSafeMode ? DEXOPT_SAFEMODE : 0)
- | (debuggable ? DEXOPT_DEBUGGABLE : 0)
- | profileFlag
- | DEXOPT_BOOTCOMPLETE);
-
- try {
- long startTime = System.currentTimeMillis();
-
- mInstaller.dexopt(path, sharedGid, pkg.packageName, dexCodeInstructionSet,
- dexoptNeeded, oatDir, dexFlags, targetCompilerFilter, pkg.volumeUuid,
- sharedLibrariesPath);
- performedDexOpt = true;
-
- if (packageStats != null) {
- long endTime = System.currentTimeMillis();
- packageStats.setCompileTime(path, (int)(endTime - startTime));
- }
- } catch (InstallerException e) {
- Slog.w(TAG, "Failed to dexopt", e);
- successfulDexOpt = false;
- }
- }
- }
-
- if (successfulDexOpt) {
- // If we've gotten here, we're sure that no error occurred. We've either
- // dex-opted one or more paths or instruction sets or we've skipped
- // all of them because they are up to date. In both cases this package
- // doesn't need dexopt any longer.
- return performedDexOpt ? DEX_OPT_PERFORMED : DEX_OPT_SKIPPED;
- } else {
- return DEX_OPT_FAILED;
- }
+ return targetCompilerFilter;
}
/**
- * Creates oat dir for the specified package. In certain cases oat directory
+ * Computes the dex flags that needs to be pass to installd for the given package and compiler
+ * filter.
+ */
+ private int getDexFlags(PackageParser.Package pkg, String compilerFilter) {
+ int flags = pkg.applicationInfo.flags;
+ boolean vmSafeMode = (flags & ApplicationInfo.FLAG_VM_SAFE_MODE) != 0;
+ boolean debuggable = (flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
+ // Profile guide compiled oat files should not be public.
+ boolean isProfileGuidedFilter = isProfileGuidedCompilerFilter(compilerFilter);
+ boolean isPublic = !pkg.isForwardLocked() && !isProfileGuidedFilter;
+ int profileFlag = isProfileGuidedFilter ? DEXOPT_PROFILE_GUIDED : 0;
+ int dexFlags =
+ (isPublic ? DEXOPT_PUBLIC : 0)
+ | (vmSafeMode ? DEXOPT_SAFEMODE : 0)
+ | (debuggable ? DEXOPT_DEBUGGABLE : 0)
+ | profileFlag
+ | DEXOPT_BOOTCOMPLETE;
+ return adjustDexoptFlags(dexFlags);
+ }
+
+ /**
+ * Assesses if there's a need to perform dexopt on {@code path} for the given
+ * configuration (isa, compiler filter, profile).
+ */
+ private int getDexoptNeeded(String path, String isa, String compilerFilter,
+ boolean newProfile) {
+ int dexoptNeeded;
+ try {
+ dexoptNeeded = DexFile.getDexOptNeeded(path, isa, compilerFilter, newProfile);
+ } catch (IOException ioe) {
+ Slog.w(TAG, "IOException reading apk: " + path, ioe);
+ return DEX_OPT_FAILED;
+ }
+ return adjustDexoptNeeded(dexoptNeeded);
+ }
+
+ /**
+ * Computes the shared libraries path that should be passed to dexopt.
+ */
+ private String getSharedLibrariesPath(String[] sharedLibraries) {
+ if (sharedLibraries == null || sharedLibraries.length == 0) {
+ return null;
+ }
+ StringBuilder sb = new StringBuilder();
+ for (String lib : sharedLibraries) {
+ if (sb.length() != 0) {
+ sb.append(":");
+ }
+ sb.append(lib);
+ }
+ return sb.toString();
+ }
+
+ /**
+ * Checks if there is an update on the profile information of the {@code pkg}.
+ * If the compiler filter is not profile guided the method returns false.
+ *
+ * Note that this is a "destructive" operation with side effects. Under the hood the
+ * current profile and the reference profile will be merged and subsequent calls
+ * may return a different result.
+ */
+ private boolean isProfileUpdated(PackageParser.Package pkg, int uid, String compilerFilter) {
+ // Check if we are allowed to merge and if the compiler filter is profile guided.
+ if (!isProfileGuidedCompilerFilter(compilerFilter)) {
+ return false;
+ }
+ // Merge profiles. It returns whether or not there was an updated in the profile info.
+ try {
+ return mInstaller.mergeProfiles(uid, pkg.packageName);
+ } catch (InstallerException e) {
+ Slog.w(TAG, "Failed to merge profiles", e);
+ }
+ return false;
+ }
+
+ /**
+ * Creates oat dir for the specified package if needed and supported.
+ * In certain cases oat directory
* <strong>cannot</strong> be created:
* <ul>
* <li>{@code pkg} is a system app, which is not updated.</li>
@@ -311,6 +362,9 @@
}
File codePath = new File(pkg.codePath);
if (codePath.isDirectory()) {
+ // TODO(calin): why do we create this only if the codePath is a directory? (i.e for
+ // cluster packages). It seems that the logic for the folder creation is
+ // split between installd and here.
File oatDir = getOatDir(codePath);
try {
mInstaller.createOatDir(oatDir.getAbsolutePath(), dexInstructionSet);
@@ -365,6 +419,27 @@
return false;
}
+ private String printDexoptFlags(int flags) {
+ ArrayList<String> flagsList = new ArrayList<>();
+
+ if ((flags & DEXOPT_BOOTCOMPLETE) == DEXOPT_BOOTCOMPLETE) {
+ flagsList.add("boot_complete");
+ }
+ if ((flags & DEXOPT_DEBUGGABLE) == DEXOPT_DEBUGGABLE) {
+ flagsList.add("debuggable");
+ }
+ if ((flags & DEXOPT_PROFILE_GUIDED) == DEXOPT_PROFILE_GUIDED) {
+ flagsList.add("profile_guided");
+ }
+ if ((flags & DEXOPT_PUBLIC) == DEXOPT_PUBLIC) {
+ flagsList.add("public");
+ }
+ if ((flags & DEXOPT_SAFEMODE) == DEXOPT_SAFEMODE) {
+ flagsList.add("safemode");
+ }
+ return String.join(",", flagsList);
+ }
+
/**
* A specialized PackageDexOptimizer that overrides already-installed checks, forcing a
* dexopt path.
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 1031588..c7be74f 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -127,6 +127,7 @@
import android.content.pm.EphemeralRequest;
import android.content.pm.EphemeralResolveInfo;
import android.content.pm.EphemeralResponse;
+import android.content.pm.FallbackCategoryProvider;
import android.content.pm.FeatureInfo;
import android.content.pm.IOnPermissionsChangeListener;
import android.content.pm.IPackageDataObserver;
@@ -2640,19 +2641,6 @@
mPackageUsage.read(mPackages);
mCompilerStats.read();
- // Read and update the usage of dex files.
- // At this point we know the code paths of the packages, so we can validate
- // the disk file and build the internal cache.
- // The usage file is expected to be small so loading and verifying it
- // should take a fairly small time compare to the other activities (e.g. package
- // scanning).
- final Map<Integer, List<PackageInfo>> userPackages = new HashMap<>();
- final int[] currentUserIds = UserManagerService.getInstance().getUserIds();
- for (int userId : currentUserIds) {
- userPackages.put(userId, getInstalledPackages(/*flags*/ 0, userId).getList());
- }
- mDexManager.load(userPackages);
-
EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_SCAN_END,
SystemClock.uptimeMillis());
Slog.i(TAG, "Time to scan packages: "
@@ -2810,6 +2798,21 @@
}
mEphemeralApplicationRegistry = new EphemeralApplicationRegistry(this);
+
+ // Read and update the usage of dex files.
+ // Do this at the end of PM init so that all the packages have their
+ // data directory reconciled.
+ // At this point we know the code paths of the packages, so we can validate
+ // the disk file and build the internal cache.
+ // The usage file is expected to be small so loading and verifying it
+ // should take a fairly small time compare to the other activities (e.g. package
+ // scanning).
+ final Map<Integer, List<PackageInfo>> userPackages = new HashMap<>();
+ final int[] currentUserIds = UserManagerService.getInstance().getUserIds();
+ for (int userId : currentUserIds) {
+ userPackages.put(userId, getInstalledPackages(/*flags*/ 0, userId).getList());
+ }
+ mDexManager.load(userPackages);
} // synchronized (mPackages)
} // synchronized (mInstallLock)
@@ -2820,6 +2823,10 @@
Runtime.getRuntime().gc();
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
+ Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "loadFallbacks");
+ FallbackCategoryProvider.loadFallbacks();
+ Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
+
// The initial scanning above does many calls into installd while
// holding the mPackages lock, but we're mostly interested in yelling
// once we have a booted system.
@@ -12954,6 +12961,27 @@
}
}
+ @Override
+ public void setApplicationCategoryHint(String packageName, int categoryHint,
+ String callerPackageName) {
+ mContext.getSystemService(AppOpsManager.class).checkPackage(Binder.getCallingUid(),
+ callerPackageName);
+ synchronized (mPackages) {
+ PackageSetting ps = mSettings.mPackages.get(packageName);
+ if (ps == null) {
+ throw new IllegalArgumentException("Unknown target package " + packageName);
+ }
+
+ if (!Objects.equals(callerPackageName, ps.installerPackageName)) {
+ throw new IllegalArgumentException("Calling package " + callerPackageName
+ + " is not installer for " + packageName);
+ }
+
+ ps.categoryHint = categoryHint;
+ scheduleWriteSettingsLocked();
+ }
+ }
+
private void processPendingInstall(final InstallArgs args, final int currentStatus) {
// Queue up an async operation since the package installation may take a little while.
mHandler.post(new Runnable() {
@@ -17439,11 +17467,6 @@
mHandler.sendMessage(msg);
}
- private boolean equals(PackageStats a, PackageStats b) {
- return (a.codeSize == b.codeSize) && (a.dataSize == b.dataSize)
- && (a.cacheSize == b.cacheSize);
- }
-
private boolean getPackageSizeInfoLI(String packageName, int userId, PackageStats stats) {
final PackageSetting ps;
synchronized (mPackages) {
@@ -17454,44 +17477,21 @@
}
}
- final long ceDataInode = ps.getCeDataInode(userId);
- final PackageStats quotaStats = new PackageStats(stats.packageName, stats.userHandle);
+ final String[] packageNames = { packageName };
+ final long[] ceDataInodes = { ps.getCeDataInode(userId) };
+ final String[] codePaths = { ps.codePathString };
- final StorageManager storage = mContext.getSystemService(StorageManager.class);
- final String externalUuid = storage.getPrimaryStorageUuid();
try {
- final long start = SystemClock.elapsedRealtimeNanos();
- mInstaller.getAppSize(ps.volumeUuid, packageName, userId, 0,
- ps.appId, ceDataInode, ps.codePathString, externalUuid, stats);
- final long stopManual = SystemClock.elapsedRealtimeNanos();
- if (ENABLE_QUOTA) {
- mInstaller.getAppSize(ps.volumeUuid, packageName, userId, Installer.FLAG_USE_QUOTA,
- ps.appId, ceDataInode, ps.codePathString, externalUuid, quotaStats);
- }
- final long stopQuota = SystemClock.elapsedRealtimeNanos();
+ mInstaller.getAppSize(ps.volumeUuid, packageNames, userId, 0,
+ ps.appId, ceDataInodes, codePaths, stats);
// For now, ignore code size of packages on system partition
if (isSystemApp(ps) && !isUpdatedSystemApp(ps)) {
stats.codeSize = 0;
- quotaStats.codeSize = 0;
- }
-
- if (ENABLE_QUOTA && Build.IS_ENG && !ps.isSharedUser()) {
- if (!equals(stats, quotaStats)) {
- Log.w(TAG, "Found discrepancy between statistics:");
- Log.w(TAG, "Manual: " + stats);
- Log.w(TAG, "Quota: " + quotaStats);
- }
- final long manualTime = stopManual - start;
- final long quotaTime = stopQuota - stopManual;
- EventLogTags.writePmPackageStats(manualTime, quotaTime,
- stats.dataSize, quotaStats.dataSize,
- stats.cacheSize, quotaStats.cacheSize);
}
// External clients expect these to be tracked separately
stats.dataSize -= stats.cacheSize;
- quotaStats.dataSize -= quotaStats.cacheSize;
} catch (InstallerException e) {
Slog.w(TAG, String.valueOf(e));
diff --git a/services/core/java/com/android/server/pm/PackageSettingBase.java b/services/core/java/com/android/server/pm/PackageSettingBase.java
index 6089d2e..9456a5c 100644
--- a/services/core/java/com/android/server/pm/PackageSettingBase.java
+++ b/services/core/java/com/android/server/pm/PackageSettingBase.java
@@ -20,6 +20,7 @@
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
+import android.content.pm.ApplicationInfo;
import android.content.pm.IntentFilterVerificationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageUserState;
@@ -129,6 +130,8 @@
boolean isOrphaned;
/** UUID of {@link VolumeInfo} hosting this app */
String volumeUuid;
+ /** The category of this app, as hinted by the installer */
+ int categoryHint = ApplicationInfo.CATEGORY_UNDEFINED;
IntentFilterVerificationInfo verificationInfo;
@@ -246,6 +249,7 @@
verificationInfo = orig.verificationInfo;
versionCode = orig.versionCode;
volumeUuid = orig.volumeUuid;
+ categoryHint = orig.categoryHint;
}
private PackageUserState modifyUserState(int userId) {
@@ -259,10 +263,11 @@
public PackageUserState readUserState(int userId) {
PackageUserState state = userState.get(userId);
- if (state != null) {
- return state;
+ if (state == null) {
+ return DEFAULT_USER_STATE;
}
- return DEFAULT_USER_STATE;
+ state.categoryHint = categoryHint;
+ return state;
}
void setEnabled(int state, int userId, String callingPackage) {
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 7187fc2..395108b 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -2673,6 +2673,10 @@
if (pkg.volumeUuid != null) {
serializer.attribute(null, "volumeUuid", pkg.volumeUuid);
}
+ if (pkg.categoryHint != ApplicationInfo.CATEGORY_UNDEFINED) {
+ serializer.attribute(null, "categoryHint",
+ Integer.toString(pkg.categoryHint));
+ }
if (pkg.parentPackageName != null) {
serializer.attribute(null, "parentPackageName", pkg.parentPackageName);
}
@@ -3538,6 +3542,8 @@
String installerPackageName = null;
String isOrphaned = null;
String volumeUuid = null;
+ String categoryHintString = null;
+ int categoryHint = ApplicationInfo.CATEGORY_UNDEFINED;
String uidError = null;
int pkgFlags = 0;
int pkgPrivateFlags = 0;
@@ -3580,6 +3586,13 @@
installerPackageName = parser.getAttributeValue(null, "installer");
isOrphaned = parser.getAttributeValue(null, "isOrphaned");
volumeUuid = parser.getAttributeValue(null, "volumeUuid");
+ categoryHintString = parser.getAttributeValue(null, "categoryHint");
+ if (categoryHintString != null) {
+ try {
+ categoryHint = Integer.parseInt(categoryHintString);
+ } catch (NumberFormatException e) {
+ }
+ }
systemStr = parser.getAttributeValue(null, "publicFlags");
if (systemStr != null) {
@@ -3731,6 +3744,7 @@
packageSetting.installerPackageName = installerPackageName;
packageSetting.isOrphaned = "true".equals(isOrphaned);
packageSetting.volumeUuid = volumeUuid;
+ packageSetting.categoryHint = categoryHint;
packageSetting.legacyNativeLibraryPathString = legacyNativeLibraryPathStr;
packageSetting.primaryCpuAbiString = primaryCpuAbiString;
packageSetting.secondaryCpuAbiString = secondaryCpuAbiString;
diff --git a/services/core/java/com/android/server/pm/ShortcutPackage.java b/services/core/java/com/android/server/pm/ShortcutPackage.java
index b745062..3085c9c 100644
--- a/services/core/java/com/android/server/pm/ShortcutPackage.java
+++ b/services/core/java/com/android/server/pm/ShortcutPackage.java
@@ -259,11 +259,6 @@
for (int i = mShortcuts.size() - 1; i >= 0; i--) {
final ShortcutInfo si = mShortcuts.valueAt(i);
- if (si.isFloating()) {
- si.setRank(0);
- si.setActivity(null);
- }
-
if (si.isAlive()) continue;
if (removeList == null) {
@@ -293,7 +288,6 @@
si.setTimestamp(now);
si.clearFlags(ShortcutInfo.FLAG_DYNAMIC);
si.setRank(0); // It may still be pinned, so clear the rank.
- si.setActivity(null);
}
}
if (changed) {
@@ -361,13 +355,17 @@
if (oldShortcut.isPinned()) {
oldShortcut.setRank(0);
- oldShortcut.setActivity(null);
oldShortcut.clearFlags(ShortcutInfo.FLAG_DYNAMIC | ShortcutInfo.FLAG_MANIFEST);
if (disable) {
oldShortcut.addFlags(ShortcutInfo.FLAG_DISABLED);
}
oldShortcut.setTimestamp(mShortcutUser.mService.injectCurrentTimeMillis());
+ // See ShortcutRequestPinProcessor.directPinShortcut().
+ if (mShortcutUser.mService.isDummyMainActivity(oldShortcut.getActivity())) {
+ oldShortcut.setActivity(null);
+ }
+
return oldShortcut;
} else {
deleteShortcutInner(shortcutId);
@@ -602,10 +600,6 @@
for (int i = mShortcuts.size() - 1; i >= 0; i--) {
final ShortcutInfo si = mShortcuts.valueAt(i);
-
- if (si.isFloating()) {
- continue; // Ignore floating shortcuts, which are not tied to any activities.
- }
final ComponentName activity = si.getActivity();
if (checked.contains(activity)) {
@@ -1368,10 +1362,6 @@
case TAG_SHORTCUT:
final ShortcutInfo si = parseShortcut(parser, packageName,
shortcutUser.getUserId());
- // Floating shortcut used to have target activities, but not anymore.
- if (si.isFloating()) { // Not really needed by just in case.
- si.setActivity(null);
- }
// Don't use addShortcut(), we don't need to save the icon.
ret.mShortcuts.put(si.getId(), si);
@@ -1478,6 +1468,7 @@
intents.clear();
intents.add(intentLegacy);
}
+
return new ShortcutInfo(
userId, id, packageName, activityComponent, /* icon =*/ null,
title, titleResId, titleResName, text, textResId, textResName,
@@ -1529,6 +1520,8 @@
boolean failed = false;
+ final ShortcutService s = mShortcutUser.mService;
+
final ArrayMap<ComponentName, ArrayList<ShortcutInfo>> all =
sortShortcutsToActivities();
@@ -1568,17 +1561,12 @@
Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
+ " is both dynamic and manifest at the same time.");
}
- if (!si.isFloating() && si.getActivity() == null) {
+ if (si.getActivity() == null && !si.isFloating()) {
failed = true;
Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
- + " is not floating, but has null activity.");
+ + " has null activity, but not floating.");
}
- if (si.isFloating() && si.getActivity() != null) {
- failed = true;
- Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
- + " is floating, but has non-null activity.");
- }
- if (!si.isFloating() && !si.isEnabled()) {
+ if ((si.isDynamic() || si.isManifestShortcut()) && !si.isEnabled()) {
failed = true;
Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
+ " is not floating, but is disabled.");
@@ -1598,10 +1586,15 @@
Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
+ " has both resource and bitmap icons");
}
+ if (s.isDummyMainActivity(si.getActivity())) {
+ failed = true;
+ Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
+ + " has a dummy target activity");
+ }
}
if (failed) {
- mShortcutUser.mService.verifyError();
+ throw new IllegalStateException("See logcat for errors");
}
}
diff --git a/services/core/java/com/android/server/pm/ShortcutRequestPinProcessor.java b/services/core/java/com/android/server/pm/ShortcutRequestPinProcessor.java
index e815f0a..c8ddf0a 100644
--- a/services/core/java/com/android/server/pm/ShortcutRequestPinProcessor.java
+++ b/services/core/java/com/android/server/pm/ShortcutRequestPinProcessor.java
@@ -16,7 +16,6 @@
package com.android.server.pm;
import android.annotation.Nullable;
-import android.app.PendingIntent;
import android.appwidget.AppWidgetProviderInfo;
import android.content.ComponentName;
import android.content.Intent;
@@ -209,7 +208,7 @@
final boolean existsAlready = existing != null;
if (DEBUG) {
- Slog.d(TAG, "requestPinnedShortcut package=" + inShortcut.getPackage()
+ Slog.d(TAG, "requestPinnedShortcut: package=" + inShortcut.getPackage()
+ " existsAlready=" + existsAlready
+ " shortcut=" + inShortcut.toInsecureString());
}
@@ -237,6 +236,14 @@
// FLAG_PINNED is still set, if it's pinned by other launchers.
shortcutForLauncher.clearFlags(ShortcutInfo.FLAG_PINNED);
} else {
+ // If the shortcut has no default activity, try to set the main activity.
+ // But in the request-pin case, it's optional, so it's okay even if the caller
+ // has no default activity.
+ if (inShortcut.getActivity() == null) {
+ inShortcut.setActivity(mService.injectGetDefaultMainActivity(
+ inShortcut.getPackage(), inShortcut.getUserId()));
+ }
+
// It doesn't exist, so it must have all mandatory fields.
mService.validateShortcutForPinRequest(inShortcut);
@@ -244,12 +251,15 @@
inShortcut.resolveResourceStrings(mService.injectGetResourcesForApplicationAsUser(
inShortcut.getPackage(), inShortcut.getUserId()));
if (DEBUG) {
- Slog.d(TAG, "resolved shortcut=" + inShortcut.toInsecureString());
+ Slog.d(TAG, "Resolved shortcut=" + inShortcut.toInsecureString());
}
// We should strip out the intent, but should preserve the icon.
shortcutForLauncher = inShortcut.clone(
ShortcutInfo.CLONE_REMOVE_FOR_LAUNCHER_APPROVAL);
}
+ if (DEBUG) {
+ Slog.d(TAG, "Sending to launcher=" + shortcutForLauncher.toInsecureString());
+ }
// Create a request object.
final PinShortcutRequestInner inner =
@@ -360,7 +370,9 @@
if (DEBUG) {
Slog.d(TAG, "Temporarily adding " + shortcutId + " as dynamic");
}
- // Add as a dynamic shortcut.
+ // Add as a dynamic shortcut. In order for a shortcut to be dynamic, it must
+ // have a target activity, so we set a dummy here. It's later removed
+ // in deleteDynamicWithId().
if (original.getActivity() == null) {
original.setActivity(mService.getDummyMainActivity(appPackageName));
}
diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java
index 86f7556..a890526 100644
--- a/services/core/java/com/android/server/pm/ShortcutService.java
+++ b/services/core/java/com/android/server/pm/ShortcutService.java
@@ -129,7 +129,6 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import java.util.Objects;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Consumer;
import java.util.function.Predicate;
@@ -413,9 +412,6 @@
@VisibleForTesting
ShortcutService(Context context, Looper looper, boolean onlyForPackageManagerApis) {
- if (DEBUG) {
- Binder.LOG_RUNTIME_EXCEPTION = true;
- }
mContext = Preconditions.checkNotNull(context);
LocalServices.addService(ShortcutServiceInternal.class, new LocalService());
mHandler = new Handler(looper);
@@ -1608,7 +1604,7 @@
private void fixUpIncomingShortcutInfo(@NonNull ShortcutInfo shortcut, boolean forUpdate,
boolean forPinRequest) {
Preconditions.checkNotNull(shortcut, "Null shortcut detected");
- if (!forPinRequest && shortcut.getActivity() != null) {
+ if (shortcut.getActivity() != null) {
Preconditions.checkState(
shortcut.getPackage().equals(shortcut.getActivity().getPackageName()),
"Cannot publish shortcut: activity " + shortcut.getActivity() + " does not"
@@ -1622,10 +1618,8 @@
if (!forUpdate) {
shortcut.enforceMandatoryFields(/* forPinned= */ forPinRequest);
if (!forPinRequest) {
- Preconditions.checkArgument(
- injectIsMainActivity(shortcut.getActivity(), shortcut.getUserId()),
- "Cannot publish shortcut: " + shortcut.getActivity()
- + " is not main activity");
+ Preconditions.checkState(shortcut.getActivity() != null,
+ "Cannot publish shortcut: target activity is not set");
}
}
if (shortcut.getIcon() != null) {
@@ -1778,9 +1772,6 @@
// Note copyNonNullFieldsFrom() does the "updatable with?" check too.
target.copyNonNullFieldsFrom(source);
- if (target.isFloating()) {
- target.setActivity(null);
- }
target.setTimestamp(injectCurrentTimeMillis());
if (replacingIcon) {
@@ -1877,9 +1868,7 @@
throwIfUserLockedL(userId);
Preconditions.checkState(isUidForegroundLocked(injectBinderCallingUid()),
- "Calling application must have a foreground activity or a foreground service");
-
- // TODO Cancel all pending requests from the caller.
+ "Calling application must have a foreground activity or a foreground service");
// Send request to the launcher, if supported.
ret = mShortcutRequestPinProcessor.requestPinItemLocked(shortcut, appWidget, userId,
@@ -2414,7 +2403,8 @@
return false;
}
if (componentName != null) {
- if (!Objects.equals(componentName, si.getActivity())) {
+ if (si.getActivity() != null
+ && !si.getActivity().equals(componentName)) {
return false;
}
}
@@ -3199,6 +3189,10 @@
return new ComponentName(packageName, DUMMY_MAIN_ACTIVITY);
}
+ boolean isDummyMainActivity(@Nullable ComponentName name) {
+ return name != null && DUMMY_MAIN_ACTIVITY.equals(name.getClassName());
+ }
+
/**
* Return all the enabled, exported and main activities from a package.
*/
@@ -3934,8 +3928,4 @@
forEachLoadedUserLocked(u -> u.forAllPackageItems(ShortcutPackageItem::verifyStates));
}
}
-
- void verifyError() {
- Slog.e(TAG, "See logcat for errors");
- }
}
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 05228ec..9b47beb 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -26,6 +26,7 @@
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
+import android.app.ActivityManagerNative;
import android.app.AppGlobals;
import android.app.IActivityManager;
import android.app.IStopUserCallback;
@@ -857,6 +858,25 @@
}
}
+ /**
+ * Evicts a user's CE key by stopping and restarting the user.
+ *
+ * The key is evicted automatically by the user controller when the user has stopped.
+ */
+ @Override
+ public void evictCredentialEncryptionKey(@UserIdInt int userId) {
+ checkManageUsersPermission("evict CE key");
+ final IActivityManager am = ActivityManagerNative.getDefault();
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ am.restartUserInBackground(userId);
+ } catch (RemoteException re) {
+ throw re.rethrowAsRuntimeException();
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
@Override
public UserInfo getUserInfo(int userId) {
checkManageOrCreateUsersPermission("query user");
diff --git a/services/core/java/com/android/server/pm/dex/DexManager.java b/services/core/java/com/android/server/pm/dex/DexManager.java
index a1060dc..6d06838 100644
--- a/services/core/java/com/android/server/pm/dex/DexManager.java
+++ b/services/core/java/com/android/server/pm/dex/DexManager.java
@@ -265,19 +265,6 @@
public void mergeAppDataDirs(ApplicationInfo ai, int userId) {
Set<String> dataDirs = putIfAbsent(mAppDataDirs, userId, new HashSet<>());
dataDirs.add(ai.dataDir);
-
- // Compute and cache the real path as well since data dir may be a symlink.
- // e.g. /data/data/ -> /data/user/0/
- try {
- dataDirs.add(PackageManagerServiceUtils.realpath(new File(ai.dataDir)));
- } catch (IOException e) {
- if (DEBUG) {
- // Verify why we're getting spam at boot for some devices.
- // b/33807524
- Slog.w(TAG, "Error to get realpath of " + ai.dataDir, e);
- }
- }
-
}
public int searchDex(String dexPath, int userId) {
@@ -302,6 +289,20 @@
return DEX_SEARCH_FOUND_SECONDARY;
}
}
+
+ // TODO(calin): What if we get a symlink? e.g. data dir may be a symlink,
+ // /data/data/ -> /data/user/0/.
+ if (DEBUG) {
+ try {
+ String dexPathReal = PackageManagerServiceUtils.realpath(new File(dexPath));
+ if (dexPathReal != dexPath) {
+ Slog.d(TAG, "Dex loaded with symlink. dexPath=" +
+ dexPath + " dexPathReal=" + dexPathReal);
+ }
+ } catch (IOException e) {
+ // Ignore
+ }
+ }
return DEX_SEARCH_NOT_FOUND;
}
}
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index fa1d991..4b2b184 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -51,6 +51,7 @@
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_STATUS_BAR_VISIBLE_TRANSPARENT;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TASK_SNAPSHOT;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SYSTEM_ERROR;
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE;
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_JUMPCUT;
@@ -251,9 +252,9 @@
static final boolean DEBUG_INPUT = false;
static final boolean DEBUG_KEYGUARD = false;
static final boolean DEBUG_LAYOUT = false;
- static final boolean DEBUG_STARTING_WINDOW = false;
+ static final boolean DEBUG_SPLASH_SCREEN = false;
static final boolean DEBUG_WAKEUP = false;
- static final boolean SHOW_STARTING_ANIMATIONS = true;
+ static final boolean SHOW_SPLASH_SCREENS = true;
// Whether to allow dock apps with METADATA_DOCK_HOME to temporarily take over the Home key.
// No longer recommended for desk docks;
@@ -2794,10 +2795,10 @@
/** {@inheritDoc} */
@Override
- public View addStartingWindow(IBinder appToken, String packageName, int theme,
- CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes,
- int icon, int logo, int windowFlags, Configuration overrideConfig) {
- if (!SHOW_STARTING_ANIMATIONS) {
+ public StartingSurface addSplashScreen(IBinder appToken, String packageName, int theme,
+ CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, int icon,
+ int logo, int windowFlags, Configuration overrideConfig) {
+ if (!SHOW_SPLASH_SCREENS) {
return null;
}
if (packageName == null) {
@@ -2809,7 +2810,7 @@
try {
Context context = mContext;
- if (DEBUG_STARTING_WINDOW) Slog.d(TAG, "addStartingWindow " + packageName
+ if (DEBUG_SPLASH_SCREEN) Slog.d(TAG, "addSplashScreen " + packageName
+ ": nonLocalizedLabel=" + nonLocalizedLabel + " theme="
+ Integer.toHexString(theme));
if (theme != context.getThemeResId() || labelRes != 0) {
@@ -2822,8 +2823,8 @@
}
if (overrideConfig != null && !overrideConfig.equals(EMPTY)) {
- if (DEBUG_STARTING_WINDOW) Slog.d(TAG, "addStartingWindow: creating context based"
- + " on overrideConfig" + overrideConfig + " for starting window");
+ if (DEBUG_SPLASH_SCREEN) Slog.d(TAG, "addSplashScreen: creating context based"
+ + " on overrideConfig" + overrideConfig + " for splash screen");
final Context overrideContext = context.createConfigurationContext(overrideConfig);
overrideContext.setTheme(theme);
final TypedArray typedArray = overrideContext.obtainStyledAttributes(
@@ -2833,7 +2834,7 @@
// We want to use the windowBackground for the override context if it is
// available, otherwise we use the default one to make sure a themed starting
// window is displayed for the app.
- if (DEBUG_STARTING_WINDOW) Slog.d(TAG, "addStartingWindow: apply overrideConfig"
+ if (DEBUG_SPLASH_SCREEN) Slog.d(TAG, "addSplashScreen: apply overrideConfig"
+ overrideConfig + " to starting window resId=" + resId);
context = overrideContext;
}
@@ -2895,19 +2896,19 @@
params.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
}
- params.setTitle("Starting " + packageName);
+ params.setTitle("Splash Screen " + packageName);
wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
view = win.getDecorView();
- if (DEBUG_STARTING_WINDOW) Slog.d(TAG, "Adding starting window for "
+ if (DEBUG_SPLASH_SCREEN) Slog.d(TAG, "Adding splash screen window for "
+ packageName + " / " + appToken + ": " + (view.getParent() != null ? view : null));
wm.addView(view, params);
// Only return the view if it was successfully added to the
// window manager... which we can tell by it having a parent.
- return view.getParent() != null ? view : null;
+ return view.getParent() != null ? new SplashScreenSurface(view, appToken) : null;
} catch (WindowManager.BadTokenException e) {
// ignore
Log.w(TAG, appToken + " already running, starting window not displayed. " +
@@ -2927,18 +2928,6 @@
return null;
}
- /** {@inheritDoc} */
- @Override
- public void removeStartingWindow(IBinder appToken, View window) {
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Removing starting window for " + appToken + ": "
- + window + " Callers=" + Debug.getCallers(4));
-
- if (window != null) {
- WindowManager wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);
- wm.removeView(window);
- }
- }
-
/**
* Preflight adding a window to the system.
*
@@ -5185,7 +5174,7 @@
@Override
public void applyPostLayoutPolicyLw(WindowState win, WindowManager.LayoutParams attrs,
WindowState attached, WindowState imeTarget) {
- final boolean visible = win.isVisibleLw();
+ final boolean visible = !win.isGoneForLayoutLw();
if (DEBUG_LAYOUT) Slog.i(TAG, "Win " + win + ": isVisible=" + visible);
applyKeyguardPolicyLw(win, imeTarget);
final int fl = PolicyControl.getWindowFlags(win, attrs);
@@ -5202,8 +5191,11 @@
}
}
+ // Don't allow snapshots to influence SystemUI visibility flags.
+ // TODO: Revisit this once SystemUI flags for snapshots are handled correctly
boolean appWindow = attrs.type >= FIRST_APPLICATION_WINDOW
- && attrs.type < FIRST_SYSTEM_WINDOW;
+ && attrs.type < FIRST_SYSTEM_WINDOW
+ && (attrs.privateFlags & PRIVATE_FLAG_TASK_SNAPSHOT) == 0;
final int stackId = win.getStackId();
if (mTopFullscreenOpaqueWindowState == null && visible) {
if ((fl & FLAG_FORCE_NOT_FULLSCREEN) != 0) {
diff --git a/services/core/java/com/android/server/policy/SplashScreenSurface.java b/services/core/java/com/android/server/policy/SplashScreenSurface.java
new file mode 100644
index 0000000..37d6c0b
--- /dev/null
+++ b/services/core/java/com/android/server/policy/SplashScreenSurface.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2016 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.policy;
+
+import static com.android.server.policy.PhoneWindowManager.DEBUG_SPLASH_SCREEN;
+
+import android.os.Debug;
+import android.os.IBinder;
+import android.util.Slog;
+import android.view.View;
+import android.view.WindowManager;
+import android.view.WindowManagerPolicy;
+import android.view.WindowManagerPolicy.StartingSurface;
+
+import com.android.internal.policy.DecorView;
+import com.android.internal.policy.PhoneWindow;
+
+/**
+ * Holds the contents of a splash screen starting window, i.e. the {@link DecorView} of a
+ * {@link PhoneWindow}. This is just a wrapper such that we can return it from
+ * {@link WindowManagerPolicy#addSplashScreen}.
+ */
+class SplashScreenSurface implements StartingSurface {
+
+ private static final String TAG = PhoneWindowManager.TAG;
+ private final View mView;
+ private final IBinder mAppToken;
+
+ SplashScreenSurface(View view, IBinder appToken) {
+ mView = view;
+ mAppToken = appToken;
+ }
+
+ @Override
+ public void remove() {
+ if (DEBUG_SPLASH_SCREEN) Slog.v(TAG, "Removing splash screen window for " + mAppToken + ": "
+ + this + " Callers=" + Debug.getCallers(4));
+
+ final WindowManager wm = mView.getContext().getSystemService(WindowManager.class);
+ wm.removeView(mView);
+ }
+}
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index f2ccac5..8aefebc 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -136,6 +136,8 @@
private static final int DIRTY_SCREEN_BRIGHTNESS_BOOST = 1 << 11;
// Dirty bit: sQuiescent changed
private static final int DIRTY_QUIESCENT = 1 << 12;
+ // Dirty bit: VR Mode enabled changed
+ private static final int DIRTY_VR_MODE_CHANGED = 1 << 13;
// Summarizes the state of all active wakelocks.
private static final int WAKE_LOCK_CPU = 1 << 0;
@@ -413,11 +415,15 @@
private int mScreenBrightnessSettingMinimum;
private int mScreenBrightnessSettingMaximum;
private int mScreenBrightnessSettingDefault;
+ private int mScreenBrightnessForVrSettingDefault;
// The screen brightness setting, from 0 to 255.
// Use -1 if no value has been set.
private int mScreenBrightnessSetting;
+ // The screen brightness setting, from 0 to 255, to be used while in VR Mode.
+ private int mScreenBrightnessForVrSetting;
+
// The screen auto-brightness adjustment setting, from -1 to 1.
// Use 0 if there is no adjustment.
private float mScreenAutoBrightnessAdjustmentSetting;
@@ -511,6 +517,9 @@
// True if brightness should be affected by twilight.
private boolean mBrightnessUseTwilight;
+ // True if we are currently in VR Mode.
+ private boolean mIsVrModeEnabled;
+
private native void nativeInit();
private static native void nativeAcquireSuspendBlocker(String name);
@@ -594,6 +603,7 @@
mScreenBrightnessSettingMinimum = pm.getMinimumScreenBrightnessSetting();
mScreenBrightnessSettingMaximum = pm.getMaximumScreenBrightnessSetting();
mScreenBrightnessSettingDefault = pm.getDefaultScreenBrightnessSetting();
+ mScreenBrightnessForVrSettingDefault = pm.getDefaultScreenBrightnessForVrSetting();
SensorManager sensorManager = new SystemSensorManager(mContext, mHandler.getLooper());
@@ -640,6 +650,9 @@
Settings.System.SCREEN_BRIGHTNESS),
false, mSettingsObserver, UserHandle.USER_ALL);
resolver.registerContentObserver(Settings.System.getUriFor(
+ Settings.System.SCREEN_BRIGHTNESS_FOR_VR),
+ false, mSettingsObserver, UserHandle.USER_ALL);
+ resolver.registerContentObserver(Settings.System.getUriFor(
Settings.System.SCREEN_BRIGHTNESS_MODE),
false, mSettingsObserver, UserHandle.USER_ALL);
resolver.registerContentObserver(Settings.System.getUriFor(
@@ -773,11 +786,17 @@
}
}
- final int oldScreenBrightnessSetting = mScreenBrightnessSetting;
+ final int oldScreenBrightnessSetting = getCurrentBrightnessSettingLocked();
+
+ mScreenBrightnessForVrSetting = Settings.System.getIntForUser(resolver,
+ Settings.System.SCREEN_BRIGHTNESS_FOR_VR, mScreenBrightnessForVrSettingDefault,
+ UserHandle.USER_CURRENT);
+
mScreenBrightnessSetting = Settings.System.getIntForUser(resolver,
Settings.System.SCREEN_BRIGHTNESS, mScreenBrightnessSettingDefault,
UserHandle.USER_CURRENT);
- if (oldScreenBrightnessSetting != mScreenBrightnessSetting) {
+
+ if (oldScreenBrightnessSetting != getCurrentBrightnessSettingLocked()) {
mTemporaryScreenBrightnessSettingOverride = -1;
}
@@ -811,6 +830,10 @@
mDirty |= DIRTY_SETTINGS;
}
+ private int getCurrentBrightnessSettingLocked() {
+ return mIsVrModeEnabled ? mScreenBrightnessForVrSetting : mScreenBrightnessSetting;
+ }
+
private void postAfterBootCompleted(Runnable r) {
if (mBootCompleted) {
BackgroundThread.getHandler().post(r);
@@ -2069,6 +2092,7 @@
|| !mDreamsSupportedConfig
|| !mDreamsEnabledSetting
|| !mDisplayPowerRequest.isBrightOrDim()
+ || mDisplayPowerRequest.isVr()
|| (mUserActivitySummary & (USER_ACTIVITY_SCREEN_BRIGHT
| USER_ACTIVITY_SCREEN_DIM | USER_ACTIVITY_SCREEN_DREAM)) == 0
|| !mBootCompleted) {
@@ -2113,7 +2137,8 @@
final boolean oldDisplayReady = mDisplayReady;
if ((dirty & (DIRTY_WAKE_LOCKS | DIRTY_USER_ACTIVITY | DIRTY_WAKEFULNESS
| DIRTY_ACTUAL_DISPLAY_POWER_STATE_UPDATED | DIRTY_BOOT_COMPLETED
- | DIRTY_SETTINGS | DIRTY_SCREEN_BRIGHTNESS_BOOST | DIRTY_QUIESCENT)) != 0) {
+ | DIRTY_SETTINGS | DIRTY_SCREEN_BRIGHTNESS_BOOST | DIRTY_VR_MODE_CHANGED |
+ DIRTY_QUIESCENT)) != 0) {
mDisplayPowerRequest.policy = getDesiredScreenPolicyLocked();
// Determine appropriate screen brightness and auto-brightness adjustments.
@@ -2127,6 +2152,9 @@
// bootloader brightness and the default brightness to be identical.
autoBrightness = false;
brightnessSetByUser = false;
+ } else if (mIsVrModeEnabled) {
+ screenBrightness = mScreenBrightnessForVrSetting;
+ autoBrightness = false;
} else if (isValidBrightness(mScreenBrightnessOverrideFromWindowManager)) {
screenBrightness = mScreenBrightnessOverrideFromWindowManager;
autoBrightness = false;
@@ -2160,7 +2188,7 @@
mDisplayPowerRequest.useAutoBrightness = autoBrightness;
mDisplayPowerRequest.useProximitySensor = shouldUseProximitySensorLocked();
mDisplayPowerRequest.lowPowerMode = mLowPowerModeEnabled;
- mDisplayPowerRequest.boostScreenBrightness = mScreenBrightnessBoostInProgress;
+ mDisplayPowerRequest.boostScreenBrightness = shouldBoostScreenBrightness();
mDisplayPowerRequest.useTwilight = mBrightnessUseTwilight;
if (mDisplayPowerRequest.policy == DisplayPowerRequest.POLICY_DOZE) {
@@ -2191,6 +2219,7 @@
+ ", mUserActivitySummary=0x" + Integer.toHexString(mUserActivitySummary)
+ ", mBootCompleted=" + mBootCompleted
+ ", mScreenBrightnessBoostInProgress=" + mScreenBrightnessBoostInProgress
+ + ", mIsVrModeEnabled= " + mIsVrModeEnabled
+ ", sQuiescent=" + sQuiescent);
}
}
@@ -2220,6 +2249,10 @@
}
}
+ private boolean shouldBoostScreenBrightness() {
+ return !mIsVrModeEnabled && mScreenBrightnessBoostInProgress;
+ }
+
private static boolean isValidBrightness(int value) {
return value >= 0 && value <= 255;
}
@@ -2230,6 +2263,10 @@
}
private int getDesiredScreenPolicyLocked() {
+ if (mIsVrModeEnabled) {
+ return DisplayPowerRequest.POLICY_VR;
+ }
+
if (mWakefulness == WAKEFULNESS_ASLEEP || sQuiescent) {
return DisplayPowerRequest.POLICY_OFF;
}
@@ -2333,7 +2370,7 @@
};
private boolean shouldUseProximitySensorLocked() {
- return (mWakeLockSummary & WAKE_LOCK_PROXIMITY_SCREEN_OFF) != 0;
+ return !mIsVrModeEnabled && (mWakeLockSummary & WAKE_LOCK_PROXIMITY_SCREEN_OFF) != 0;
}
/**
@@ -3085,7 +3122,11 @@
pw.println(" mScreenBrightnessSettingMinimum=" + mScreenBrightnessSettingMinimum);
pw.println(" mScreenBrightnessSettingMaximum=" + mScreenBrightnessSettingMaximum);
pw.println(" mScreenBrightnessSettingDefault=" + mScreenBrightnessSettingDefault);
+ pw.println(" mScreenBrightnessForVrSettingDefault="
+ + mScreenBrightnessForVrSettingDefault);
+ pw.println(" mScreenBrightnessForVrSetting=" + mScreenBrightnessForVrSetting);
pw.println(" mDoubleTapWakeEnabled=" + mDoubleTapWakeEnabled);
+ pw.println(" mIsVrModeEnabled=" + mIsVrModeEnabled);
final int sleepTimeout = getSleepTimeoutLocked();
final int screenOffTimeout = getScreenOffTimeoutLocked(sleepTimeout);
@@ -3223,6 +3264,14 @@
@Override
public void onVrStateChanged(boolean enabled) {
powerHintInternal(PowerHint.VR_MODE, enabled ? 1 : 0);
+
+ synchronized (mLock) {
+ if (mIsVrModeEnabled != enabled) {
+ mIsVrModeEnabled = enabled;
+ mDirty |= DIRTY_VR_MODE_CHANGED;
+ updatePowerStateLocked();
+ }
+ }
}
};
@@ -3975,6 +4024,7 @@
case Display.STATE_DOZE:
case Display.STATE_DOZE_SUSPEND:
case Display.STATE_ON:
+ case Display.STATE_VR:
break;
default:
screenState = Display.STATE_UNKNOWN;
diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java
index cca8cc8..c69b87c 100644
--- a/services/core/java/com/android/server/trust/TrustManagerService.java
+++ b/services/core/java/com/android/server/trust/TrustManagerService.java
@@ -25,6 +25,7 @@
import org.xmlpull.v1.XmlPullParserException;
import android.Manifest;
+import android.annotation.UserIdInt;
import android.app.ActivityManager;
import android.app.admin.DevicePolicyManager;
import android.app.trust.ITrustListener;
@@ -103,6 +104,7 @@
private static final int MSG_SWITCH_USER = 9;
private static final int MSG_FLUSH_TRUST_USUALLY_MANAGED = 10;
private static final int MSG_UNLOCK_USER = 11;
+ private static final int MSG_STOP_USER = 12;
private static final int TRUST_USUALLY_MANAGED_FLUSH_DELAY = 2 * 60 * 1000;
@@ -414,15 +416,18 @@
}
}
boolean deviceLocked = secure && showingKeyguard && !trusted;
+ setDeviceLockedForUser(id, deviceLocked);
+ }
+ }
- boolean changed;
- synchronized (mDeviceLockedForUser) {
- changed = isDeviceLockedInner(id) != deviceLocked;
- mDeviceLockedForUser.put(id, deviceLocked);
- }
- if (changed) {
- dispatchDeviceLocked(id, deviceLocked);
- }
+ private void setDeviceLockedForUser(@UserIdInt int userId, boolean locked) {
+ final boolean changed;
+ synchronized (mDeviceLockedForUser) {
+ changed = isDeviceLockedInner(userId) != locked;
+ mDeviceLockedForUser.put(userId, locked);
+ }
+ if (changed) {
+ dispatchDeviceLocked(userId, locked);
}
}
@@ -724,6 +729,11 @@
mHandler.obtainMessage(MSG_UNLOCK_USER, userId, 0, null).sendToTarget();
}
+ @Override
+ public void onStopUser(@UserIdInt int userId) {
+ mHandler.obtainMessage(MSG_STOP_USER, userId, 0, null).sendToTarget();
+ }
+
// Plumbing
private final IBinder mService = new ITrustManager.Stub() {
@@ -982,6 +992,9 @@
mCurrentUser = msg.arg1;
refreshDeviceLockedForUser(UserHandle.USER_ALL);
break;
+ case MSG_STOP_USER:
+ setDeviceLockedForUser(msg.arg1, true);
+ break;
case MSG_FLUSH_TRUST_USUALLY_MANAGED:
SparseBooleanArray usuallyManaged;
synchronized (mTrustUsuallyManagedForUser) {
diff --git a/services/core/java/com/android/server/updates/TzDataInstallReceiver.java b/services/core/java/com/android/server/updates/TzDataInstallReceiver.java
index b260e4e..b704eb1 100644
--- a/services/core/java/com/android/server/updates/TzDataInstallReceiver.java
+++ b/services/core/java/com/android/server/updates/TzDataInstallReceiver.java
@@ -20,7 +20,7 @@
import java.io.File;
import java.io.IOException;
-import libcore.tzdata.update.TzDataBundleInstaller;
+import libcore.tzdata.update2.TimeZoneBundleInstaller;
/**
* An install receiver responsible for installing timezone data updates.
@@ -29,18 +29,19 @@
private static final String TAG = "TZDataInstallReceiver";
+ private static final File SYSTEM_TZ_DATA_FILE = new File("/system/usr/share/zoneinfo/tzdata");
private static final File TZ_DATA_DIR = new File("/data/misc/zoneinfo");
private static final String UPDATE_DIR_NAME = TZ_DATA_DIR.getPath() + "/updates/";
private static final String UPDATE_METADATA_DIR_NAME = "metadata/";
private static final String UPDATE_VERSION_FILE_NAME = "version";
private static final String UPDATE_CONTENT_FILE_NAME = "tzdata_bundle.zip";
- private final TzDataBundleInstaller installer;
+ private final TimeZoneBundleInstaller installer;
public TzDataInstallReceiver() {
super(UPDATE_DIR_NAME, UPDATE_CONTENT_FILE_NAME, UPDATE_METADATA_DIR_NAME,
UPDATE_VERSION_FILE_NAME);
- installer = new TzDataBundleInstaller(TAG, TZ_DATA_DIR);
+ installer = new TimeZoneBundleInstaller(TAG, SYSTEM_TZ_DATA_FILE, TZ_DATA_DIR);
}
@Override
diff --git a/services/core/java/com/android/server/vr/VrManagerService.java b/services/core/java/com/android/server/vr/VrManagerService.java
index 1083e0a..84cf0c6 100644
--- a/services/core/java/com/android/server/vr/VrManagerService.java
+++ b/services/core/java/com/android/server/vr/VrManagerService.java
@@ -320,7 +320,6 @@
public void onEnabledComponentChanged() {
synchronized (mLock) {
int currentUser = ActivityManager.getCurrentUser();
-
// Update listeners
ArraySet<ComponentName> enabledListeners = mComponentObserver.getEnabled(currentUser);
@@ -338,7 +337,7 @@
}
// If there is a pending state change, we'd better deal with that first
- consumeAndApplyPendingStateLocked();
+ consumeAndApplyPendingStateLocked(false);
if (mCurrentVrService == null) {
return; // No active services
@@ -606,8 +605,9 @@
if (!goingIntoVrMode) {
// Not going into VR mode, unbind whatever is running
if (mCurrentVrService != null) {
- Slog.i(TAG, "Disconnecting " + mCurrentVrService.getComponent() + " for user " +
- mCurrentVrService.getUserId());
+ Slog.i(TAG, "Leaving VR mode, disconnecting "
+ + mCurrentVrService.getComponent() + " for user "
+ + mCurrentVrService.getUserId());
mCurrentVrService.disconnect();
mCurrentVrService = null;
} else {
@@ -619,8 +619,9 @@
// Unbind any running service that doesn't match the latest component/user
// selection.
if (mCurrentVrService.disconnectIfNotMatching(component, userId)) {
- Slog.i(TAG, "Disconnecting " + mCurrentVrService.getComponent() +
- " for user " + mCurrentVrService.getUserId());
+ Slog.i(TAG, "VR mode component changed to " + component
+ + ", disconnecting " + mCurrentVrService.getComponent()
+ + " for user " + mCurrentVrService.getUserId());
createAndConnectService(component, userId);
sendUpdatedCaller = true;
} else {
@@ -868,16 +869,30 @@
sBinderChecker);
}
+ /**
+ * Apply the pending VR state. If no state is pending, disconnect any currently bound
+ * VR listener service.
+ */
private void consumeAndApplyPendingStateLocked() {
+ consumeAndApplyPendingStateLocked(true);
+ }
+
+ /**
+ * Apply the pending VR state.
+ *
+ * @param disconnectIfNoPendingState if {@code true}, then any currently bound VR listener
+ * service will be disconnected if no state is pending. If this is {@code false} then the
+ * nothing will be changed when there is no pending state.
+ */
+ private void consumeAndApplyPendingStateLocked(boolean disconnectIfNoPendingState) {
if (mPendingState != null) {
updateCurrentVrServiceLocked(mPendingState.enabled,
mPendingState.targetPackageName, mPendingState.userId,
mPendingState.callingPackage);
mPendingState = null;
- } else {
+ } else if (disconnectIfNoPendingState) {
updateCurrentVrServiceLocked(false, null, 0, null);
}
-
}
private void logStateLocked() {
diff --git a/services/core/java/com/android/server/wm/AppWindowContainerController.java b/services/core/java/com/android/server/wm/AppWindowContainerController.java
new file mode 100644
index 0000000..1eb74fa4
--- /dev/null
+++ b/services/core/java/com/android/server/wm/AppWindowContainerController.java
@@ -0,0 +1,645 @@
+/*
+ * Copyright (C) 2016 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.SCREEN_ORIENTATION_UNSPECIFIED;
+import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
+import static com.android.server.wm.AppTransition.TRANSIT_UNSET;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ORIENTATION;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_SCREENSHOT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STARTING_WINDOW;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TOKEN_MOVEMENT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_VISIBILITY;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+
+import android.app.ActivityManager.TaskSnapshot;
+import android.content.res.CompatibilityInfo;
+import android.content.res.Configuration;
+import android.graphics.Bitmap;
+import android.os.Debug;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Trace;
+import android.util.Slog;
+import android.view.IApplicationToken;
+import android.view.WindowManagerPolicy.StartingSurface;
+
+import com.android.server.AttributeCache;
+/**
+ * Controller for the app window token container. This is created by activity manager to link
+ * activity records to the app window token container they use in window manager.
+ *
+ * Test class: {@link AppWindowContainerControllerTests}
+ */
+public class AppWindowContainerController
+ extends WindowContainerController<AppWindowToken, AppWindowContainerListener> {
+
+ private static final int STARTING_WINDOW_TYPE_NONE = 0;
+ private static final int STARTING_WINDOW_TYPE_SNAPSHOT = 1;
+ private static final int STARTING_WINDOW_TYPE_SPLASH_SCREEN = 2;
+
+ private final IApplicationToken mToken;
+ private final Handler mHandler = new Handler(Looper.getMainLooper());
+
+ private final Runnable mOnWindowsDrawn = () -> {
+ if (mListener == null) {
+ return;
+ }
+ if (DEBUG_VISIBILITY) Slog.v(TAG_WM, "Reporting drawn in "
+ + AppWindowContainerController.this.mToken);
+ mListener.onWindowsDrawn();
+ };
+
+ private final Runnable mOnWindowsVisible = () -> {
+ if (mListener == null) {
+ return;
+ }
+ if (DEBUG_VISIBILITY) Slog.v(TAG_WM, "Reporting visible in "
+ + AppWindowContainerController.this.mToken);
+ mListener.onWindowsVisible();
+ };
+
+ private final Runnable mOnWindowsGone = () -> {
+ if (mListener == null) {
+ return;
+ }
+ if (DEBUG_VISIBILITY) Slog.v(TAG_WM, "Reporting gone in "
+ + AppWindowContainerController.this.mToken);
+ mListener.onWindowsGone();
+ };
+
+ private final Runnable mRemoveStartingWindow = () -> {
+ StartingSurface surface = null;
+ StartingData data = null;
+ synchronized (mWindowMap) {
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Remove starting " + mContainer
+ + ": startingWindow=" + mContainer.startingWindow
+ + " startingView=" + mContainer.startingSurface);
+ if (mContainer.startingWindow != null) {
+ surface = mContainer.startingSurface;
+ data = mContainer.startingData;
+ mContainer.startingData = null;
+ mContainer.startingSurface = null;
+ mContainer.startingWindow = null;
+ mContainer.startingDisplayed = false;
+ }
+ }
+ if (data != null && surface != null) {
+ try {
+ surface.remove();
+ } catch (Exception e) {
+ Slog.w(TAG_WM, "Exception when removing starting window", e);
+ }
+ }
+ };
+
+ private final Runnable mAddStartingWindow = () -> {
+ final StartingData startingData;
+
+ synchronized (mWindowMap) {
+ if (mContainer == null) {
+ return;
+ }
+ startingData = mContainer.startingData;
+ }
+
+ if (startingData == null) {
+ // Animation has been canceled... do nothing.
+ return;
+ }
+
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Add starting "
+ + this + ": startingData=" + mContainer.startingData);
+
+ StartingSurface surface = null;
+ try {
+ surface = startingData.createStartingSurface();
+ } catch (Exception e) {
+ Slog.w(TAG_WM, "Exception when adding starting window", e);
+ }
+ if (surface != null) {
+ boolean abort = false;
+ synchronized(mWindowMap) {
+ if (mContainer.removed || mContainer.startingData == null) {
+ // If the window was successfully added, then
+ // we need to remove it.
+ if (mContainer.startingWindow != null) {
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM,
+ "Aborted starting " + mContainer
+ + ": removed=" + mContainer.removed
+ + " startingData=" + mContainer.startingData);
+ abort = true;
+ }
+ } else {
+ mContainer.startingSurface = surface;
+ }
+ if (DEBUG_STARTING_WINDOW && !abort) Slog.v(TAG_WM,
+ "Added starting " + mContainer
+ + ": startingWindow="
+ + mContainer.startingWindow + " startingView="
+ + mContainer.startingSurface);
+ }
+ if (abort) {
+ mRemoveStartingWindow.run();
+ if (mContainer == null) {
+ return;
+ }
+ }
+ }
+ };
+
+ public AppWindowContainerController(TaskWindowContainerController taskController,
+ IApplicationToken token, AppWindowContainerListener listener, int index,
+ int requestedOrientation, boolean fullscreen, boolean showForAllUsers, int configChanges,
+ boolean voiceInteraction, boolean launchTaskBehind, boolean alwaysFocusable,
+ int targetSdkVersion, int rotationAnimationHint, long inputDispatchingTimeoutNanos) {
+ this(taskController, token, listener, index, requestedOrientation, fullscreen,
+ showForAllUsers,
+ configChanges, voiceInteraction, launchTaskBehind, alwaysFocusable,
+ targetSdkVersion, rotationAnimationHint, inputDispatchingTimeoutNanos,
+ WindowManagerService.getInstance());
+ }
+
+ public AppWindowContainerController(TaskWindowContainerController taskController,
+ IApplicationToken token, AppWindowContainerListener listener, int index,
+ int requestedOrientation, boolean fullscreen, boolean showForAllUsers, int configChanges,
+ boolean voiceInteraction, boolean launchTaskBehind, boolean alwaysFocusable,
+ int targetSdkVersion, int rotationAnimationHint, long inputDispatchingTimeoutNanos,
+ WindowManagerService service) {
+ super(listener, service);
+ mToken = token;
+ synchronized(mWindowMap) {
+ AppWindowToken atoken = mRoot.getAppWindowToken(mToken.asBinder());
+ if (atoken != null) {
+ // TODO: Should this throw an exception instead?
+ Slog.w(TAG_WM, "Attempted to add existing app token: " + mToken);
+ return;
+ }
+
+ final Task task = taskController.mContainer;
+ if (task == null) {
+ throw new IllegalArgumentException("AppWindowContainerController: invalid "
+ + " controller=" + taskController);
+ }
+
+ atoken = new AppWindowToken(mService, token, voiceInteraction, task.getDisplayContent(),
+ inputDispatchingTimeoutNanos, fullscreen, showForAllUsers, targetSdkVersion,
+ requestedOrientation, rotationAnimationHint, configChanges, launchTaskBehind,
+ alwaysFocusable, this);
+ if (DEBUG_TOKEN_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG_WM, "addAppToken: " + atoken
+ + " controller=" + taskController + " at " + index);
+ task.addChild(atoken, index);
+ }
+ }
+
+ public void removeContainer(int displayId) {
+ synchronized(mWindowMap) {
+ final DisplayContent dc = mRoot.getDisplayContent(displayId);
+ if (dc == null) {
+ Slog.w(TAG_WM, "removeAppToken: Attempted to remove binder token: "
+ + mToken + " from non-existing displayId=" + displayId);
+ return;
+ }
+ dc.removeAppToken(mToken.asBinder());
+ super.removeContainer();
+ }
+ }
+
+ @Override
+ public void removeContainer() {
+ throw new UnsupportedOperationException("Use removeContainer(displayId) instead.");
+ }
+
+ public Configuration setOrientation(int requestedOrientation, int displayId,
+ Configuration displayConfig, boolean freezeScreenIfNeeded) {
+ synchronized(mWindowMap) {
+ if (mContainer == null) {
+ Slog.w(TAG_WM,
+ "Attempted to set orientation of non-existing app token: " + mToken);
+ return null;
+ }
+
+ mContainer.setOrientation(requestedOrientation);
+
+ final IBinder binder = freezeScreenIfNeeded ? mToken.asBinder() : null;
+ return mService.updateOrientationFromAppTokens(displayConfig, binder, displayId);
+
+ }
+ }
+
+ public int getOrientation() {
+ synchronized(mWindowMap) {
+ if (mContainer == null) {
+ return SCREEN_ORIENTATION_UNSPECIFIED;
+ }
+
+ return mContainer.getOrientationIgnoreVisibility();
+ }
+ }
+
+ public void setVisibility(boolean visible) {
+ synchronized(mWindowMap) {
+ if (mContainer == null) {
+ Slog.w(TAG_WM, "Attempted to set visibility of non-existing app token: "
+ + mToken);
+ return;
+ }
+
+ final AppWindowToken wtoken = mContainer;
+
+ if (DEBUG_APP_TRANSITIONS || DEBUG_ORIENTATION) Slog.v(TAG_WM, "setAppVisibility("
+ + mToken + ", visible=" + visible + "): " + mService.mAppTransition
+ + " hidden=" + wtoken.hidden + " hiddenRequested="
+ + wtoken.hiddenRequested + " Callers=" + Debug.getCallers(6));
+
+ mService.mOpeningApps.remove(wtoken);
+ mService.mClosingApps.remove(wtoken);
+ wtoken.waitingToShow = false;
+ wtoken.hiddenRequested = !visible;
+
+ if (!visible) {
+ // If the app is dead while it was visible, we kept its dead window on screen.
+ // Now that the app is going invisible, we can remove it. It will be restarted
+ // if made visible again.
+ wtoken.removeDeadWindows();
+ wtoken.setVisibleBeforeClientHidden();
+ } else {
+ if (!mService.mAppTransition.isTransitionSet()
+ && mService.mAppTransition.isReady()) {
+ // Add the app mOpeningApps if transition is unset but ready. This means
+ // we're doing a screen freeze, and the unfreeze will wait for all opening
+ // apps to be ready.
+ mService.mOpeningApps.add(wtoken);
+ }
+ wtoken.startingMoved = false;
+ // If the token is currently hidden (should be the common case), or has been
+ // stopped, then we need to set up to wait for its windows to be ready.
+ if (wtoken.hidden || wtoken.mAppStopped) {
+ wtoken.clearAllDrawn();
+
+ // If the app was already visible, don't reset the waitingToShow state.
+ if (wtoken.hidden) {
+ wtoken.waitingToShow = true;
+ }
+
+ if (wtoken.clientHidden) {
+ // In the case where we are making an app visible
+ // but holding off for a transition, we still need
+ // to tell the client to make its windows visible so
+ // they get drawn. Otherwise, we will wait on
+ // performing the transition until all windows have
+ // been drawn, they never will be, and we are sad.
+ wtoken.clientHidden = false;
+ wtoken.sendAppVisibilityToClients();
+ }
+ }
+ wtoken.requestUpdateWallpaperIfNeeded();
+
+ if (DEBUG_ADD_REMOVE) Slog.v(TAG_WM, "No longer Stopped: " + wtoken);
+ wtoken.mAppStopped = false;
+ }
+
+ // If we are preparing an app transition, then delay changing
+ // the visibility of this token until we execute that transition.
+ if (mService.okToDisplay() && mService.mAppTransition.isTransitionSet()) {
+ // A dummy animation is a placeholder animation which informs others that an
+ // animation is going on (in this case an application transition). If the animation
+ // was transferred from another application/animator, no dummy animator should be
+ // created since an animation is already in progress.
+ if (wtoken.mAppAnimator.usingTransferredAnimation
+ && wtoken.mAppAnimator.animation == null) {
+ Slog.wtf(TAG_WM, "Will NOT set dummy animation on: " + wtoken
+ + ", using null transferred animation!");
+ }
+ if (!wtoken.mAppAnimator.usingTransferredAnimation &&
+ (!wtoken.startingDisplayed || mService.mSkipAppTransitionAnimation)) {
+ if (DEBUG_APP_TRANSITIONS) Slog.v(
+ TAG_WM, "Setting dummy animation on: " + wtoken);
+ wtoken.mAppAnimator.setDummyAnimation();
+ }
+ wtoken.inPendingTransaction = true;
+ if (visible) {
+ mService.mOpeningApps.add(wtoken);
+ wtoken.mEnteringAnimation = true;
+ } else {
+ mService.mClosingApps.add(wtoken);
+ wtoken.mEnteringAnimation = false;
+ }
+ if (mService.mAppTransition.getAppTransition()
+ == AppTransition.TRANSIT_TASK_OPEN_BEHIND) {
+ // We're launchingBehind, add the launching activity to mOpeningApps.
+ final WindowState win =
+ mService.getDefaultDisplayContentLocked().findFocusedWindow();
+ if (win != null) {
+ final AppWindowToken focusedToken = win.mAppToken;
+ if (focusedToken != null) {
+ if (DEBUG_APP_TRANSITIONS) Slog.d(TAG_WM, "TRANSIT_TASK_OPEN_BEHIND, "
+ + " adding " + focusedToken + " to mOpeningApps");
+ // Force animation to be loaded.
+ focusedToken.hidden = true;
+ mService.mOpeningApps.add(focusedToken);
+ }
+ }
+ }
+ return;
+ }
+
+ wtoken.setVisibility(null, visible, TRANSIT_UNSET, true, wtoken.mVoiceInteraction);
+ wtoken.updateReportedVisibilityLocked();
+ }
+ }
+
+ /**
+ * Notifies that we launched an app that might be visible or not visible depending on what kind
+ * of Keyguard flags it's going to set on its windows.
+ */
+ public void notifyUnknownVisibilityLaunched() {
+ synchronized(mWindowMap) {
+ if (mContainer != null) {
+ mService.mUnknownAppVisibilityController.notifyLaunched(mContainer);
+ }
+ }
+ }
+
+ public boolean addStartingWindow(String pkg, int theme, CompatibilityInfo compatInfo,
+ CharSequence nonLocalizedLabel, int labelRes, int icon, int logo, int windowFlags,
+ IBinder transferFrom, boolean newTask, boolean taskSwitch, boolean processRunning) {
+ synchronized(mWindowMap) {
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "setAppStartingWindow: token=" + mToken
+ + " pkg=" + pkg + " transferFrom=" + transferFrom);
+
+ if (mContainer == null) {
+ Slog.w(TAG_WM, "Attempted to set icon of non-existing app token: " + mToken);
+ return false;
+ }
+
+ // If the display is frozen, we won't do anything until the actual window is
+ // displayed so there is no reason to put in the starting window.
+ if (!mService.okToDisplay()) {
+ return false;
+ }
+
+ if (mContainer.startingData != null) {
+ return false;
+ }
+
+ final int type = getStartingWindowType(newTask, taskSwitch, processRunning);
+
+ if (type == STARTING_WINDOW_TYPE_SNAPSHOT) {
+ return createSnapshot();
+ }
+
+ // If this is a translucent window, then don't show a starting window -- the current
+ // effect (a full-screen opaque starting window that fades away to the real contents
+ // when it is ready) does not work for this.
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Checking theme of starting window: 0x"
+ + Integer.toHexString(theme));
+ if (theme != 0) {
+ AttributeCache.Entry ent = AttributeCache.instance().get(pkg, theme,
+ com.android.internal.R.styleable.Window, mService.mCurrentUserId);
+ if (ent == null) {
+ // Whoops! App doesn't exist. Um. Okay. We'll just pretend like we didn't
+ // see that.
+ return false;
+ }
+ final boolean windowIsTranslucent = ent.array.getBoolean(
+ com.android.internal.R.styleable.Window_windowIsTranslucent, false);
+ final boolean windowIsFloating = ent.array.getBoolean(
+ com.android.internal.R.styleable.Window_windowIsFloating, false);
+ final boolean windowShowWallpaper = ent.array.getBoolean(
+ com.android.internal.R.styleable.Window_windowShowWallpaper, false);
+ final boolean windowDisableStarting = ent.array.getBoolean(
+ com.android.internal.R.styleable.Window_windowDisablePreview, false);
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Translucent=" + windowIsTranslucent
+ + " Floating=" + windowIsFloating
+ + " ShowWallpaper=" + windowShowWallpaper);
+ if (windowIsTranslucent) {
+ return false;
+ }
+ if (windowIsFloating || windowDisableStarting) {
+ return false;
+ }
+ if (windowShowWallpaper) {
+ if (mContainer.getDisplayContent().mWallpaperController.getWallpaperTarget()
+ == null) {
+ // If this theme is requesting a wallpaper, and the wallpaper
+ // is not currently visible, then this effectively serves as
+ // an opaque window and our starting window transition animation
+ // can still work. We just need to make sure the starting window
+ // is also showing the wallpaper.
+ windowFlags |= FLAG_SHOW_WALLPAPER;
+ } else {
+ return false;
+ }
+ }
+ }
+
+ if (mContainer.transferStartingWindow(transferFrom)) {
+ return true;
+ }
+
+ // There is no existing starting window, and we don't want to create a splash screen, so
+ // that's it!
+ if (type != STARTING_WINDOW_TYPE_SPLASH_SCREEN) {
+ return false;
+ }
+
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Creating StartingData");
+ mContainer.startingData = new SplashScreenStartingData(mService, mContainer, pkg, theme,
+ compatInfo, nonLocalizedLabel, labelRes, icon, logo, windowFlags,
+ mContainer.getMergedOverrideConfiguration());
+ scheduleAddStartingWindow();
+ }
+ return true;
+ }
+
+ private int getStartingWindowType(boolean newTask, boolean taskSwitch, boolean processRunning) {
+ if (newTask || !processRunning) {
+ return STARTING_WINDOW_TYPE_SPLASH_SCREEN;
+ } else if (taskSwitch) {
+ return STARTING_WINDOW_TYPE_SNAPSHOT;
+ } else {
+ return STARTING_WINDOW_TYPE_NONE;
+ }
+ }
+
+ void scheduleAddStartingWindow() {
+ // Note: we really want to do sendMessageAtFrontOfQueue() because we
+ // want to process the message ASAP, before any other queued
+ // messages.
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Enqueueing ADD_STARTING");
+ mHandler.postAtFrontOfQueue(mAddStartingWindow);
+ }
+
+ private boolean createSnapshot() {
+ final TaskSnapshot snapshot = mService.mTaskSnapshotController.getSnapshot(
+ mContainer.mTask);
+
+ if (snapshot == null) {
+ return false;
+ }
+
+ mContainer.startingData = new SnapshotStartingData(mService, mContainer,
+ snapshot.getSnapshot());
+ scheduleAddStartingWindow();
+ return true;
+ }
+
+ public void removeStartingWindow() {
+ synchronized (mWindowMap) {
+ if (mHandler.hasCallbacks(mRemoveStartingWindow)) {
+ // Already scheduled.
+ return;
+ }
+
+ if (mContainer.startingWindow == null) {
+ if (mContainer.startingData != null) {
+ // Starting window has not been added yet, but it is scheduled to be added.
+ // Go ahead and cancel the request.
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM,
+ "Clearing startingData for token=" + mContainer);
+ mContainer.startingData = null;
+ }
+ return;
+ }
+
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, Debug.getCallers(1)
+ + ": Schedule remove starting " + mContainer
+ + " startingWindow=" + mContainer.startingWindow);
+ mHandler.post(mRemoveStartingWindow);
+ }
+ }
+
+ public void pauseKeyDispatching() {
+ synchronized (mWindowMap) {
+ if (mContainer != null) {
+ mService.mInputMonitor.pauseDispatchingLw(mContainer);
+ }
+ }
+ }
+
+ public void resumeKeyDispatching() {
+ synchronized (mWindowMap) {
+ if (mContainer != null) {
+ mService.mInputMonitor.resumeDispatchingLw(mContainer);
+ }
+ }
+ }
+
+ public void notifyAppResumed(boolean wasStopped, boolean allowSavedSurface) {
+ synchronized(mWindowMap) {
+ if (mContainer == null) {
+ Slog.w(TAG_WM, "Attempted to notify resumed of non-existing app token: " + mToken);
+ return;
+ }
+ mContainer.notifyAppResumed(wasStopped, allowSavedSurface);
+ }
+ }
+
+ public void notifyAppStopped() {
+ synchronized(mWindowMap) {
+ if (mContainer == null) {
+ Slog.w(TAG_WM, "Attempted to notify stopped of non-existing app token: "
+ + mToken);
+ return;
+ }
+ mContainer.notifyAppStopped();
+ }
+ }
+
+ public void startFreezingScreen(int configChanges) {
+ synchronized(mWindowMap) {
+ if (configChanges == 0 && mService.okToDisplay()) {
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Skipping set freeze of " + mToken);
+ return;
+ }
+
+ if (mContainer == null) {
+ Slog.w(TAG_WM,
+ "Attempted to freeze screen with non-existing app token: " + mContainer);
+ return;
+ }
+ mContainer.startFreezingScreen();
+ }
+ }
+
+ public void stopFreezingScreen(boolean force) {
+ synchronized(mWindowMap) {
+ if (mContainer == null) {
+ return;
+ }
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Clear freezing of " + mToken + ": hidden="
+ + mContainer.hidden + " freezing=" + mContainer.mAppAnimator.freezingScreen);
+ mContainer.stopFreezingScreen(true, force);
+ }
+ }
+
+ /**
+ * Takes a snapshot of the screen. In landscape mode this grabs the whole screen.
+ * In portrait mode, it grabs the full screenshot.
+ *
+ * @param displayId the Display to take a screenshot of.
+ * @param width the width of the target bitmap
+ * @param height the height of the target bitmap
+ * @param frameScale the scale to apply to the frame, only used when width = -1 and height = -1
+ */
+ public Bitmap screenshotApplications(int displayId, int width, int height, float frameScale) {
+ try {
+ Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "screenshotApplications");
+ final DisplayContent dc;
+ synchronized(mWindowMap) {
+ dc = mRoot.getDisplayContentOrCreate(displayId);
+ if (dc == null) {
+ if (DEBUG_SCREENSHOT) Slog.i(TAG_WM, "Screenshot of " + mToken
+ + ": returning null. No Display for displayId=" + displayId);
+ return null;
+ }
+ }
+ return dc.screenshotApplications(mToken.asBinder(), width, height,
+ false /* includeFullDisplay */, frameScale, Bitmap.Config.RGB_565,
+ false /* wallpaperOnly */, false /* includeDecor */, true /* toAshmem */);
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
+ }
+ }
+
+
+ void reportWindowsDrawn() {
+ mHandler.post(mOnWindowsDrawn);
+ }
+
+ void reportWindowsVisible() {
+ mHandler.post(mOnWindowsVisible);
+ }
+
+ void reportWindowsGone() {
+ mHandler.post(mOnWindowsGone);
+ }
+
+ /** Calls directly into activity manager so window manager lock shouldn't held. */
+ boolean keyDispatchingTimedOut(String reason) {
+ return mListener != null && mListener.keyDispatchingTimedOut(reason);
+ }
+
+ @Override
+ public String toString() {
+ return "{AppWindowContainerController token=" + mToken + "}";
+ }
+}
diff --git a/services/core/java/com/android/server/wm/AppWindowContainerListener.java b/services/core/java/com/android/server/wm/AppWindowContainerListener.java
new file mode 100644
index 0000000..12d4b2f
--- /dev/null
+++ b/services/core/java/com/android/server/wm/AppWindowContainerListener.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2016 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;
+
+/** Interface used by the creator of the controller to listen to changes with the container. */
+public interface AppWindowContainerListener extends WindowContainerListener {
+ /** Called when the windows associated app window container are drawn. */
+ void onWindowsDrawn();
+ /** Called when the windows associated app window container are visible. */
+ void onWindowsVisible();
+ /** Called when the windows associated app window container are no longer visible. */
+ void onWindowsGone();
+ /**
+ * Called when the key dispatching to a window associated with the app window container
+ * timed-out.
+ */
+ boolean keyDispatchingTimedOut(String reason);
+}
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java
index 6147885..10d1d8b 100644
--- a/services/core/java/com/android/server/wm/AppWindowToken.java
+++ b/services/core/java/com/android/server/wm/AppWindowToken.java
@@ -29,9 +29,9 @@
import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM;
import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
import static com.android.server.wm.AppTransition.TRANSIT_UNSET;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ANIM;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS_LIGHT;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT_REPEATS;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ORIENTATION;
@@ -47,23 +47,21 @@
import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_WILL_PLACE_SURFACES;
import static com.android.server.wm.WindowManagerService.logWithStack;
-import android.content.pm.ActivityInfo;
-import android.os.Debug;
-import com.android.internal.util.ToBooleanFunction;
-import com.android.server.input.InputApplicationHandle;
-import com.android.server.wm.WindowManagerService.H;
-
import android.annotation.NonNull;
import android.content.res.Configuration;
import android.graphics.Rect;
import android.os.Binder;
+import android.os.Debug;
import android.os.IBinder;
-import android.os.Message;
import android.os.SystemClock;
import android.util.Slog;
import android.view.IApplicationToken;
-import android.view.View;
import android.view.WindowManager;
+import android.view.WindowManagerPolicy.StartingSurface;
+
+import com.android.internal.util.ToBooleanFunction;
+import com.android.server.input.InputApplicationHandle;
+import com.android.server.wm.WindowManagerService.H;
import java.io.PrintWriter;
import java.util.ArrayDeque;
@@ -139,7 +137,7 @@
// Information about an application starting window if displayed.
StartingData startingData;
WindowState startingWindow;
- View startingView;
+ StartingSurface startingSurface;
boolean startingDisplayed;
boolean startingMoved;
boolean firstWindowDrawn;
@@ -173,8 +171,10 @@
AppWindowToken(WindowManagerService service, IApplicationToken token, boolean voiceInteraction,
DisplayContent dc, long inputDispatchingTimeoutNanos, boolean fullscreen,
boolean showForAllUsers, int targetSdk, int orientation, int rotationAnimationHint,
- int configChanges, boolean launchTaskBehind, boolean alwaysFocusable) {
+ int configChanges, boolean launchTaskBehind, boolean alwaysFocusable,
+ AppWindowContainerController controller) {
this(service, token, voiceInteraction, dc);
+ setController(controller);
mInputDispatchingTimeoutNanos = inputDispatchingTimeoutNanos;
mFillsParent = fullscreen;
mShowForAllUsers = showForAllUsers;
@@ -205,15 +205,16 @@
// We now have a good window to show, remove dead placeholders
removeDeadWindows();
- if (startingData != null) {
+ if (startingWindow != null) {
if (DEBUG_STARTING_WINDOW || DEBUG_ANIM) Slog.v(TAG, "Finish starting "
+ win.mToken + ": first real window is shown, no animation");
// If this initial window is animating, stop it -- we will do an animation to reveal
// it from behind the starting window, so there is no need for it to also be doing its
// own stuff.
winAnimator.clearAnimation();
- winAnimator.mService.mFinishedStarting.add(this);
- winAnimator.mService.mH.sendEmptyMessage(H.FINISHED_STARTING);
+ if (getController() != null) {
+ getController().removeStartingWindow();
+ }
}
updateReportedVisibilityLocked();
}
@@ -251,9 +252,12 @@
}
if (DEBUG_VISIBILITY) Slog.v(TAG, "VIS " + this + ": interesting="
+ numInteresting + " visible=" + numVisible);
+ final AppWindowContainerController controller = getController();
if (nowDrawn != reportedDrawn) {
if (nowDrawn) {
- mService.mH.obtainMessage(H.REPORT_APPLICATION_TOKEN_DRAWN, this).sendToTarget();
+ if (controller != null) {
+ controller.reportWindowsDrawn();
+ }
}
reportedDrawn = nowDrawn;
}
@@ -261,8 +265,13 @@
if (DEBUG_VISIBILITY) Slog.v(TAG,
"Visibility changed in " + this + ": vis=" + nowVisible);
reportedVisible = nowVisible;
- mService.mH.obtainMessage(H.REPORT_APPLICATION_TOKEN_WINDOWS,
- nowVisible ? 1 : 0, nowGone ? 1 : 0, this).sendToTarget();
+ if (controller != null) {
+ if (nowVisible) {
+ controller.reportWindowsVisible();
+ } else {
+ controller.reportWindowsGone();
+ }
+ }
}
}
@@ -399,6 +408,11 @@
return StackId.canReceiveKeys(mTask.mStack.mStackId) || mAlwaysFocusable;
}
+ AppWindowContainerController getController() {
+ final WindowContainerController controller = super.getController();
+ return controller != null ? (AppWindowContainerController) controller : null;
+ }
+
@Override
boolean isVisible() {
// If the app token isn't hidden then it is considered visible and there is no need to check
@@ -425,8 +439,6 @@
}
void onRemovedFromDisplay() {
- AppWindowToken startingToken = null;
-
if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM, "Removing app token: " + this);
boolean delayed = setVisibility(null, false, TRANSIT_UNSET, true, mVoiceInteraction);
@@ -447,6 +459,10 @@
if (DEBUG_ADD_REMOVE || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG_WM, "removeAppToken: "
+ this + " delayed=" + delayed + " Callers=" + Debug.getCallers(4));
+ if (startingData != null && getController() != null) {
+ getController().removeStartingWindow();
+ }
+
final TaskStack stack = mTask.mStack;
if (delayed && !isEmpty()) {
// set the token aside because it has an active animation to be finished
@@ -463,9 +479,6 @@
}
removed = true;
- if (startingData != null) {
- startingToken = this;
- }
stopFreezingScreen(true, true);
if (mService.mFocusedApp == this) {
if (DEBUG_FOCUS_LIGHT) Slog.v(TAG_WM, "Removing focused app token:" + this);
@@ -477,9 +490,6 @@
if (!delayed) {
updateReportedVisibilityLocked();
}
-
- // Will only remove if startingToken non null.
- mService.scheduleRemoveStartingWindowLocked(startingToken);
}
void clearAnimatingFlags() {
@@ -543,7 +553,9 @@
mAppStopped = true;
destroySurfaces();
// Remove any starting window that was added for this app if they are still around.
- mTask.mService.scheduleRemoveStartingWindowLocked(this);
+ if (getController() != null) {
+ getController().removeStartingWindow();
+ }
}
/**
@@ -653,16 +665,20 @@
// TODO: Something smells about the code below...Is there a better way?
if (startingWindow == win) {
if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Notify removed startingWindow " + win);
- mService.scheduleRemoveStartingWindowLocked(this);
+ if (getController() != null) {
+ getController().removeStartingWindow();
+ }
} else if (mChildren.size() == 0 && startingData != null) {
// If this is the last window and we had requested a starting transition window,
// well there is no point now.
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Nulling last startingWindow");
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Nulling last startingData");
startingData = null;
- } else if (mChildren.size() == 1 && startingView != null) {
+ } else if (mChildren.size() == 1 && startingSurface != null) {
// If this is the last window except for a starting transition window,
// we need to get rid of the starting transition.
- mService.scheduleRemoveStartingWindowLocked(this);
+ if (getController() != null) {
+ getController().removeStartingWindow();
+ }
}
}
@@ -1001,7 +1017,7 @@
}
final WindowState tStartingWindow = fromToken.startingWindow;
- if (tStartingWindow != null && fromToken.startingView != null) {
+ if (tStartingWindow != null && fromToken.startingSurface != null) {
// In this case, the starting icon has already been displayed, so start
// letting windows get shown immediately without any more transitions.
mService.mSkipAppTransitionAnimation = true;
@@ -1013,13 +1029,13 @@
// Transfer the starting window over to the new token.
startingData = fromToken.startingData;
- startingView = fromToken.startingView;
+ startingSurface = fromToken.startingSurface;
startingDisplayed = fromToken.startingDisplayed;
fromToken.startingDisplayed = false;
startingWindow = tStartingWindow;
reportedVisible = fromToken.reportedVisible;
fromToken.startingData = null;
- fromToken.startingView = null;
+ fromToken.startingSurface = null;
fromToken.startingWindow = null;
fromToken.startingMoved = true;
tStartingWindow.mToken = this;
@@ -1066,10 +1082,9 @@
startingData = fromToken.startingData;
fromToken.startingData = null;
fromToken.startingMoved = true;
- final Message m = mService.mH.obtainMessage(H.ADD_STARTING, this);
- // Note: we really want to do sendMessageAtFrontOfQueue() because we want to process the
- // message ASAP, before any other queued messages.
- mService.mH.sendMessageAtFrontOfQueue(m);
+ if (getController() != null) {
+ getController().scheduleAddStartingWindow();
+ }
return true;
}
@@ -1407,10 +1422,10 @@
pw.print(" firstWindowDrawn="); pw.print(firstWindowDrawn);
pw.print(" mIsExiting="); pw.println(mIsExiting);
}
- if (startingWindow != null || startingView != null
+ if (startingWindow != null || startingSurface != null
|| startingDisplayed || startingMoved) {
pw.print(prefix); pw.print("startingWindow="); pw.print(startingWindow);
- pw.print(" startingView="); pw.print(startingView);
+ pw.print(" startingSurface="); pw.print(startingSurface);
pw.print(" startingDisplayed="); pw.print(startingDisplayed);
pw.print(" startingMoved="); pw.println(startingMoved);
}
diff --git a/services/core/java/com/android/server/wm/DimLayerController.java b/services/core/java/com/android/server/wm/DimLayerController.java
index da2c6a7..04ae72f 100644
--- a/services/core/java/com/android/server/wm/DimLayerController.java
+++ b/services/core/java/com/android/server/wm/DimLayerController.java
@@ -11,6 +11,7 @@
import android.util.Slog;
import android.util.TypedValue;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.server.wm.DimLayer.DimLayerUser;
import java.io.PrintWriter;
@@ -310,6 +311,11 @@
}
}
+ @VisibleForTesting
+ boolean hasDimLayerUser(DimLayer.DimLayerUser dimLayerUser) {
+ return mState.containsKey(dimLayerUser);
+ }
+
void applyDimBehind(DimLayer.DimLayerUser dimLayerUser, WindowStateAnimator animator) {
applyDim(dimLayerUser, animator, false /* aboveApp */);
}
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index d86c4da..66267bd 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -106,6 +106,7 @@
import android.os.RemoteException;
import android.os.SystemClock;
import android.util.DisplayMetrics;
+import android.util.MutableBoolean;
import android.util.Slog;
import android.view.Display;
import android.view.DisplayInfo;
@@ -2102,10 +2103,14 @@
* @param frameScale the scale to apply to the frame, only used when width = -1 and height = -1
* @param config of the output bitmap
* @param wallpaperOnly true if only the wallpaper layer should be included in the screenshot
+ * @param includeDecor whether to include window decors, like the status or navigation bar
+ * background of the window
+ * @param toAshmem whether to convert the resulting bitmap to ashmem; this should be set to
+ * true if the Bitmap is sent over binder, and false otherwise
*/
Bitmap screenshotApplications(IBinder appToken, int width, int height,
boolean includeFullDisplay, float frameScale, Bitmap.Config config,
- boolean wallpaperOnly) {
+ boolean wallpaperOnly, boolean includeDecor, boolean toAshmem) {
int dw = mDisplayInfo.logicalWidth;
int dh = mDisplayInfo.logicalHeight;
if (dw == 0 || dh == 0) {
@@ -2137,7 +2142,7 @@
final int aboveAppLayer = (mService.mPolicy.windowTypeToLayerLw(TYPE_APPLICATION) + 1)
* TYPE_LAYER_MULTIPLIER + TYPE_LAYER_OFFSET;
-
+ final MutableBoolean mutableIncludeFullDisplay = new MutableBoolean(includeFullDisplay);
synchronized(mService.mWindowMap) {
// Figure out the part of the screen that is actually the app.
mScreenshotApplicationState.appWin = null;
@@ -2194,7 +2199,11 @@
}
// Don't include wallpaper in bounds calculation
- if (!includeFullDisplay && !w.mIsWallpaper) {
+ if (includeDecor && !stackBounds.isEmpty()) {
+ frame.set(stackBounds);
+ } else if (includeDecor) {
+ mutableIncludeFullDisplay.value = true;
+ } else if (!mutableIncludeFullDisplay.value && !w.mIsWallpaper) {
final Rect wf = w.mFrame;
final Rect cr = w.mContentInsets;
int left = wf.left + cr.left;
@@ -2252,7 +2261,7 @@
return null;
}
- if (!includeFullDisplay) {
+ if (!mutableIncludeFullDisplay.value) {
// Constrain frame to the screen size.
if (!frame.intersect(0, 0, dw, dh)) {
frame.setEmpty();
@@ -2353,9 +2362,13 @@
// Create a copy of the screenshot that is immutable and backed in ashmem.
// This greatly reduces the overhead of passing the bitmap between processes.
- Bitmap ret = bm.createAshmemBitmap(config);
- bm.recycle();
- return ret;
+ if (toAshmem) {
+ Bitmap ret = bm.createAshmemBitmap(config);
+ bm.recycle();
+ return ret;
+ } else {
+ return bm;
+ }
}
// TODO: Can this use createRotationMatrix()?
diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java
index 3fbe36f..f754775 100644
--- a/services/core/java/com/android/server/wm/InputMonitor.java
+++ b/services/core/java/com/android/server/wm/InputMonitor.java
@@ -251,16 +251,14 @@
}
if (appWindowToken != null && appWindowToken.appToken != null) {
- try {
- // Notify the activity manager about the timeout and let it decide whether
- // to abort dispatching or keep waiting.
- boolean abort = appWindowToken.appToken.keyDispatchingTimedOut(reason);
- if (! abort) {
- // The activity manager declined to abort dispatching.
- // Wait a bit longer and timeout again later.
- return appWindowToken.mInputDispatchingTimeoutNanos;
- }
- } catch (RemoteException ex) {
+ // Notify the activity manager about the timeout and let it decide whether
+ // to abort dispatching or keep waiting.
+ final AppWindowContainerController controller = appWindowToken.getController();
+ final boolean abort = controller != null && controller.keyDispatchingTimedOut(reason);
+ if (!abort) {
+ // The activity manager declined to abort dispatching.
+ // Wait a bit longer and timeout again later.
+ return appWindowToken.mInputDispatchingTimeoutNanos;
}
} else if (windowState != null) {
try {
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index 349740b..6ac172b 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -166,6 +166,19 @@
}
/**
+ * Get an array with display ids ordered by focus priority - last items should be given
+ * focus first. Sparse array just maps position to displayId.
+ */
+ void getDisplaysInFocusOrder(SparseIntArray displaysInFocusOrder) {
+ displaysInFocusOrder.clear();
+
+ final int size = mChildren.size();
+ for (int i = 0; i < size; ++i) {
+ displaysInFocusOrder.put(i, mChildren.get(i).getDisplayId());
+ }
+ }
+
+ /**
* Retrieve the DisplayContent for the specified displayId. Will create a new DisplayContent if
* there is a Display for the displayId.
*
@@ -309,7 +322,7 @@
if (!configChanged) {
return null;
}
- displayContent.onOverrideConfigurationChanged(currentConfig);
+ displayContent.onOverrideConfigurationChanged(newConfiguration);
if (displayId == DEFAULT_DISPLAY) {
// Override configuration of the default display duplicates global config. In this case
@@ -485,7 +498,10 @@
if (SHOW_TRANSACTIONS || SHOW_SURFACE_ALLOC) logSurface(winAnimator.mWin,
"RECOVER DESTROY", false);
winAnimator.destroySurface();
- mService.scheduleRemoveStartingWindowLocked(winAnimator.mWin.mAppToken);
+ if (winAnimator.mWin.mAppToken != null
+ && winAnimator.mWin.mAppToken.getController() != null) {
+ winAnimator.mWin.mAppToken.getController().removeStartingWindow();
+ }
}
try {
diff --git a/services/core/java/com/android/server/wm/SnapshotStartingData.java b/services/core/java/com/android/server/wm/SnapshotStartingData.java
new file mode 100644
index 0000000..9d97a0c
--- /dev/null
+++ b/services/core/java/com/android/server/wm/SnapshotStartingData.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2016 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 android.graphics.GraphicBuffer;
+import android.view.WindowManagerPolicy.StartingSurface;
+
+/**
+ * Represents starting data for snapshot starting windows.
+ */
+class SnapshotStartingData extends StartingData {
+
+ private final WindowManagerService mService;
+ private final GraphicBuffer mSnapshot;
+
+ SnapshotStartingData(WindowManagerService service, AppWindowToken appWindowToken,
+ GraphicBuffer snapshot) {
+ super(service, appWindowToken);
+ mService = service;
+ mSnapshot = snapshot;
+ }
+
+ @Override
+ StartingSurface createStartingSurface() {
+ return mService.mTaskSnapshotController.createStartingSurface(
+ mAppWindowToken, mSnapshot);
+ }
+}
diff --git a/services/core/java/com/android/server/wm/SplashScreenStartingData.java b/services/core/java/com/android/server/wm/SplashScreenStartingData.java
new file mode 100644
index 0000000..664e600
--- /dev/null
+++ b/services/core/java/com/android/server/wm/SplashScreenStartingData.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2016 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 android.content.res.CompatibilityInfo;
+import android.content.res.Configuration;
+import android.view.WindowManagerPolicy.StartingSurface;
+
+/**
+ * Represents starting data for splash screens, i.e. "traditional" starting windows.
+ */
+class SplashScreenStartingData extends StartingData {
+
+ private final String mPkg;
+ private final int mTheme;
+ private final CompatibilityInfo mCompatInfo;
+ private final CharSequence mNonLocalizedLabel;
+ private final int mLabelRes;
+ private final int mIcon;
+ private final int mLogo;
+ private final int mWindowFlags;
+ private final Configuration mMergedOverrideConfiguration;
+
+ SplashScreenStartingData(WindowManagerService service, AppWindowToken appWindowToken,
+ String pkg, int theme, CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel,
+ int labelRes, int icon, int logo, int windowFlags,
+ Configuration mergedOverrideConfiguration) {
+ super(service, appWindowToken);
+ mPkg = pkg;
+ mTheme = theme;
+ mCompatInfo = compatInfo;
+ mNonLocalizedLabel = nonLocalizedLabel;
+ mLabelRes = labelRes;
+ mIcon = icon;
+ mLogo = logo;
+ mWindowFlags = windowFlags;
+ mMergedOverrideConfiguration = mergedOverrideConfiguration;
+ }
+
+ @Override
+ StartingSurface createStartingSurface() {
+ return mService.mPolicy.addSplashScreen(mAppWindowToken.token, mPkg, mTheme, mCompatInfo,
+ mNonLocalizedLabel, mLabelRes, mIcon, mLogo, mWindowFlags,
+ mMergedOverrideConfiguration);
+ }
+}
diff --git a/services/core/java/com/android/server/wm/StartingData.java b/services/core/java/com/android/server/wm/StartingData.java
index 7115b0f..fcc4c3c 100644
--- a/services/core/java/com/android/server/wm/StartingData.java
+++ b/services/core/java/com/android/server/wm/StartingData.java
@@ -16,28 +16,27 @@
package com.android.server.wm;
-import android.content.res.CompatibilityInfo;
+import android.view.WindowManagerPolicy.StartingSurface;
-final class StartingData {
- final String pkg;
- final int theme;
- final CompatibilityInfo compatInfo;
- final CharSequence nonLocalizedLabel;
- final int labelRes;
- final int icon;
- final int logo;
- final int windowFlags;
+/**
+ * Represents the model about how a starting window should be constructed.
+ */
+public abstract class StartingData {
- StartingData(String _pkg, int _theme, CompatibilityInfo _compatInfo,
- CharSequence _nonLocalizedLabel,
- int _labelRes, int _icon, int _logo, int _windowFlags) {
- pkg = _pkg;
- theme = _theme;
- compatInfo = _compatInfo;
- nonLocalizedLabel = _nonLocalizedLabel;
- labelRes = _labelRes;
- icon = _icon;
- logo = _logo;
- windowFlags = _windowFlags;
+ protected final WindowManagerService mService;
+ protected final AppWindowToken mAppWindowToken;
+
+ protected StartingData(WindowManagerService service, AppWindowToken appWindowToken) {
+ mService = service;
+ mAppWindowToken = appWindowToken;
}
+
+ /**
+ * Creates the actual starting window surface. DO NOT HOLD THE WINDOW MANAGER LOCK WHEN CALLING
+ * THIS METHOD.
+ *
+ * @return a class implementing {@link StartingSurface} for easy removal with
+ * {@link StartingSurface#remove}
+ */
+ abstract StartingSurface createStartingSurface();
}
\ No newline at end of file
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 6005a99..b1b7542 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -22,6 +22,7 @@
import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_LANDSCAPE_ONLY;
import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_PRESERVE_ORIENTATION;
import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_PORTRAIT_ONLY;
+import static com.android.server.EventLogTags.WM_TASK_REMOVED;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STACK;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TASK_MOVEMENT;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
@@ -89,8 +90,8 @@
private boolean mIsOnTopLauncher;
Task(int taskId, TaskStack stack, int userId, WindowManagerService service, Rect bounds,
- Configuration overrideConfig, boolean isOnTopLauncher, int resizeMode,
- boolean homeTask) {
+ Configuration overrideConfig, boolean isOnTopLauncher, int resizeMode, boolean homeTask,
+ TaskWindowContainerController controller) {
mTaskId = taskId;
mStack = stack;
mUserId = userId;
@@ -98,6 +99,7 @@
mIsOnTopLauncher = isOnTopLauncher;
mResizeMode = resizeMode;
mHomeTask = homeTask;
+ setController(controller);
setBounds(bounds, overrideConfig);
}
@@ -144,43 +146,55 @@
mDeferRemoval = true;
return;
}
+ removeImmediately();
+ }
+
+ @Override
+ void removeImmediately() {
if (DEBUG_STACK) Slog.i(TAG, "removeTask: removing taskId=" + mTaskId);
- EventLog.writeEvent(EventLogTags.WM_TASK_REMOVED, mTaskId, "removeTask");
+ EventLog.writeEvent(WM_TASK_REMOVED, mTaskId, "removeTask");
mDeferRemoval = false;
+
+ // Make sure to remove dim layer user first before removing task its from parent.
DisplayContent content = getDisplayContent();
if (content != null) {
content.mDimLayerController.removeDimLayerUser(this);
}
- removeImmediately();
- mService.mTaskIdToTask.delete(mTaskId);
+
+ super.removeImmediately();
}
- // TODO: Change to use re-parenting in WC.
- void moveTaskToStack(TaskStack stack, boolean toTop) {
+ void reparent(TaskStack stack, int position) {
if (stack == mStack) {
return;
}
- if (DEBUG_STACK) Slog.i(TAG, "moveTaskToStack: removing taskId=" + mTaskId
+ if (DEBUG_STACK) Slog.i(TAG, "reParentTask: removing taskId=" + mTaskId
+ " from stack=" + mStack);
- EventLog.writeEvent(EventLogTags.WM_TASK_REMOVED, mTaskId, "moveTask");
+ EventLog.writeEvent(WM_TASK_REMOVED, mTaskId, "reParentTask");
getParent().removeChild(this);
- stack.addTask(this, toTop);
+ stack.addTask(this, position, showForAllUsers(), false /* moveParents */);
}
/** @see com.android.server.am.ActivityManagerService#positionTaskInStack(int, int, int). */
void positionTaskInStack(TaskStack stack, int position, Rect bounds,
Configuration overrideConfig) {
- if (mStack != null && stack != mStack) {
+ if (mStack == null) {
+ // There is an assumption that task already has a stack at this point, so lets make
+ // sure we comply with it.
+ throw new IllegalStateException("Trying to position task that has no parent.");
+ }
+ if (stack != mStack) {
// Task is already attached to a different stack. First we need to remove it from there
// and add to top of the target stack. We will move it proper position afterwards.
if (DEBUG_STACK) Slog.i(TAG, "positionTaskInStack: removing taskId=" + mTaskId
+ " from stack=" + mStack);
- EventLog.writeEvent(EventLogTags.WM_TASK_REMOVED, mTaskId, "moveTask");
+ EventLog.writeEvent(WM_TASK_REMOVED, mTaskId, "positionTaskInStack");
mStack.removeChild(this);
- stack.addTask(this, true /* toTop */);
+ stack.addTask(this, position);
+ } else {
+ stack.positionChildAt(position, this, true /* includingParents */);
}
- stack.positionChildAt(position, this, true /* includingParents */);
resizeLocked(bounds, overrideConfig, false /* force */);
for (int activityNdx = mChildren.size() - 1; activityNdx >= 0; --activityNdx) {
@@ -212,7 +226,7 @@
super.removeChild(token);
if (mChildren.isEmpty()) {
- EventLog.writeEvent(EventLogTags.WM_TASK_REMOVED, mTaskId, "removeAppToken: last token");
+ EventLog.writeEvent(WM_TASK_REMOVED, mTaskId, "removeAppToken: last token");
if (mDeferRemoval) {
removeIfPossible();
}
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotCache.java b/services/core/java/com/android/server/wm/TaskSnapshotCache.java
new file mode 100644
index 0000000..994a155
--- /dev/null
+++ b/services/core/java/com/android/server/wm/TaskSnapshotCache.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2016 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 android.annotation.Nullable;
+import android.app.ActivityManager.TaskSnapshot;
+import android.util.ArrayMap;
+
+/**
+ * Caches snapshots. See {@link TaskSnapshotController}.
+ * <p>
+ * Access to this class should be guarded by the global window manager lock.
+ */
+class TaskSnapshotCache {
+
+ private final ArrayMap<Task, TaskSnapshot> mCache = new ArrayMap<>();
+
+ void putSnapshot(Task task, TaskSnapshot snapshot) {
+ mCache.put(task, snapshot);
+ }
+
+ @Nullable TaskSnapshot getSnapshot(Task task) {
+ return mCache.get(task);
+ }
+}
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java
new file mode 100644
index 0000000..4421d61
--- /dev/null
+++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2016 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.app.ActivityManager.ENABLE_TASK_SNAPSHOTS;
+import static android.graphics.Bitmap.Config.ARGB_8888;
+import static android.graphics.GraphicBuffer.USAGE_HW_TEXTURE;
+import static android.graphics.GraphicBuffer.USAGE_SW_READ_NEVER;
+import static android.graphics.GraphicBuffer.USAGE_SW_WRITE_NEVER;
+import static android.graphics.PixelFormat.RGBA_8888;
+
+import android.annotation.Nullable;
+import android.app.ActivityManager.StackId;
+import android.app.ActivityManager.TaskSnapshot;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.GraphicBuffer;
+import android.util.ArraySet;
+import android.view.WindowManagerPolicy.StartingSurface;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+/**
+ * When an app token becomes invisible, we take a snapshot (bitmap) of the corresponding task and
+ * put it into our cache. Internally we use gralloc buffers to be able to draw them wherever we
+ * like without any copying.
+ * <p>
+ * System applications may retrieve a snapshot to represent the current state of a task, and draw
+ * them in their own process.
+ * <p>
+ * When we task becomes visible again, we show a starting window with the snapshot as the content to
+ * make app transitions more responsive.
+ * <p>
+ * To access this class, acquire the global window manager lock.
+ */
+class TaskSnapshotController {
+
+ private final WindowManagerService mService;
+ private final TaskSnapshotCache mCache = new TaskSnapshotCache();
+
+ private final ArraySet<Task> mTmpTasks = new ArraySet<>();
+
+ TaskSnapshotController(WindowManagerService service) {
+ mService = service;
+ }
+
+ void onTransitionStarting() {
+ if (!ENABLE_TASK_SNAPSHOTS) {
+ return;
+ }
+
+ // We need to take a snapshot of the task if and only if all activities of the task are
+ // either closing or hidden.
+ getClosingTasks(mService.mClosingApps, mTmpTasks);
+ for (int i = mTmpTasks.size() - 1; i >= 0; i--) {
+ final Task task = mTmpTasks.valueAt(i);
+ if (!canSnapshotTask(task)) {
+ continue;
+ }
+ final TaskSnapshot snapshot = snapshotTask(task);
+ if (snapshot != null) {
+ mCache.putSnapshot(task, snapshot);
+ }
+ }
+ }
+
+ @Nullable TaskSnapshot getSnapshot(Task task) {
+ return mCache.getSnapshot(task);
+ }
+
+ /**
+ * Creates a starting surface for {@param token} with {@param snapshot}. DO NOT HOLD THE WINDOW
+ * MANAGER LOCK WHEN CALLING THIS METHOD!
+ */
+ StartingSurface createStartingSurface(AppWindowToken token,
+ GraphicBuffer snapshot) {
+ return TaskSnapshotSurface.create(mService, token, snapshot);
+ }
+
+ private TaskSnapshot snapshotTask(Task task) {
+ final AppWindowToken top = (AppWindowToken) task.getTop();
+ if (top == null) {
+ return null;
+ }
+ final Bitmap bmp = top.mDisplayContent.screenshotApplications(top.token, -1, -1, false,
+ 1.0f, ARGB_8888, false, true, false);
+ if (bmp == null) {
+ return null;
+ }
+ // TODO: Already use a GraphicBuffer when snapshotting the content.
+ final GraphicBuffer buffer = GraphicBuffer.create(bmp.getWidth(), bmp.getHeight(),
+ RGBA_8888, USAGE_HW_TEXTURE | USAGE_SW_WRITE_NEVER | USAGE_SW_READ_NEVER);
+ final Canvas c = buffer.lockCanvas();
+ c.drawBitmap(bmp, 0, 0, null);
+ buffer.unlockCanvasAndPost(c);
+ return new TaskSnapshot(buffer, top.getConfiguration().orientation,
+ top.findMainWindow().mStableInsets);
+ }
+
+ /**
+ * Retrieves all closing tasks based on the list of closing apps during an app transition.
+ */
+ @VisibleForTesting
+ void getClosingTasks(ArraySet<AppWindowToken> closingApps, ArraySet<Task> outClosingTasks) {
+ outClosingTasks.clear();
+ for (int i = closingApps.size() - 1; i >= 0; i--) {
+ final AppWindowToken atoken = closingApps.valueAt(i);
+
+ // If the task of the app is not visible anymore, it means no other app in that task
+ // is opening. Thus, the task is closing.
+ if (atoken.mTask != null && !atoken.mTask.isVisible()) {
+ outClosingTasks.add(closingApps.valueAt(i).mTask);
+ }
+ }
+ }
+
+ private boolean canSnapshotTask(Task task) {
+ return !StackId.isHomeOrRecentsStack(task.mStack.mStackId);
+ }
+}
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotSurface.java b/services/core/java/com/android/server/wm/TaskSnapshotSurface.java
new file mode 100644
index 0000000..c3e3141
--- /dev/null
+++ b/services/core/java/com/android/server/wm/TaskSnapshotSurface.java
@@ -0,0 +1,202 @@
+/*
+ * Copyright (C) 2016 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.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR;
+import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
+import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
+import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TASK_SNAPSHOT;
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+
+import android.content.res.Configuration;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.GraphicBuffer;
+import android.graphics.Rect;
+import android.os.Handler;
+import android.os.Message;
+import android.os.RemoteException;
+import android.util.Slog;
+import android.view.Display;
+import android.view.IWindowSession;
+import android.view.Surface;
+import android.view.View;
+import android.view.ViewGroup.LayoutParams;
+import android.view.WindowManager;
+import android.view.WindowManagerGlobal;
+import android.view.WindowManagerPolicy.StartingSurface;
+
+import com.android.internal.view.BaseIWindow;
+
+/**
+ * This class represents a starting window that shows a snapshot.
+ * <p>
+ * DO NOT HOLD THE WINDOW MANAGER LOCK WHEN CALLING METHODS OF THIS CLASS!
+ */
+class TaskSnapshotSurface implements StartingSurface {
+
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "SnapshotStartingWindow" : TAG_WM;
+ private static final int MSG_REPORT_DRAW = 0;
+ private static final String TITLE_FORMAT = "SnapshotStartingWindow for taskId=%s";
+ private final Window mWindow;
+ private final Surface mSurface;
+ private final IWindowSession mSession;
+ private final WindowManagerService mService;
+ private boolean mHasDrawn;
+ private boolean mReportNextDraw;
+
+ static TaskSnapshotSurface create(WindowManagerService service, AppWindowToken token,
+ GraphicBuffer snapshot) {
+
+ final WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
+ final Window window = new Window();
+ final IWindowSession session = WindowManagerGlobal.getWindowSession();
+ window.setSession(session);
+ final Surface surface = new Surface();
+ final Rect tmpRect = new Rect();
+ final Rect tmpFrame = new Rect();
+ final Configuration tmpConfiguration = new Configuration();
+ synchronized (service.mWindowMap) {
+ layoutParams.type = TYPE_APPLICATION_STARTING;
+ layoutParams.format = snapshot.getFormat();
+ layoutParams.flags = FLAG_LAYOUT_INSET_DECOR
+ | FLAG_LAYOUT_IN_SCREEN
+ | FLAG_NOT_FOCUSABLE
+ | FLAG_NOT_TOUCHABLE
+ | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
+ layoutParams.privateFlags = PRIVATE_FLAG_TASK_SNAPSHOT;
+ layoutParams.token = token.token;
+ layoutParams.width = LayoutParams.MATCH_PARENT;
+ layoutParams.height = LayoutParams.MATCH_PARENT;
+
+ // TODO: Inherit behavior whether to draw behind status bar/nav bar.
+ layoutParams.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
+ layoutParams.setTitle(String.format(TITLE_FORMAT, token.mTask.mTaskId));
+ }
+ try {
+ final int res = session.addToDisplay(window, window.mSeq, layoutParams,
+ View.VISIBLE, token.getDisplayContent().getDisplayId(), tmpRect, tmpRect,
+ tmpRect, null);
+ if (res < 0) {
+ Slog.w(TAG, "Failed to add snapshot starting window res=" + res);
+ return null;
+ }
+ } catch (RemoteException e) {
+ // Local call.
+ }
+ final TaskSnapshotSurface snapshotSurface = new TaskSnapshotSurface(service, window,
+ surface);
+ window.setOuter(snapshotSurface);
+ try {
+ session.relayout(window, window.mSeq, layoutParams, -1, -1, View.VISIBLE, 0, tmpFrame,
+ tmpRect, tmpRect, tmpRect, tmpRect, tmpRect, tmpRect, tmpConfiguration,
+ surface);
+ } catch (RemoteException e) {
+ // Local call.
+ }
+ snapshotSurface.drawSnapshot(snapshot);
+ return snapshotSurface;
+ }
+
+ private TaskSnapshotSurface(WindowManagerService service, Window window, Surface surface) {
+ mService = service;
+ mSession = WindowManagerGlobal.getWindowSession();
+ mWindow = window;
+ mSurface = surface;
+ }
+
+ @Override
+ public void remove() {
+ try {
+ mSession.remove(mWindow);
+ } catch (RemoteException e) {
+ // Local call.
+ }
+ }
+
+ private void drawSnapshot(GraphicBuffer snapshot) {
+
+ // TODO: Just wrap the buffer here without any copying.
+ final Canvas c = mSurface.lockHardwareCanvas();
+ c.drawBitmap(Bitmap.createHardwareBitmap(snapshot), 0, 0, null);
+ mSurface.unlockCanvasAndPost(c);
+ final boolean reportNextDraw;
+ synchronized (mService.mWindowMap) {
+ mHasDrawn = true;
+ reportNextDraw = mReportNextDraw;
+ }
+ if (reportNextDraw) {
+ reportDrawn();
+ }
+ }
+
+ private void reportDrawn() {
+ synchronized (mService.mWindowMap) {
+ mReportNextDraw = false;
+ }
+ try {
+ mSession.finishDrawing(mWindow);
+ } catch (RemoteException e) {
+ // Local call.
+ }
+ }
+
+ private static Handler sHandler = new Handler() {
+
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MSG_REPORT_DRAW:
+ final boolean hasDrawn;
+ final TaskSnapshotSurface surface = (TaskSnapshotSurface) msg.obj;
+ synchronized (surface.mService.mWindowMap) {
+ hasDrawn = surface.mHasDrawn;
+ if (!hasDrawn) {
+ surface.mReportNextDraw = true;
+ }
+ }
+ if (hasDrawn) {
+ surface.reportDrawn();
+ }
+ break;
+ }
+ }
+ };
+
+ private static class Window extends BaseIWindow {
+
+ private TaskSnapshotSurface mOuter;
+
+ public void setOuter(TaskSnapshotSurface outer) {
+ mOuter = outer;
+ }
+
+ @Override
+ public void resized(Rect frame, Rect overscanInsets, Rect contentInsets, Rect visibleInsets,
+ Rect stableInsets, Rect outsets, boolean reportDraw, Configuration newConfig,
+ Rect backDropFrame, boolean forceLayout, boolean alwaysConsumeNavBar) {
+ if (reportDraw) {
+ sHandler.obtainMessage(MSG_REPORT_DRAW, mOuter).sendToTarget();
+ }
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index d7c7cfa..eeea532 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -507,8 +507,8 @@
}
// TODO: Checkout the call points of this method and the ones below to see how they can fit in WC.
- void addTask(Task task, boolean toTop) {
- addTask(task, toTop, task.showForAllUsers());
+ void addTask(Task task, int position) {
+ addTask(task, position, task.showForAllUsers(), true /* moveParents */);
}
/**
@@ -516,10 +516,10 @@
* When task is added to top of the stack, the entire branch of the hierarchy (including stack
* and display) will be brought to top.
* @param task The task to add.
- * @param toTop Whether to add it to the top or bottom.
+ * @param position Target position to add the task to.
* @param showForAllUsers Whether to show the task regardless of the current user.
*/
- void addTask(Task task, boolean toTop, boolean showForAllUsers) {
+ void addTask(Task task, int position, boolean showForAllUsers, boolean moveParents) {
final TaskStack currentStack = task.mStack;
// TODO: We pass stack to task's constructor, but we still need to call this method.
// This doesn't make sense, mStack will already be set equal to "this" at this point.
@@ -529,14 +529,12 @@
+ ", but it is already attached to stackId=" + task.mStack.mStackId);
}
- final int targetPosition = toTop ? mChildren.size() : 0;
-
// Add child task.
task.mStack = this;
- addChild(task, targetPosition);
+ addChild(task, null);
// Move child to a proper position, as some restriction for position might apply.
- positionChildAt(targetPosition, task, true /* includingParents */, showForAllUsers);
+ positionChildAt(position, task, moveParents /* includingParents */, showForAllUsers);
}
@Override
@@ -546,7 +544,7 @@
/**
* Overridden version of {@link TaskStack#positionChildAt(int, Task, boolean)}. Used in
- * {@link TaskStack#addTask(Task, boolean, boolean showForAllUsers)}, as it can receive
+ * {@link TaskStack#addTask(Task, int, boolean showForAllUsers, boolean)}, as it can receive
* showForAllUsers param from {@link AppWindowToken} instead of {@link Task#showForAllUsers()}.
*/
private void positionChildAt(int position, Task child, boolean includingParents,
diff --git a/services/core/java/com/android/server/wm/TaskWindowContainerController.java b/services/core/java/com/android/server/wm/TaskWindowContainerController.java
new file mode 100644
index 0000000..0e4d048
--- /dev/null
+++ b/services/core/java/com/android/server/wm/TaskWindowContainerController.java
@@ -0,0 +1,260 @@
+/*
+ * Copyright (C) 2016 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 android.app.ActivityManager.TaskSnapshot;
+import android.content.res.Configuration;
+import android.graphics.GraphicBuffer;
+import android.graphics.Rect;
+import android.util.EventLog;
+import android.util.Slog;
+
+import static com.android.server.EventLogTags.WM_TASK_CREATED;
+import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_DOCKED_DIVIDER;
+import static com.android.server.wm.WindowContainer.POSITION_BOTTOM;
+import static com.android.server.wm.WindowContainer.POSITION_TOP;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STACK;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+
+/**
+ * Controller for the task container. This is created by activity manager to link task records to
+ * the task container they use in window manager.
+ *
+ * Test class: {@link TaskWindowContainerControllerTests}
+ */
+public class TaskWindowContainerController
+ extends WindowContainerController<Task, WindowContainerListener> {
+
+ private final int mTaskId;
+
+ public TaskWindowContainerController(int taskId, int stackId, int userId, Rect bounds,
+ Configuration overrideConfig, int resizeMode, boolean homeTask, boolean isOnTopLauncher,
+ boolean toTop, boolean showForAllUsers) {
+ super(null, WindowManagerService.getInstance());
+ mTaskId = taskId;
+
+ synchronized(mWindowMap) {
+ if (DEBUG_STACK) Slog.i(TAG_WM, "TaskWindowContainerController: taskId=" + taskId
+ + " stackId=" + stackId + " bounds=" + bounds);
+
+ // TODO: Pass controller for the stack to get the container object when stack is
+ // switched to use controller.
+ final TaskStack stack = mService.mStackIdToStack.get(stackId);
+ if (stack == null) {
+ throw new IllegalArgumentException("TaskWindowContainerController: invalid stackId="
+ + stackId);
+ }
+ EventLog.writeEvent(WM_TASK_CREATED, taskId, stackId);
+ final Task task = new Task(taskId, stack, userId, mService, bounds, overrideConfig,
+ isOnTopLauncher, resizeMode, homeTask, this);
+ final int position = toTop ? POSITION_TOP : POSITION_BOTTOM;
+ stack.addTask(task, position, showForAllUsers, true /* moveParents */);
+ }
+ }
+
+ @Override
+ public void removeContainer() {
+ synchronized(mWindowMap) {
+ if (mContainer == null) {
+ if (DEBUG_STACK) Slog.i(TAG_WM, "removeTask: could not find taskId=" + mTaskId);
+ return;
+ }
+ mContainer.removeIfPossible();
+ super.removeContainer();
+ }
+ }
+
+ public void positionChildAt(AppWindowContainerController childController, int index) {
+ synchronized(mService.mWindowMap) {
+ final AppWindowToken aToken = childController.mContainer;
+ if (aToken == null) {
+ Slog.w(TAG_WM,
+ "Attempted to position of non-existing app : " + childController);
+ return;
+ }
+
+ final Task task = mContainer;
+ if (task == null) {
+ throw new IllegalArgumentException("positionChildAt: invalid task=" + this);
+ }
+ task.addChild(aToken, index);
+ }
+ }
+
+ public void reparent(int stackId, int position) {
+ synchronized (mWindowMap) {
+ if (DEBUG_STACK) Slog.i(TAG_WM, "reparent: moving taskId=" + mTaskId
+ + " to stackId=" + stackId + " at " + position);
+ if (mContainer == null) {
+ if (DEBUG_STACK) Slog.i(TAG_WM,
+ "reparent: could not find taskId=" + mTaskId);
+ return;
+ }
+ final TaskStack stack = mService.mStackIdToStack.get(stackId);
+ if (stack == null) {
+ if (DEBUG_STACK) Slog.i(TAG_WM,
+ "reparent: could not find stackId=" + stackId);
+ return;
+ }
+ mContainer.reparent(stack, position);
+ final DisplayContent displayContent = stack.getDisplayContent();
+ displayContent.setLayoutNeeded();
+ mService.mWindowPlacerLocked.performSurfacePlacement();
+ }
+ }
+
+ public void setResizeable(int resizeMode) {
+ synchronized (mWindowMap) {
+ if (mContainer != null) {
+ mContainer.setResizeable(resizeMode);
+ }
+ }
+ }
+
+ public void resize(Rect bounds, Configuration overrideConfig, boolean relayout,
+ boolean forced) {
+ synchronized (mWindowMap) {
+ if (mContainer == null) {
+ throw new IllegalArgumentException("resizeTask: taskId " + mTaskId + " not found.");
+ }
+
+ if (mContainer.resizeLocked(bounds, overrideConfig, forced) && relayout) {
+ mContainer.getDisplayContent().setLayoutNeeded();
+ mService.mWindowPlacerLocked.performSurfacePlacement();
+ }
+ }
+ }
+
+ // TODO: Move to positionChildAt() in stack controller once we have a stack controller.
+ public void positionAt(int stackId, int index, Rect bounds, Configuration overrideConfig) {
+ synchronized (mWindowMap) {
+ if (DEBUG_STACK) Slog.i(TAG_WM, "positionChildAt: positioning taskId=" + mTaskId
+ + " in stackId=" + stackId + " at " + index);
+ if (mContainer == null) {
+ if (DEBUG_STACK) Slog.i(TAG_WM,
+ "positionTaskInStack: could not find taskId=" + mTaskId);
+ return;
+ }
+ final TaskStack stack = mService.mStackIdToStack.get(stackId);
+ if (stack == null) {
+ if (DEBUG_STACK) Slog.i(TAG_WM,
+ "positionTaskInStack: could not find stackId=" + stackId);
+ return;
+ }
+ mContainer.positionTaskInStack(stack, index, bounds, overrideConfig);
+ final DisplayContent displayContent = stack.getDisplayContent();
+ displayContent.setLayoutNeeded();
+ mService.mWindowPlacerLocked.performSurfacePlacement();
+ }
+ }
+
+ // TODO: Replace with moveChildToTop in stack controller?
+ public void moveToTop(boolean includingParents) {
+ synchronized(mWindowMap) {
+ if (mContainer == null) {
+ Slog.e(TAG_WM, "moveToTop: taskId=" + mTaskId + " not found");
+ return;
+ }
+ final TaskStack stack = mContainer.mStack;
+ stack.positionChildAt(POSITION_TOP, mContainer, includingParents);
+
+ if (mService.mAppTransition.isTransitionSet()) {
+ mContainer.setSendingToBottom(false);
+ }
+ stack.getDisplayContent().layoutAndAssignWindowLayersIfNeeded();
+ }
+ }
+
+ // TODO: Replace with moveChildToBottom in stack controller?
+ public void moveToBottom() {
+ synchronized(mWindowMap) {
+ if (mContainer == null) {
+ Slog.e(TAG_WM, "moveTaskToBottom: taskId=" + mTaskId + " not found");
+ return;
+ }
+ final TaskStack stack = mContainer.mStack;
+ stack.positionChildAt(POSITION_BOTTOM, mContainer, false /* includingParents */);
+ if (mService.mAppTransition.isTransitionSet()) {
+ mContainer.setSendingToBottom(true);
+ }
+ stack.getDisplayContent().layoutAndAssignWindowLayersIfNeeded();
+ }
+ }
+
+ public void getBounds(Rect bounds) {
+ synchronized (mWindowMap) {
+ if (mContainer != null) {
+ mContainer.getBounds(bounds);
+ return;
+ }
+ bounds.setEmpty();
+ }
+ }
+
+ /**
+ * Puts this task into docked drag resizing mode. See {@link DragResizeMode}.
+ *
+ * @param resizing Whether to put the task into drag resize mode.
+ */
+ public void setTaskDockedResizing(boolean resizing) {
+ synchronized (mWindowMap) {
+ if (mContainer == null) {
+ Slog.w(TAG_WM, "setTaskDockedResizing: taskId " + mTaskId + " not found.");
+ return;
+ }
+ mContainer.setDragResizing(resizing, DRAG_RESIZE_MODE_DOCKED_DIVIDER);
+ }
+ }
+
+ public void cancelWindowTransition() {
+ synchronized (mWindowMap) {
+ if (mContainer == null) {
+ Slog.w(TAG_WM, "cancelWindowTransition: taskId " + mTaskId + " not found.");
+ return;
+ }
+ mContainer.cancelTaskWindowTransition();
+ }
+ }
+
+ public void cancelThumbnailTransition() {
+ synchronized (mWindowMap) {
+ if (mContainer == null) {
+ Slog.w(TAG_WM, "cancelThumbnailTransition: taskId " + mTaskId + " not found.");
+ return;
+ }
+ mContainer.cancelTaskThumbnailTransition();
+ }
+ }
+
+ /**
+ * @return a graphic buffer representing a screenshot of a task
+ */
+ public TaskSnapshot getSnapshot() {
+ synchronized (mWindowMap) {
+ if (mContainer == null) {
+ Slog.w(TAG_WM, "getSnapshot: taskId " + mTaskId + " not found.");
+ return null;
+ }
+ return mService.mTaskSnapshotController.getSnapshot(mContainer);
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "{TaskWindowContainerController taskId=" + mTaskId + "}";
+ }
+}
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java
index c9bf4fa..fd7ea6d 100644
--- a/services/core/java/com/android/server/wm/WindowContainer.java
+++ b/services/core/java/com/android/server/wm/WindowContainer.java
@@ -75,6 +75,9 @@
private final Pools.SynchronizedPool<ForAllWindowsConsumerWrapper> mConsumerWrapperPool =
new Pools.SynchronizedPool<>(3);
+ // The owner/creator for this container. No controller if null.
+ private WindowContainerController mController;
+
final protected WindowContainer getParent() {
return mParent;
}
@@ -188,6 +191,10 @@
if (mParent != null) {
mParent.removeChild(this);
}
+
+ if (mController != null) {
+ setController(null);
+ }
}
/**
@@ -228,7 +235,7 @@
@CallSuper
void positionChildAt(int position, E child, boolean includingParents) {
if ((position < 0 && position != POSITION_BOTTOM)
- || (position >= mChildren.size() && position != POSITION_TOP)) {
+ || (position > mChildren.size() && position != POSITION_TOP)) {
throw new IllegalArgumentException("positionAt: invalid position=" + position
+ ", children number=" + mChildren.size());
}
@@ -241,7 +248,7 @@
switch (position) {
case POSITION_TOP:
- if (mChildren.getLast() != child) {
+ if (mChildren.peekLast() != child) {
mChildren.remove(child);
mChildren.addLast(child);
}
@@ -251,7 +258,7 @@
}
break;
case POSITION_BOTTOM:
- if (mChildren.getFirst() != child) {
+ if (mChildren.peekFirst() != child) {
mChildren.remove(child);
mChildren.addFirst(child);
}
@@ -662,6 +669,23 @@
} while (current != null);
}
+ WindowContainerController getController() {
+ return mController;
+ }
+
+ void setController(WindowContainerController controller) {
+ if (mController != null && controller != null) {
+ throw new IllegalArgumentException("Can't set controller=" + mController
+ + " for container=" + this + " Already set to=" + mController);
+ }
+ if (controller != null) {
+ controller.setContainer(this);
+ } else if (mController != null) {
+ mController.setContainer(null);
+ }
+ mController = controller;
+ }
+
/**
* Dumps the names of this container children in the input print writer indenting each
* level with the input prefix.
diff --git a/services/core/java/com/android/server/wm/WindowContainerController.java b/services/core/java/com/android/server/wm/WindowContainerController.java
new file mode 100644
index 0000000..84ffc35
--- /dev/null
+++ b/services/core/java/com/android/server/wm/WindowContainerController.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2016 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 android.os.IBinder;
+
+import java.util.HashMap;
+
+/**
+ * Class that allows the owner/creator of a {@link WindowContainer} to communicate directly with the
+ * container and make changes.
+ * Note that public calls (mostly in sub-classes) into this class are assumed to be originating from
+ * outside the window manager so the window manager lock is held and appropriate permissions are
+ * checked before calls are allowed to proceed.
+ *
+ * Test class: {@link WindowContainerControllerTests}
+ */
+class WindowContainerController<E extends WindowContainer, I extends WindowContainerListener> {
+
+ final WindowManagerService mService;
+ final RootWindowContainer mRoot;
+ final HashMap<IBinder, WindowState> mWindowMap;
+
+ // The window container this controller owns.
+ E mContainer;
+ // Interface for communicating changes back to the owner.
+ final I mListener;
+
+ WindowContainerController(I listener, WindowManagerService service) {
+ mListener = listener;
+ mService = service;
+ mRoot = mService != null ? mService.mRoot : null;
+ mWindowMap = mService != null ? mService.mWindowMap : null;
+ }
+
+ void setContainer(E container) {
+ if (mContainer != null && container != null) {
+ throw new IllegalArgumentException("Can't set container=" + container
+ + " for controller=" + this + " Already set to=" + mContainer);
+ }
+ mContainer = container;
+ }
+
+ void removeContainer() {
+ // TODO: See if most uses cases should support removeIfPossible here.
+ //mContainer.removeIfPossible();
+ if (mContainer != null) {
+ mContainer.setController(null);
+ mContainer = null;
+ }
+ }
+
+ boolean checkCallingPermission(String permission, String func) {
+ return mService.checkCallingPermission(permission, func);
+ }
+}
diff --git a/core/java/android/service/autofill/IAutoFillCallback.aidl b/services/core/java/com/android/server/wm/WindowContainerListener.java
similarity index 70%
copy from core/java/android/service/autofill/IAutoFillCallback.aidl
copy to services/core/java/com/android/server/wm/WindowContainerListener.java
index d6d4f39..ab9d71a 100644
--- a/core/java/android/service/autofill/IAutoFillCallback.aidl
+++ b/services/core/java/com/android/server/wm/WindowContainerListener.java
@@ -11,17 +11,15 @@
* 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.
+ * limitations under the License
*/
-package android.service.autofill;
-
-import java.util.List;
+package com.android.server.wm;
/**
- * @hide
+ * Interface used by the owner/creator of the container to listen to changes with the container.
+ * @see WindowContainerController
*/
-oneway interface IAutoFillCallback {
- void autofill(in List values);
- void showError(String message);
+public interface WindowContainerListener {
+
}
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 2ade924..195d4c3 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -16,6 +16,80 @@
package com.android.server.wm;
+import static android.Manifest.permission.MANAGE_APP_TOKENS;
+import static android.Manifest.permission.REGISTER_WINDOW_MANAGER_LISTENERS;
+import static android.app.ActivityManager.DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT;
+import static android.app.ActivityManager.StackId.DOCKED_STACK_ID;
+import static android.app.ActivityManager.StackId.PINNED_STACK_ID;
+import static android.app.StatusBarManager.DISABLE_MASK;
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
+import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.WindowManager.DOCKED_INVALID;
+import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
+import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
+import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
+import static android.view.WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD;
+import static android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
+import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
+import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
+import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
+import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
+import static android.view.WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL;
+import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
+import static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TASK_SNAPSHOT;
+import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
+import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
+import static android.view.WindowManager.LayoutParams.TYPE_DRAG;
+import static android.view.WindowManager.LayoutParams.TYPE_DREAM;
+import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
+import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG;
+import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
+import static android.view.WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION;
+import static android.view.WindowManager.LayoutParams.TYPE_QS_DIALOG;
+import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
+import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
+import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION;
+import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
+import static android.view.WindowManagerGlobal.RELAYOUT_DEFER_SURFACE_DESTROY;
+import static android.view.WindowManagerGlobal.RELAYOUT_RES_SURFACE_CHANGED;
+import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT;
+import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
+import static com.android.server.wm.AppTransition.TRANSIT_UNSET;
+import static com.android.server.wm.AppWindowAnimator.PROLONG_ANIMATION_AT_END;
+import static com.android.server.wm.AppWindowAnimator.PROLONG_ANIMATION_AT_START;
+import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_DOCKED_DIVIDER;
+import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_FREEFORM;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ANIM;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_BOOT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_CONFIGURATION;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DRAG;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS_LIGHT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_KEEP_SCREEN_ON;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ORIENTATION;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_SCREENSHOT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_SCREEN_ON;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STARTING_WINDOW;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TASK_POSITIONING;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_VISIBILITY;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WALLPAPER_LIGHT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WINDOW_MOVEMENT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WINDOW_TRACE;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_STACK_CRAWLS;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_VERBOSE_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_KEEP_SCREEN_ON;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+
import android.Manifest;
import android.Manifest.permission;
import android.animation.ValueAnimator;
@@ -39,8 +113,8 @@
import android.content.res.Configuration;
import android.database.ContentObserver;
import android.graphics.Bitmap;
-import android.graphics.PixelFormat;
import android.graphics.Matrix;
+import android.graphics.PixelFormat;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.RectF;
@@ -88,9 +162,7 @@
import android.view.Display;
import android.view.DisplayInfo;
import android.view.Gravity;
-import android.view.PointerIcon;
import android.view.IAppTransitionAnimationSpecsFuture;
-import android.view.IApplicationToken;
import android.view.IDockedStackListener;
import android.view.IInputFilter;
import android.view.IOnKeyguardExitResult;
@@ -108,6 +180,7 @@
import android.view.KeyEvent;
import android.view.MagnificationSpec;
import android.view.MotionEvent;
+import android.view.PointerIcon;
import android.view.Surface;
import android.view.Surface.OutOfResourcesException;
import android.view.SurfaceControl;
@@ -133,7 +206,6 @@
import com.android.internal.view.IInputMethodClient;
import com.android.internal.view.IInputMethodManager;
import com.android.internal.view.WindowManagerPolicyThread;
-import com.android.server.AttributeCache;
import com.android.server.DisplayThread;
import com.android.server.EventLogTags;
import com.android.server.FgThread;
@@ -163,85 +235,6 @@
import java.util.HashMap;
import java.util.List;
-import static android.Manifest.permission.MANAGE_APP_TOKENS;
-import static android.Manifest.permission.REGISTER_WINDOW_MANAGER_LISTENERS;
-import static android.app.ActivityManager.DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT;
-import static android.app.ActivityManager.StackId.DOCKED_STACK_ID;
-import static android.app.ActivityManager.StackId.PINNED_STACK_ID;
-import static android.app.StatusBarManager.DISABLE_MASK;
-import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
-import static android.view.Display.DEFAULT_DISPLAY;
-import static android.view.WindowManager.DOCKED_INVALID;
-import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
-import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
-import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
-import static android.view.WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD;
-import static android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
-import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
-import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
-import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
-import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
-import static android.view.WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL;
-import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
-import static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW;
-import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
-import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
-import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
-import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
-import static android.view.WindowManager.LayoutParams.TYPE_DRAG;
-import static android.view.WindowManager.LayoutParams.TYPE_DREAM;
-import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
-import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG;
-import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
-import static android.view.WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION;
-import static android.view.WindowManager.LayoutParams.TYPE_QS_DIALOG;
-import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
-import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
-import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION;
-import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
-import static android.view.WindowManagerGlobal.RELAYOUT_DEFER_SURFACE_DESTROY;
-import static android.view.WindowManagerGlobal.RELAYOUT_RES_SURFACE_CHANGED;
-import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT;
-import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
-import static com.android.server.EventLogTags.WM_TASK_CREATED;
-import static com.android.server.wm.AppTransition.TRANSIT_UNSET;
-import static com.android.server.wm.AppWindowAnimator.PROLONG_ANIMATION_AT_END;
-import static com.android.server.wm.AppWindowAnimator.PROLONG_ANIMATION_AT_START;
-import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_DOCKED_DIVIDER;
-import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_FREEFORM;
-import static com.android.server.wm.WindowContainer.POSITION_BOTTOM;
-import static com.android.server.wm.WindowContainer.POSITION_TOP;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ANIM;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_BOOT;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_CONFIGURATION;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DRAG;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS_LIGHT;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_KEEP_SCREEN_ON;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ORIENTATION;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_SCREENSHOT;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_SCREEN_ON;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STACK;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STARTING_WINDOW;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TASK_POSITIONING;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TOKEN_MOVEMENT;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_VISIBILITY;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WALLPAPER_LIGHT;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WINDOW_MOVEMENT;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WINDOW_TRACE;
-import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
-import static com.android.server.wm.WindowManagerDebugConfig.SHOW_STACK_CRAWLS;
-import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS;
-import static com.android.server.wm.WindowManagerDebugConfig.SHOW_VERBOSE_TRANSACTIONS;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_KEEP_SCREEN_ON;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
-import static java.lang.Integer.MAX_VALUE;
-
/** {@hide} */
public class WindowManagerService extends IWindowManager.Stub
implements Watchdog.Monitor, WindowManagerPolicy.WindowManagerFuncs {
@@ -584,6 +577,7 @@
final UnknownAppVisibilityController mUnknownAppVisibilityController =
new UnknownAppVisibilityController(this);
+ final TaskSnapshotController mTaskSnapshotController = new TaskSnapshotController(this);
boolean mIsTouchDevice;
@@ -711,8 +705,6 @@
private final BoundsAnimationController mBoundsAnimationController;
- SparseArray<Task> mTaskIdToTask = new SparseArray<>();
-
/** All of the TaskStacks in the window manager, unordered. For an ordered list call
* DisplayContent.getStacks(). */
// TODO: Don't believe this is needed with the WindowContainer model.
@@ -915,16 +907,18 @@
void onAppFreezeTimeout();
}
- public static WindowManagerService main(final Context context,
- final InputManagerService im,
- final boolean haveInputMethods, final boolean showBootMsgs,
- final boolean onlyCore, WindowManagerPolicy policy) {
- final WindowManagerService[] holder = new WindowManagerService[1];
- DisplayThread.getHandler().runWithScissors(() -> {
- holder[0] = new WindowManagerService(context, im, haveInputMethods, showBootMsgs,
- onlyCore, policy);
- }, 0);
- return holder[0];
+ private static WindowManagerService sInstance;
+ static WindowManagerService getInstance() {
+ return sInstance;
+ }
+
+ public static WindowManagerService main(final Context context, final InputManagerService im,
+ final boolean haveInputMethods, final boolean showBootMsgs, final boolean onlyCore,
+ WindowManagerPolicy policy) {
+ DisplayThread.getHandler().runWithScissors(() ->
+ sInstance = new WindowManagerService(context, im, haveInputMethods, showBootMsgs,
+ onlyCore, policy), 0);
+ return sInstance;
}
private void initPolicy() {
@@ -1219,7 +1213,9 @@
+ token + ". Aborting.");
return WindowManagerGlobal.ADD_APP_EXITING;
}
- if (rootType == TYPE_APPLICATION_STARTING && atoken.firstWindowDrawn) {
+ if (rootType == TYPE_APPLICATION_STARTING
+ && (attrs.privateFlags & PRIVATE_FLAG_TASK_SNAPSHOT) == 0
+ && atoken.firstWindowDrawn) {
// No need for this guy!
if (DEBUG_STARTING_WINDOW || localLOGV) Slog.v(
TAG_WM, "**** NO NEED TO START: " + attrs.getTitle());
@@ -1970,7 +1966,8 @@
+ " newVis=" + viewVisibility, stack);
}
if (viewVisibility == View.VISIBLE &&
- (win.mAppToken == null || !win.mAppToken.clientHidden)) {
+ (win.mAppToken == null || win.mAttrs.type == TYPE_APPLICATION_STARTING
+ || !win.mAppToken.clientHidden)) {
result = relayoutVisibleWindow(outConfig, result, win, winAnimator, attrChanges,
oldVisibility);
try {
@@ -2077,7 +2074,10 @@
win.setDisplayLayoutNeeded();
win.mGivenInsetsPending = (flags&WindowManagerGlobal.RELAYOUT_INSETS_PENDING) != 0;
configChanged = updateOrientationFromAppTokensLocked(false, displayId);
- mWindowPlacerLocked.performSurfacePlacement();
+
+ // We may be deferring layout passes at the moment, but since the client is interested
+ // in the new out values right now we need to force a layout.
+ mWindowPlacerLocked.performSurfacePlacement(true /* force */);
if (toBeDisplayed && win.mIsWallpaper) {
DisplayInfo displayInfo = win.getDisplayContent().getDisplayInfo();
dc.mWallpaperController.updateWallpaperOffset(
@@ -2369,7 +2369,7 @@
return atoken.mAppAnimator.animation != null;
}
- private boolean checkCallingPermission(String permission, String func) {
+ boolean checkCallingPermission(String permission, String func) {
// Quick check: if the calling permission is me, it's all okay.
if (Binder.getCallingPid() == Process.myPid()) {
return true;
@@ -2443,102 +2443,6 @@
}
@Override
- public void addAppToken(int addPos, IApplicationToken token, int taskId,
- int requestedOrientation, boolean fullscreen, boolean showForAllUsers,
- int configChanges, boolean voiceInteraction, boolean launchTaskBehind,
- boolean alwaysFocusable, int targetSdkVersion, int rotationAnimationHint) {
- if (!checkCallingPermission(MANAGE_APP_TOKENS, "addAppToken()")) {
- throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
- }
-
- // Get the dispatching timeout here while we are not holding any locks so that it
- // can be cached by the AppWindowToken. The timeout value is used later by the
- // input dispatcher in code that does hold locks. If we did not cache the value
- // here we would run the chance of introducing a deadlock between the window manager
- // (which holds locks while updating the input dispatcher state) and the activity manager
- // (which holds locks while querying the application token).
- long inputDispatchingTimeoutNanos;
- try {
- inputDispatchingTimeoutNanos = token.getKeyDispatchingTimeout() * 1000000L;
- } catch (RemoteException ex) {
- Slog.w(TAG_WM, "Could not get dispatching timeout.", ex);
- inputDispatchingTimeoutNanos = DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS;
- }
-
- synchronized(mWindowMap) {
- AppWindowToken atoken = mRoot.getAppWindowToken(token.asBinder());
- if (atoken != null) {
- Slog.w(TAG_WM, "Attempted to add existing app token: " + token);
- return;
- }
-
- Task task = mTaskIdToTask.get(taskId);
- if (task == null) {
- throw new IllegalArgumentException("addAppToken: invalid taskId=" + taskId);
- }
-
- atoken = new AppWindowToken(this, token, voiceInteraction, task.getDisplayContent(),
- inputDispatchingTimeoutNanos, fullscreen, showForAllUsers, targetSdkVersion,
- requestedOrientation, rotationAnimationHint, configChanges, launchTaskBehind,
- alwaysFocusable);
- if (DEBUG_TOKEN_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG_WM, "addAppToken: " + atoken
- + " task=" + taskId + " at " + addPos);
-
- task.addChild(atoken, addPos);
- }
- }
-
- @Override
- public void addAppToTask(IBinder token, int taskId) {
- if (!checkCallingPermission(MANAGE_APP_TOKENS, "setAppTask()")) {
- throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
- }
-
- synchronized(mWindowMap) {
- final AppWindowToken atoken = mRoot.getAppWindowToken(token);
- if (atoken == null) {
- Slog.w(TAG_WM, "Attempted to set task id of non-existing app token: " + token);
- return;
- }
-
- Task task = mTaskIdToTask.get(taskId);
- if (task == null) {
- throw new IllegalArgumentException("setAppTask: invalid taskId=" + taskId);
- }
- task.addChild(atoken, MAX_VALUE /* at top */);
- }
- }
-
- public void addTask(int taskId, int stackId, int userId, Rect bounds,
- Configuration overrideConfig, int resizeMode, boolean homeTask, boolean isOnTopLauncher,
- boolean toTop, boolean showForAllUsers) {
- if (!checkCallingPermission(MANAGE_APP_TOKENS, "addTask()")) {
- throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
- }
-
- synchronized(mWindowMap) {
- Task task = mTaskIdToTask.get(taskId);
- if (task != null) {
- throw new IllegalArgumentException(
- "addTask: Attempt to add already existing task=" + task);
- }
-
- if (DEBUG_STACK) Slog.i(TAG_WM, "createTaskLocked: taskId=" + taskId
- + " stackId=" + stackId + " bounds=" + bounds);
-
- final TaskStack stack = mStackIdToStack.get(stackId);
- if (stack == null) {
- throw new IllegalArgumentException("addTask: invalid stackId=" + stackId);
- }
- EventLog.writeEvent(WM_TASK_CREATED, taskId, stackId);
- task = new Task(taskId, stack, userId, this, bounds, overrideConfig, isOnTopLauncher,
- resizeMode, homeTask);
- mTaskIdToTask.put(taskId, task);
- stack.addTask(task, toTop, showForAllUsers);
- }
- }
-
- @Override
public Configuration updateOrientationFromAppTokens(Configuration currentConfig,
IBinder freezeThisOneIfNeeded, int displayId) {
if (!checkCallingPermission(MANAGE_APP_TOKENS, "updateOrientationFromAppTokens()")) {
@@ -2675,35 +2579,6 @@
}
}
- @Override
- public void setAppOrientation(IApplicationToken token, int requestedOrientation) {
- if (!checkCallingPermission(MANAGE_APP_TOKENS, "setAppOrientation()")) {
- throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
- }
-
- synchronized(mWindowMap) {
- final AppWindowToken atoken = mRoot.getAppWindowToken(token.asBinder());
- if (atoken == null) {
- Slog.w(TAG_WM, "Attempted to set orientation of non-existing app token: " + token);
- return;
- }
-
- atoken.setOrientation(requestedOrientation);
- }
- }
-
- @Override
- public int getAppOrientation(IApplicationToken token) {
- synchronized(mWindowMap) {
- final AppWindowToken wtoken = mRoot.getAppWindowToken(token.asBinder());
- if (wtoken == null) {
- return SCREEN_ORIENTATION_UNSPECIFIED;
- }
-
- return wtoken.getOrientationIgnoreVisibility();
- }
- }
-
void setFocusTaskRegionLocked() {
final Task focusedTask = mFocusedApp != null ? mFocusedApp.mTask : null;
if (focusedTask != null) {
@@ -2912,113 +2787,6 @@
}
}
- @Override
- public boolean setAppStartingWindow(IBinder token, String pkg,
- int theme, CompatibilityInfo compatInfo,
- CharSequence nonLocalizedLabel, int labelRes, int icon, int logo,
- int windowFlags, IBinder transferFrom, boolean createIfNeeded) {
- if (!checkCallingPermission(MANAGE_APP_TOKENS, "setAppStartingWindow()")) {
- throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
- }
-
- synchronized(mWindowMap) {
- if (DEBUG_STARTING_WINDOW) Slog.v(
- TAG_WM, "setAppStartingWindow: token=" + token + " pkg=" + pkg
- + " transferFrom=" + transferFrom);
-
- final AppWindowToken wtoken = mRoot.getAppWindowToken(token);
- if (wtoken == null) {
- Slog.w(TAG_WM, "Attempted to set icon of non-existing app token: " + token);
- return false;
- }
-
- // If the display is frozen, we won't do anything until the
- // actual window is displayed so there is no reason to put in
- // the starting window.
- if (!okToDisplay()) {
- return false;
- }
-
- if (wtoken.startingData != null) {
- return false;
- }
-
- // If this is a translucent window, then don't
- // show a starting window -- the current effect (a full-screen
- // opaque starting window that fades away to the real contents
- // when it is ready) does not work for this.
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Checking theme of starting window: 0x"
- + Integer.toHexString(theme));
- if (theme != 0) {
- AttributeCache.Entry ent = AttributeCache.instance().get(pkg, theme,
- com.android.internal.R.styleable.Window, mCurrentUserId);
- if (ent == null) {
- // Whoops! App doesn't exist. Um. Okay. We'll just
- // pretend like we didn't see that.
- return false;
- }
- final boolean windowIsTranslucent = ent.array.getBoolean(
- com.android.internal.R.styleable.Window_windowIsTranslucent, false);
- final boolean windowIsFloating = ent.array.getBoolean(
- com.android.internal.R.styleable.Window_windowIsFloating, false);
- final boolean windowShowWallpaper = ent.array.getBoolean(
- com.android.internal.R.styleable.Window_windowShowWallpaper, false);
- final boolean windowDisableStarting = ent.array.getBoolean(
- com.android.internal.R.styleable.Window_windowDisablePreview, false);
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Translucent=" + windowIsTranslucent
- + " Floating=" + windowIsFloating
- + " ShowWallpaper=" + windowShowWallpaper);
- if (windowIsTranslucent) {
- return false;
- }
- if (windowIsFloating || windowDisableStarting) {
- return false;
- }
- if (windowShowWallpaper) {
- if (wtoken.getDisplayContent().mWallpaperController.getWallpaperTarget()
- == null) {
- // If this theme is requesting a wallpaper, and the wallpaper
- // is not currently visible, then this effectively serves as
- // an opaque window and our starting window transition animation
- // can still work. We just need to make sure the starting window
- // is also showing the wallpaper.
- windowFlags |= FLAG_SHOW_WALLPAPER;
- } else {
- return false;
- }
- }
- }
-
- if (wtoken.transferStartingWindow(transferFrom)) {
- return true;
- }
-
- // There is no existing starting window, and the caller doesn't
- // want us to create one, so that's it!
- if (!createIfNeeded) {
- return false;
- }
-
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Creating StartingData");
- wtoken.startingData = new StartingData(pkg, theme, compatInfo, nonLocalizedLabel,
- labelRes, icon, logo, windowFlags);
- Message m = mH.obtainMessage(H.ADD_STARTING, wtoken);
- // Note: we really want to do sendMessageAtFrontOfQueue() because we
- // want to process the message ASAP, before any other queued
- // messages.
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Enqueueing ADD_STARTING");
- mH.sendMessageAtFrontOfQueue(m);
- }
- return true;
- }
-
- public void removeAppStartingWindow(IBinder token) {
- synchronized (mWindowMap) {
- final AppWindowToken wtoken = mRoot.getAppWindowToken(token);
- scheduleRemoveStartingWindowLocked(wtoken);
- }
- }
-
public void setAppFullscreen(IBinder token, boolean toOpaque) {
synchronized (mWindowMap) {
final AppWindowToken atoken = mRoot.getAppWindowToken(token);
@@ -3055,304 +2823,6 @@
}
}
- @Override
- public void notifyAppResumed(IBinder token, boolean wasStopped, boolean allowSavedSurface) {
- if (!checkCallingPermission(MANAGE_APP_TOKENS, "notifyAppResumed()")) {
- throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
- }
-
- synchronized(mWindowMap) {
- final AppWindowToken wtoken = mRoot.getAppWindowToken(token);
- if (wtoken == null) {
- Slog.w(TAG_WM, "Attempted to notify resumed of non-existing app token: " + token);
- return;
- }
- wtoken.notifyAppResumed(wasStopped, allowSavedSurface);
- }
- }
-
- @Override
- public void notifyAppStopped(IBinder token) {
- if (!checkCallingPermission(MANAGE_APP_TOKENS, "notifyAppStopped()")) {
- throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
- }
-
- synchronized(mWindowMap) {
- final AppWindowToken wtoken;
- wtoken = mRoot.getAppWindowToken(token);
- if (wtoken == null) {
- Slog.w(TAG_WM, "Attempted to notify stopped of non-existing app token: " + token);
- return;
- }
- wtoken.notifyAppStopped();
- }
- }
-
- @Override
- public void setAppVisibility(IBinder token, boolean visible) {
- if (!checkCallingPermission(MANAGE_APP_TOKENS, "setAppVisibility()")) {
- throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
- }
-
- AppWindowToken wtoken;
-
- synchronized(mWindowMap) {
- wtoken = mRoot.getAppWindowToken(token);
- if (wtoken == null) {
- Slog.w(TAG_WM, "Attempted to set visibility of non-existing app token: " + token);
- return;
- }
-
- if (DEBUG_APP_TRANSITIONS || DEBUG_ORIENTATION) Slog.v(TAG_WM, "setAppVisibility(" +
- token + ", visible=" + visible + "): " + mAppTransition +
- " hidden=" + wtoken.hidden + " hiddenRequested=" +
- wtoken.hiddenRequested + " Callers=" + Debug.getCallers(6));
-
- mOpeningApps.remove(wtoken);
- mClosingApps.remove(wtoken);
- wtoken.waitingToShow = false;
- wtoken.hiddenRequested = !visible;
-
- if (!visible) {
- // If the app is dead while it was visible, we kept its dead window on screen.
- // Now that the app is going invisible, we can remove it. It will be restarted
- // if made visible again.
- wtoken.removeDeadWindows();
- wtoken.setVisibleBeforeClientHidden();
- } else if (visible) {
- if (!mAppTransition.isTransitionSet() && mAppTransition.isReady()) {
- // Add the app mOpeningApps if transition is unset but ready. This means
- // we're doing a screen freeze, and the unfreeze will wait for all opening
- // apps to be ready.
- mOpeningApps.add(wtoken);
- }
- wtoken.startingMoved = false;
- // If the token is currently hidden (should be the common case), or has been
- // stopped, then we need to set up to wait for its windows to be ready.
- if (wtoken.hidden || wtoken.mAppStopped) {
- wtoken.clearAllDrawn();
-
- // If the app was already visible, don't reset the waitingToShow state.
- if (wtoken.hidden) {
- wtoken.waitingToShow = true;
- }
-
- if (wtoken.clientHidden) {
- // In the case where we are making an app visible
- // but holding off for a transition, we still need
- // to tell the client to make its windows visible so
- // they get drawn. Otherwise, we will wait on
- // performing the transition until all windows have
- // been drawn, they never will be, and we are sad.
- wtoken.clientHidden = false;
- wtoken.sendAppVisibilityToClients();
- }
- }
- wtoken.requestUpdateWallpaperIfNeeded();
-
- if (DEBUG_ADD_REMOVE) Slog.v(
- TAG_WM, "No longer Stopped: " + wtoken);
- wtoken.mAppStopped = false;
- }
-
- // If we are preparing an app transition, then delay changing
- // the visibility of this token until we execute that transition.
- if (okToDisplay() && mAppTransition.isTransitionSet()) {
- // A dummy animation is a placeholder animation which informs others that an
- // animation is going on (in this case an application transition). If the animation
- // was transferred from another application/animator, no dummy animator should be
- // created since an animation is already in progress.
- if (wtoken.mAppAnimator.usingTransferredAnimation
- && wtoken.mAppAnimator.animation == null) {
- Slog.wtf(TAG_WM, "Will NOT set dummy animation on: " + wtoken
- + ", using null transfered animation!");
- }
- if (!wtoken.mAppAnimator.usingTransferredAnimation &&
- (!wtoken.startingDisplayed || mSkipAppTransitionAnimation)) {
- if (DEBUG_APP_TRANSITIONS) Slog.v(
- TAG_WM, "Setting dummy animation on: " + wtoken);
- wtoken.mAppAnimator.setDummyAnimation();
- }
- wtoken.inPendingTransaction = true;
- if (visible) {
- mOpeningApps.add(wtoken);
- wtoken.mEnteringAnimation = true;
- } else {
- mClosingApps.add(wtoken);
- wtoken.mEnteringAnimation = false;
- }
- if (mAppTransition.getAppTransition() == AppTransition.TRANSIT_TASK_OPEN_BEHIND) {
- // We're launchingBehind, add the launching activity to mOpeningApps.
- final WindowState win = getDefaultDisplayContentLocked().findFocusedWindow();
- if (win != null) {
- final AppWindowToken focusedToken = win.mAppToken;
- if (focusedToken != null) {
- if (DEBUG_APP_TRANSITIONS) Slog.d(TAG_WM, "TRANSIT_TASK_OPEN_BEHIND, " +
- " adding " + focusedToken + " to mOpeningApps");
- // Force animation to be loaded.
- focusedToken.hidden = true;
- mOpeningApps.add(focusedToken);
- }
- }
- }
- return;
- }
-
- final long origId = Binder.clearCallingIdentity();
- wtoken.setVisibility(null, visible, TRANSIT_UNSET, true, wtoken.mVoiceInteraction);
- wtoken.updateReportedVisibilityLocked();
- Binder.restoreCallingIdentity(origId);
- }
- }
-
- /**
- * Notifies that we launched an app that might be visible or not visible depending on what kind
- * of Keyguard flags it's going to set on its windows.
- */
- public void notifyUnknownAppVisibilityLaunched(IBinder token) {
- synchronized(mWindowMap) {
- AppWindowToken appWindow = mRoot.getAppWindowToken(token);
- if (appWindow != null) {
- mUnknownAppVisibilityController.notifyLaunched(appWindow);
- }
- }
- }
-
- @Override
- public void startAppFreezingScreen(IBinder token, int configChanges) {
- if (!checkCallingPermission(MANAGE_APP_TOKENS, "setAppFreezingScreen()")) {
- throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
- }
-
- synchronized(mWindowMap) {
- if (configChanges == 0 && okToDisplay()) {
- if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Skipping set freeze of " + token);
- return;
- }
-
- final AppWindowToken wtoken = mRoot.getAppWindowToken(token);
- if (wtoken == null || wtoken.appToken == null) {
- Slog.w(TAG_WM, "Attempted to freeze screen with non-existing app token: " + wtoken);
- return;
- }
- final long origId = Binder.clearCallingIdentity();
- wtoken.startFreezingScreen();
- Binder.restoreCallingIdentity(origId);
- }
- }
-
- @Override
- public void stopAppFreezingScreen(IBinder token, boolean force) {
- if (!checkCallingPermission(MANAGE_APP_TOKENS, "setAppFreezingScreen()")) {
- throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
- }
-
- synchronized(mWindowMap) {
- final AppWindowToken wtoken = mRoot.getAppWindowToken(token);
- if (wtoken == null || wtoken.appToken == null) {
- return;
- }
- final long origId = Binder.clearCallingIdentity();
- if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Clear freezing of " + token + ": hidden="
- + wtoken.hidden + " freezing=" + wtoken.mAppAnimator.freezingScreen);
- wtoken.stopFreezingScreen(true, force);
- Binder.restoreCallingIdentity(origId);
- }
- }
-
- @Override
- public void removeAppToken(IBinder binder, int displayId) {
- if (!checkCallingPermission(MANAGE_APP_TOKENS, "removeAppToken()")) {
- throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
- }
-
- final long origId = Binder.clearCallingIdentity();
- try {
- synchronized(mWindowMap) {
- final DisplayContent dc = mRoot.getDisplayContent(displayId);
- if (dc == null) {
- Slog.w(TAG_WM, "removeAppToken: Attempted to remove binder token: " + binder
- + " from non-existing displayId=" + displayId);
- return;
- }
- dc.removeAppToken(binder);
- }
- } finally {
- Binder.restoreCallingIdentity(origId);
- }
- }
-
- void scheduleRemoveStartingWindowLocked(AppWindowToken wtoken) {
- if (wtoken == null) {
- return;
- }
- if (mH.hasMessages(H.REMOVE_STARTING, wtoken)) {
- // Already scheduled.
- return;
- }
-
- if (wtoken.startingWindow == null) {
- if (wtoken.startingData != null) {
- // Starting window has not been added yet, but it is scheduled to be added.
- // Go ahead and cancel the request.
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM,
- "Clearing startingData for token=" + wtoken);
- wtoken.startingData = null;
- }
- return;
- }
-
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, Debug.getCallers(1) +
- ": Schedule remove starting " + wtoken + (wtoken != null ?
- " startingWindow=" + wtoken.startingWindow : ""));
- Message m = mH.obtainMessage(H.REMOVE_STARTING, wtoken);
- mH.sendMessage(m);
- }
-
- public void moveTaskToTop(int taskId) {
- final long origId = Binder.clearCallingIdentity();
- try {
- synchronized(mWindowMap) {
- final Task task = mTaskIdToTask.get(taskId);
- if (task == null) {
- // Normal behavior, addAppToken will be called next and task will be created.
- return;
- }
- task.mStack.positionChildAt(POSITION_TOP, task, true /* includingParents */);
-
- if (mAppTransition.isTransitionSet()) {
- task.setSendingToBottom(false);
- }
- final DisplayContent displayContent = task.getDisplayContent();
- displayContent.layoutAndAssignWindowLayersIfNeeded();
- }
- } finally {
- Binder.restoreCallingIdentity(origId);
- }
- }
-
- public void moveTaskToBottom(int taskId) {
- final long origId = Binder.clearCallingIdentity();
- try {
- synchronized(mWindowMap) {
- final Task task = mTaskIdToTask.get(taskId);
- if (task == null) {
- Slog.e(TAG_WM, "moveTaskToBottom: taskId=" + taskId
- + " not found in mTaskIdToTask");
- return;
- }
- final TaskStack stack = task.mStack;
- stack.positionChildAt(POSITION_BOTTOM, task, false /* includingParents */);
- if (mAppTransition.isTransitionSet()) {
- task.setSendingToBottom(true);
- }
- stack.getDisplayContent().layoutAndAssignWindowLayersIfNeeded();
- }
- } finally {
- Binder.restoreCallingIdentity(origId);
- }
- }
-
boolean isStackVisibleLocked(int stackId) {
final TaskStack stack = mStackIdToStack.get(stackId);
return (stack != null && stack.isVisible());
@@ -3522,58 +2992,6 @@
}
}
- public void removeTask(int taskId) {
- synchronized (mWindowMap) {
- Task task = mTaskIdToTask.get(taskId);
- if (task == null) {
- if (DEBUG_STACK) Slog.i(TAG_WM, "removeTask: could not find taskId=" + taskId);
- return;
- }
- task.removeIfPossible();
- }
- }
-
- @Override
- public void cancelTaskWindowTransition(int taskId) {
- synchronized (mWindowMap) {
- Task task = mTaskIdToTask.get(taskId);
- if (task != null) {
- task.cancelTaskWindowTransition();
- }
- }
- }
-
- @Override
- public void cancelTaskThumbnailTransition(int taskId) {
- synchronized (mWindowMap) {
- Task task = mTaskIdToTask.get(taskId);
- if (task != null) {
- task.cancelTaskThumbnailTransition();
- }
- }
- }
-
- public void moveTaskToStack(int taskId, int stackId, boolean toTop) {
- synchronized (mWindowMap) {
- if (DEBUG_STACK) Slog.i(TAG_WM, "moveTaskToStack: moving taskId=" + taskId
- + " to stackId=" + stackId + " at " + (toTop ? "top" : "bottom"));
- Task task = mTaskIdToTask.get(taskId);
- if (task == null) {
- if (DEBUG_STACK) Slog.i(TAG_WM, "moveTaskToStack: could not find taskId=" + taskId);
- return;
- }
- TaskStack stack = mStackIdToStack.get(stackId);
- if (stack == null) {
- if (DEBUG_STACK) Slog.i(TAG_WM, "moveTaskToStack: could not find stackId=" + stackId);
- return;
- }
- task.moveTaskToStack(stack, toTop);
- final DisplayContent displayContent = stack.getDisplayContent();
- displayContent.setLayoutNeeded();
- mWindowPlacerLocked.performSurfacePlacement();
- }
- }
-
public void getStackDockedModeBounds(int stackId, Rect bounds, boolean ignoreVisibility) {
synchronized (mWindowMap) {
final TaskStack stack = mStackIdToStack.get(stackId);
@@ -3649,69 +3067,6 @@
}
}
- /** @see com.android.server.am.ActivityManagerService#positionTaskInStack(int, int, int). */
- public void positionTaskInStack(int taskId, int stackId, int position, Rect bounds,
- Configuration overrideConfig) {
- synchronized (mWindowMap) {
- if (DEBUG_STACK) Slog.i(TAG_WM, "positionTaskInStack: positioning taskId=" + taskId
- + " in stackId=" + stackId + " at " + position);
- Task task = mTaskIdToTask.get(taskId);
- if (task == null) {
- if (DEBUG_STACK) Slog.i(TAG_WM,
- "positionTaskInStack: could not find taskId=" + taskId);
- return;
- }
- TaskStack stack = mStackIdToStack.get(stackId);
- if (stack == null) {
- if (DEBUG_STACK) Slog.i(TAG_WM,
- "positionTaskInStack: could not find stackId=" + stackId);
- return;
- }
- task.positionTaskInStack(stack, position, bounds, overrideConfig);
- final DisplayContent displayContent = stack.getDisplayContent();
- displayContent.setLayoutNeeded();
- mWindowPlacerLocked.performSurfacePlacement();
- }
- }
-
- /**
- * Re-sizes the specified task and its containing windows.
- * Returns a {@link Configuration} object that contains configurations settings
- * that should be overridden due to the operation.
- */
- public void resizeTask(int taskId, Rect bounds, Configuration overrideConfig,
- boolean relayout, boolean forced) {
- synchronized (mWindowMap) {
- Task task = mTaskIdToTask.get(taskId);
- if (task == null) {
- throw new IllegalArgumentException("resizeTask: taskId " + taskId
- + " not found.");
- }
-
- if (task.resizeLocked(bounds, overrideConfig, forced) && relayout) {
- task.getDisplayContent().setLayoutNeeded();
- mWindowPlacerLocked.performSurfacePlacement();
- }
- }
- }
-
- /**
- * Puts a specific task into docked drag resizing mode. See {@link DragResizeMode}.
- *
- * @param taskId The id of the task to put into drag resize mode.
- * @param resizing Whether to put the task into drag resize mode.
- */
- public void setTaskDockedResizing(int taskId, boolean resizing) {
- synchronized (mWindowMap) {
- Task task = mTaskIdToTask.get(taskId);
- if (task == null) {
- Slog.w(TAG, "setTaskDockedResizing: taskId " + taskId + " not found.");
- return;
- }
- task.setDragResizing(resizing, DRAG_RESIZE_MODE_DOCKED_DIVIDER);
- }
- }
-
/**
* Starts deferring layout passes. Useful when doing multiple changes but to optimize
* performance, only one layout pass should be done. This can be called multiple times, and
@@ -3732,24 +3087,6 @@
}
}
- public void getTaskBounds(int taskId, Rect bounds) {
- synchronized (mWindowMap) {
- Task task = mTaskIdToTask.get(taskId);
- if (task != null) {
- task.getBounds(bounds);
- return;
- }
- bounds.setEmpty();
- }
- }
-
- /** Return true if the input task id represents a valid window manager task. */
- public boolean isValidTaskId(int taskId) {
- synchronized (mWindowMap) {
- return mTaskIdToTask.get(taskId) != null;
- }
- }
-
/**
* @return true if the activity contains windows that have
* {@link LayoutParams#FLAG_SHOW_WHEN_LOCKED} set
@@ -3850,9 +3187,9 @@
return;
}
- // If this isn't coming from the current user, ignore it.
- if (Binder.getCallingUserHandle().getIdentifier() != mCurrentUserId) {
- Log.d(TAG_WM, "non-current user, ignore disableKeyguard");
+ // If this isn't coming from the current profiles, ignore it.
+ if (!isCurrentProfileLocked(UserHandle.getCallingUserId())) {
+ Log.d(TAG_WM, "non-current profiles, ignore disableKeyguard");
return;
}
@@ -4523,9 +3860,10 @@
}
try {
Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "screenshotWallpaper");
- return screenshotApplicationsInner(null /* appToken */, DEFAULT_DISPLAY, -1 /* width */,
+ return screenshotApplications(null /* appToken */, DEFAULT_DISPLAY, -1 /* width */,
-1 /* height */, true /* includeFullDisplay */, 1f /* frameScale */,
- Bitmap.Config.ARGB_8888, true /* wallpaperOnly */);
+ Bitmap.Config.ARGB_8888, true /* wallpaperOnly */, false /* includeDecor */,
+ true /* toAshmem */);
} finally {
Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
}
@@ -4544,9 +3882,10 @@
}
FgThread.getHandler().post(() -> {
- Bitmap bm = screenshotApplicationsInner(null /* appToken */, DEFAULT_DISPLAY,
+ Bitmap bm = screenshotApplications(null /* appToken */, DEFAULT_DISPLAY,
-1 /* width */, -1 /* height */, true /* includeFullDisplay */,
- 1f /* frameScale */, Bitmap.Config.ARGB_8888, false /* wallpaperOnly */);
+ 1f /* frameScale */, Bitmap.Config.ARGB_8888, false /* wallpaperOnly */,
+ false /* includeDecor */, true /* toAshmem */);
try {
receiver.send(bm);
} catch (RemoteException e) {
@@ -4563,39 +3902,18 @@
* @param displayId the Display to take a screenshot of.
* @param width the width of the target bitmap
* @param height the height of the target bitmap
- * @param frameScale the scale to apply to the frame, only used when width = -1 and height = -1
- */
- @Override
- public Bitmap screenshotApplications(IBinder appToken, int displayId, int width, int height,
- float frameScale) {
- if (!checkCallingPermission(Manifest.permission.READ_FRAME_BUFFER,
- "screenshotApplications()")) {
- throw new SecurityException("Requires READ_FRAME_BUFFER permission");
- }
- try {
- Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "screenshotApplications");
- return screenshotApplicationsInner(appToken, displayId, width, height, false,
- frameScale, Bitmap.Config.RGB_565, false);
- } finally {
- Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
- }
- }
-
- /**
- * Takes a snapshot of the screen. In landscape mode this grabs the whole screen.
- * In portrait mode, it grabs the full screenshot.
- *
- * @param displayId the Display to take a screenshot of.
- * @param width the width of the target bitmap
- * @param height the height of the target bitmap
* @param includeFullDisplay true if the screen should not be cropped before capture
* @param frameScale the scale to apply to the frame, only used when width = -1 and height = -1
* @param config of the output bitmap
* @param wallpaperOnly true if only the wallpaper layer should be included in the screenshot
+ * @param includeDecor whether to include window decors, like the status or navigation bar
+ * background of the window
+ * @param toAshmem whether to convert the resulting bitmap to ashmem; this should be set to
+ * true if the Bitmap is sent over binder, and false otherwise
*/
- private Bitmap screenshotApplicationsInner(IBinder appToken, int displayId, int width,
+ private Bitmap screenshotApplications(IBinder appToken, int displayId, int width,
int height, boolean includeFullDisplay, float frameScale, Bitmap.Config config,
- boolean wallpaperOnly) {
+ boolean wallpaperOnly, boolean includeDecor, boolean toAshmem) {
final DisplayContent displayContent;
synchronized(mWindowMap) {
displayContent = mRoot.getDisplayContentOrCreate(displayId);
@@ -4606,7 +3924,7 @@
}
}
return displayContent.screenshotApplications(appToken, width, height,
- includeFullDisplay, frameScale, config, wallpaperOnly);
+ includeFullDisplay, frameScale, config, wallpaperOnly, includeDecor, toAshmem);
}
/**
@@ -5907,34 +5225,6 @@
private boolean mEventDispatchingEnabled;
@Override
- public void pauseKeyDispatching(IBinder binder) {
- if (!checkCallingPermission(MANAGE_APP_TOKENS, "pauseKeyDispatching()")) {
- throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
- }
-
- synchronized (mWindowMap) {
- WindowToken token = mRoot.getAppWindowToken(binder);
- if (token != null) {
- mInputMonitor.pauseDispatchingLw(token);
- }
- }
- }
-
- @Override
- public void resumeKeyDispatching(IBinder binder) {
- if (!checkCallingPermission(MANAGE_APP_TOKENS, "resumeKeyDispatching()")) {
- throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
- }
-
- synchronized (mWindowMap) {
- WindowToken token = mRoot.getAppWindowToken(binder);
- if (token != null) {
- mInputMonitor.resumeDispatchingLw(token);
- }
- }
- }
-
- @Override
public void setEventDispatching(boolean enabled) {
if (!checkCallingPermission(MANAGE_APP_TOKENS, "setEventDispatching()")) {
throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
@@ -6062,11 +5352,6 @@
public static final int REPORT_FOCUS_CHANGE = 2;
public static final int REPORT_LOSING_FOCUS = 3;
public static final int DO_TRAVERSAL = 4;
- public static final int ADD_STARTING = 5;
- public static final int REMOVE_STARTING = 6;
- public static final int FINISHED_STARTING = 7;
- public static final int REPORT_APPLICATION_TOKEN_WINDOWS = 8;
- public static final int REPORT_APPLICATION_TOKEN_DRAWN = 9;
public static final int WINDOW_FREEZE_TIMEOUT = 11;
public static final int APP_TRANSITION_TIMEOUT = 13;
@@ -6208,157 +5493,6 @@
}
} break;
- case ADD_STARTING: {
- final AppWindowToken wtoken = (AppWindowToken)msg.obj;
- final StartingData sd = wtoken.startingData;
-
- if (sd == null) {
- // Animation has been canceled... do nothing.
- return;
- }
-
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Add starting "
- + wtoken + ": pkg=" + sd.pkg);
-
- View view = null;
- try {
- view = mPolicy.addStartingWindow(wtoken.token, sd.pkg, sd.theme,
- sd.compatInfo, sd.nonLocalizedLabel, sd.labelRes, sd.icon, sd.logo,
- sd.windowFlags, wtoken.getMergedOverrideConfiguration());
- } catch (Exception e) {
- Slog.w(TAG_WM, "Exception when adding starting window", e);
- }
-
- if (view != null) {
- boolean abort = false;
-
- synchronized(mWindowMap) {
- if (wtoken.removed || wtoken.startingData == null) {
- // If the window was successfully added, then
- // we need to remove it.
- if (wtoken.startingWindow != null) {
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM,
- "Aborted starting " + wtoken
- + ": removed=" + wtoken.removed
- + " startingData=" + wtoken.startingData);
- wtoken.startingWindow = null;
- wtoken.startingData = null;
- abort = true;
- }
- } else {
- wtoken.startingView = view;
- }
- if (DEBUG_STARTING_WINDOW && !abort) Slog.v(TAG_WM,
- "Added starting " + wtoken
- + ": startingWindow="
- + wtoken.startingWindow + " startingView="
- + wtoken.startingView);
- }
-
- if (abort) {
- try {
- mPolicy.removeStartingWindow(wtoken.token, view);
- } catch (Exception e) {
- Slog.w(TAG_WM, "Exception when removing starting window", e);
- }
- }
- }
- } break;
-
- case REMOVE_STARTING: {
- final AppWindowToken wtoken = (AppWindowToken)msg.obj;
- IBinder token = null;
- View view = null;
- synchronized (mWindowMap) {
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Remove starting "
- + wtoken + ": startingWindow="
- + wtoken.startingWindow + " startingView="
- + wtoken.startingView);
- if (wtoken.startingWindow != null) {
- view = wtoken.startingView;
- token = wtoken.token;
- wtoken.startingData = null;
- wtoken.startingView = null;
- wtoken.startingWindow = null;
- wtoken.startingDisplayed = false;
- }
- }
- if (view != null) {
- try {
- mPolicy.removeStartingWindow(token, view);
- } catch (Exception e) {
- Slog.w(TAG_WM, "Exception when removing starting window", e);
- }
- }
- } break;
-
- case FINISHED_STARTING: {
- IBinder token = null;
- View view = null;
- while (true) {
- synchronized (mWindowMap) {
- final int N = mFinishedStarting.size();
- if (N <= 0) {
- break;
- }
- AppWindowToken wtoken = mFinishedStarting.remove(N-1);
-
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM,
- "Finished starting " + wtoken
- + ": startingWindow=" + wtoken.startingWindow
- + " startingView=" + wtoken.startingView);
-
- if (wtoken.startingWindow == null) {
- continue;
- }
-
- view = wtoken.startingView;
- token = wtoken.token;
- wtoken.startingData = null;
- wtoken.startingView = null;
- wtoken.startingWindow = null;
- wtoken.startingDisplayed = false;
- }
-
- try {
- mPolicy.removeStartingWindow(token, view);
- } catch (Exception e) {
- Slog.w(TAG_WM, "Exception when removing starting window", e);
- }
- }
- } break;
-
- case REPORT_APPLICATION_TOKEN_DRAWN: {
- final AppWindowToken wtoken = (AppWindowToken)msg.obj;
-
- try {
- if (DEBUG_VISIBILITY) Slog.v(
- TAG_WM, "Reporting drawn in " + wtoken);
- wtoken.appToken.windowsDrawn();
- } catch (RemoteException ex) {
- }
- } break;
-
- case REPORT_APPLICATION_TOKEN_WINDOWS: {
- final AppWindowToken wtoken = (AppWindowToken)msg.obj;
-
- boolean nowVisible = msg.arg1 != 0;
- boolean nowGone = msg.arg2 != 0;
-
- try {
- if (DEBUG_VISIBILITY) Slog.v(
- TAG_WM, "Reporting visible in " + wtoken
- + " visible=" + nowVisible
- + " gone=" + nowGone);
- if (nowVisible) {
- wtoken.appToken.windowsVisible();
- } else {
- wtoken.appToken.windowsGone();
- }
- } catch (RemoteException ex) {
- }
- } break;
-
case WINDOW_FREEZE_TIMEOUT: {
// TODO(multidisplay): Can non-default displays rotate?
synchronized (mWindowMap) {
@@ -7155,6 +6289,16 @@
displayInfo.overscanRight, displayInfo.overscanBottom);
}
+ /**
+ * Get an array with display ids ordered by focus priority - last items should be given
+ * focus first. Sparse array just maps position to displayId.
+ */
+ public void getDisplaysInFocusOrder(SparseIntArray displaysInFocusOrder) {
+ synchronized(mWindowMap) {
+ mRoot.getDisplaysInFocusOrder(displaysInFocusOrder);
+ }
+ }
+
@Override
public void setOverscan(int displayId, int left, int top, int right, int bottom) {
if (mContext.checkCallingOrSelfPermission(
@@ -7855,21 +6999,6 @@
private void dumpTokensLocked(PrintWriter pw, boolean dumpAll) {
pw.println("WINDOW MANAGER TOKENS (dumpsys window tokens)");
mRoot.dumpTokens(pw, dumpAll);
- if (!mFinishedStarting.isEmpty()) {
- pw.println();
- pw.println(" Finishing start of application tokens:");
- for (int i=mFinishedStarting.size()-1; i>=0; i--) {
- WindowToken token = mFinishedStarting.get(i);
- pw.print(" Finished Starting #"); pw.print(i);
- pw.print(' '); pw.print(token);
- if (dumpAll) {
- pw.println(':');
- token.dump(pw, " ");
- } else {
- pw.println();
- }
- }
- }
if (!mOpeningApps.isEmpty() || !mClosingApps.isEmpty()) {
pw.println();
if (mOpeningApps.size() > 0) {
@@ -8499,15 +7628,6 @@
}
}
- public void setTaskResizeable(int taskId, int resizeMode) {
- synchronized (mWindowMap) {
- final Task task = mTaskIdToTask.get(taskId);
- if (task != null) {
- task.setResizeable(resizeMode);
- }
- }
- }
-
public void setForceResizableTasks(boolean forceResizableTasks) {
synchronized (mWindowMap) {
mForceResizableTasks = forceResizableTasks;
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 3daad43..608f056 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -16,7 +16,84 @@
package com.android.server.wm;
-import android.app.ActivityManager;
+import static android.app.ActivityManager.ENABLE_TASK_SNAPSHOTS;
+import static android.app.ActivityManager.StackId;
+import static android.app.ActivityManager.StackId.DOCKED_STACK_ID;
+import static android.app.ActivityManager.StackId.INVALID_STACK_ID;
+import static android.app.ActivityManager.isLowRamDeviceStatic;
+import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
+import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_CONTENT;
+import static android.view.ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME;
+import static android.view.ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION;
+import static android.view.ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_VISIBLE;
+import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
+import static android.view.WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW;
+import static android.view.WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON;
+import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
+import static android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND;
+import static android.view.WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD;
+import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
+import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
+import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
+import static android.view.WindowManager.LayoutParams.FLAG_SCALED;
+import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
+import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
+import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
+import static android.view.WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON;
+import static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW;
+import static android.view.WindowManager.LayoutParams.MATCH_PARENT;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_LAYOUT_CHILD_WINDOW_IN_PARENT_FRAME;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_WILL_NOT_REPLACE_ON_RELAUNCH;
+import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
+import static android.view.WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST;
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
+import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
+import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
+import static android.view.WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION;
+import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
+import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG;
+import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
+import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
+import static android.view.WindowManagerPolicy.TRANSIT_ENTER;
+import static android.view.WindowManagerPolicy.TRANSIT_EXIT;
+import static android.view.WindowManagerPolicy.TRANSIT_PREVIEW_DONE;
+import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_DOCKED_DIVIDER;
+import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_FREEFORM;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ANIM;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_CONFIGURATION;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS_LIGHT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_INPUT_METHOD;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYERS;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ORIENTATION;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_POWER;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_RESIZE;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STARTING_WINDOW;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_SURFACE_TRACE;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_VISIBILITY;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WALLPAPER;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WALLPAPER_LIGHT;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+import static com.android.server.wm.WindowManagerService.H.SEND_NEW_CONFIGURATION;
+import static com.android.server.wm.WindowManagerService.TYPE_LAYER_MULTIPLIER;
+import static com.android.server.wm.WindowManagerService.TYPE_LAYER_OFFSET;
+import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_NORMAL;
+import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_WILL_PLACE_SURFACES;
+import static com.android.server.wm.WindowManagerService.WINDOWS_FREEZING_SCREENS_TIMEOUT;
+import static com.android.server.wm.WindowManagerService.localLOGV;
+import static com.android.server.wm.WindowStateAnimator.COMMIT_DRAW_PENDING;
+import static com.android.server.wm.WindowStateAnimator.DRAW_PENDING;
+import static com.android.server.wm.WindowStateAnimator.HAS_DRAWN;
+import static com.android.server.wm.WindowStateAnimator.READY_TO_SHOW;
+
import android.app.AppOpsManager;
import android.content.Context;
import android.content.res.Configuration;
@@ -62,82 +139,6 @@
import java.util.LinkedList;
import java.util.function.Predicate;
-import static android.app.ActivityManager.StackId;
-import static android.app.ActivityManager.StackId.DOCKED_STACK_ID;
-import static android.app.ActivityManager.StackId.INVALID_STACK_ID;
-import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
-import static android.view.Display.DEFAULT_DISPLAY;
-import static android.view.ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_CONTENT;
-import static android.view.ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME;
-import static android.view.ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION;
-import static android.view.ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_VISIBLE;
-import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
-import static android.view.WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW;
-import static android.view.WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON;
-import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
-import static android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND;
-import static android.view.WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD;
-import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
-import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
-import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
-import static android.view.WindowManager.LayoutParams.FLAG_SCALED;
-import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
-import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
-import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
-import static android.view.WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON;
-import static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW;
-import static android.view.WindowManager.LayoutParams.MATCH_PARENT;
-import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
-import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_LAYOUT_CHILD_WINDOW_IN_PARENT_FRAME;
-import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION;
-import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_WILL_NOT_REPLACE_ON_RELAUNCH;
-import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
-import static android.view.WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST;
-import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
-import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
-import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
-import static android.view.WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION;
-import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
-import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
-import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG;
-import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
-import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
-import static android.view.WindowManagerPolicy.TRANSIT_ENTER;
-import static android.view.WindowManagerPolicy.TRANSIT_EXIT;
-import static android.view.WindowManagerPolicy.TRANSIT_PREVIEW_DONE;
-import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_DOCKED_DIVIDER;
-import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_FREEFORM;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ANIM;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_CONFIGURATION;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS_LIGHT;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_INPUT_METHOD;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYERS;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ORIENTATION;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_POWER;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_RESIZE;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STARTING_WINDOW;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_SURFACE_TRACE;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_VISIBILITY;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WALLPAPER;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WALLPAPER_LIGHT;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
-import static com.android.server.wm.WindowManagerService.H.SEND_NEW_CONFIGURATION;
-import static com.android.server.wm.WindowManagerService.TYPE_LAYER_MULTIPLIER;
-import static com.android.server.wm.WindowManagerService.TYPE_LAYER_OFFSET;
-import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_NORMAL;
-import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_WILL_PLACE_SURFACES;
-import static com.android.server.wm.WindowManagerService.WINDOWS_FREEZING_SCREENS_TIMEOUT;
-import static com.android.server.wm.WindowManagerService.localLOGV;
-import static com.android.server.wm.WindowStateAnimator.COMMIT_DRAW_PENDING;
-import static com.android.server.wm.WindowStateAnimator.DRAW_PENDING;
-import static com.android.server.wm.WindowStateAnimator.HAS_DRAWN;
-import static com.android.server.wm.WindowStateAnimator.READY_TO_SHOW;
-
/** A window in the window manager. */
class WindowState extends WindowContainer<WindowState> implements WindowManagerPolicy.WindowState {
static final String TAG = TAG_WITH_CLASS_NAME ? "WindowState" : TAG_WM;
@@ -152,7 +153,8 @@
// to capture touch events in that area.
static final int RESIZE_HANDLE_WIDTH_IN_DP = 30;
- private static final boolean DEBUG_DISABLE_SAVING_SURFACES = false;
+ private static final boolean DEBUG_DISABLE_SAVING_SURFACES = false ||
+ ENABLE_TASK_SNAPSHOTS;
final WindowManagerService mService;
final WindowManagerPolicy mPolicy;
@@ -2652,7 +2654,7 @@
return false;
}
- if (ActivityManager.isLowRamDeviceStatic()) {
+ if (isLowRamDeviceStatic()) {
// Don't save surfaces on Svelte devices.
return false;
}
@@ -3713,6 +3715,12 @@
logPerformShow("performShow on ");
+ final int drawState = mWinAnimator.mDrawState;
+ if ((drawState == HAS_DRAWN || drawState == READY_TO_SHOW)
+ && mAttrs.type != TYPE_APPLICATION_STARTING && mAppToken != null) {
+ mAppToken.onFirstWindowDrawn(this, mWinAnimator);
+ }
+
if (mWinAnimator.mDrawState != READY_TO_SHOW || !isReadyForDisplay()) {
return false;
}
@@ -3747,10 +3755,6 @@
}
}
- if (mAttrs.type != TYPE_APPLICATION_STARTING && mAppToken != null) {
- mAppToken.onFirstWindowDrawn(this, mWinAnimator);
- }
-
if (mAttrs.type == TYPE_INPUT_METHOD) {
getDisplayContent().mDividerControllerLocked.resetImeHideRequested();
}
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index e5ed18d..19ef44c 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -461,16 +461,7 @@
mStackClip = STACK_CLIP_BEFORE_ANIM;
mWin.checkPolicyVisibilityChange();
mTransformation.clear();
- if (mDrawState == HAS_DRAWN
- && mWin.mAttrs.type == WindowManager.LayoutParams.TYPE_APPLICATION_STARTING
- && mWin.mAppToken != null
- && mWin.mAppToken.firstWindowDrawn
- && mWin.mAppToken.startingData != null) {
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Finish starting "
- + mWin.mToken + ": first real window done animating");
- mService.mFinishedStarting.add(mWin.mAppToken);
- mService.mH.sendEmptyMessage(H.FINISHED_STARTING);
- } else if (mAttrType == LayoutParams.TYPE_STATUS_BAR && mWin.mPolicyVisibility) {
+ if (mAttrType == LayoutParams.TYPE_STATUS_BAR && mWin.mPolicyVisibility) {
// Upon completion of a not-visible to visible status bar animation a relayout is
// required.
if (displayContent != null) {
diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
index 1aabd5e..897d5b86 100644
--- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
+++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
@@ -117,7 +117,11 @@
}
final void performSurfacePlacement() {
- if (mDeferDepth > 0) {
+ performSurfacePlacement(false /* force */);
+ }
+
+ final void performSurfacePlacement(boolean force) {
+ if (mDeferDepth > 0 && !force) {
return;
}
int loopCount = 6;
@@ -343,6 +347,8 @@
mService.mAppTransition.postAnimationCallback();
mService.mAppTransition.clear();
+ mService.mTaskSnapshotController.onTransitionStarting();
+
mService.mOpeningApps.clear();
mService.mClosingApps.clear();
mService.mUnknownAppVisibilityController.clear();
@@ -441,8 +447,9 @@
wtoken.deferClearAllDrawn = false;
// Ensure that apps that are mid-starting are also scheduled to have their
// starting windows removed after the animation is complete
- if (wtoken.startingWindow != null && !wtoken.startingWindow.mAnimatingExit) {
- mService.scheduleRemoveStartingWindowLocked(wtoken);
+ if (wtoken.startingWindow != null && !wtoken.startingWindow.mAnimatingExit
+ && wtoken.getController() != null) {
+ wtoken.getController().removeStartingWindow();
}
mService.mAnimator.mAppWindowAnimating |= appAnimator.isAnimating();
@@ -512,17 +519,14 @@
+ wtoken.startingMoved + " isRelaunching()="
+ wtoken.isRelaunching());
- if (wtoken.isRelaunching()) {
- return false;
- }
-
final boolean drawnBeforeRestoring = wtoken.allDrawn;
wtoken.restoreSavedSurfaceForInterestingWindows();
- if (!wtoken.allDrawn && !wtoken.startingDisplayed && !wtoken.startingMoved) {
+ final boolean allDrawn = wtoken.allDrawn && !wtoken.isRelaunching();
+ if (!allDrawn && !wtoken.startingDisplayed && !wtoken.startingMoved) {
return false;
}
- if (wtoken.allDrawn) {
+ if (allDrawn) {
reason = drawnBeforeRestoring ? APP_TRANSITION_WINDOWS_DRAWN
: APP_TRANSITION_SAVED_SURFACE;
} else {
diff --git a/services/core/jni/com_android_server_am_BatteryStatsService.cpp b/services/core/jni/com_android_server_am_BatteryStatsService.cpp
index b22d5e7..ec36df1 100644
--- a/services/core/jni/com_android_server_am_BatteryStatsService.cpp
+++ b/services/core/jni/com_android_server_am_BatteryStatsService.cpp
@@ -17,6 +17,17 @@
#define LOG_TAG "BatteryStatsService"
//#define LOG_NDEBUG 0
+#include <errno.h>
+#include <fcntl.h>
+#include <inttypes.h>
+#include <semaphore.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
#include <android/hardware/power/1.0/IPower.h>
#include <android_runtime/AndroidRuntime.h>
#include <jni.h>
@@ -24,22 +35,11 @@
#include <ScopedLocalRef.h>
#include <ScopedPrimitiveArray.h>
-#include <cutils/log.h>
+#include <log/log.h>
#include <utils/misc.h>
#include <utils/Log.h>
#include <suspend/autosuspend.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <semaphore.h>
-#include <stddef.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-
using android::hardware::Return;
using android::hardware::Void;
using android::hardware::power::V1_0::IPower;
diff --git a/services/core/jni/com_android_server_connectivity_Vpn.cpp b/services/core/jni/com_android_server_connectivity_Vpn.cpp
index c54d732..4d85d9a 100644
--- a/services/core/jni/com_android_server_connectivity_Vpn.cpp
+++ b/services/core/jni/com_android_server_connectivity_Vpn.cpp
@@ -17,24 +17,25 @@
#define LOG_NDEBUG 0
#define LOG_TAG "VpnJni"
-#include <cutils/log.h>
-#include "netutils/ifc.h"
-#include <stdio.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <fcntl.h>
-
#include <linux/if.h>
#include <linux/if_tun.h>
#include <linux/route.h>
#include <linux/ipv6_route.h>
+#include <netinet/in.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <log/log.h>
+
+#include "netutils/ifc.h"
#include "jni.h"
#include "JNIHelp.h"
diff --git a/services/core/jni/com_android_server_lights_LightsService.cpp b/services/core/jni/com_android_server_lights_LightsService.cpp
index cf7f1cb..2fd0603 100644
--- a/services/core/jni/com_android_server_lights_LightsService.cpp
+++ b/services/core/jni/com_android_server_lights_LightsService.cpp
@@ -103,16 +103,15 @@
state.flashMode = Flash::NONE;
} else {
// Only set non-brightness settings when not in low-persistence mode
- state.color = colorARGB;
state.flashMode = flash;
state.flashOnMs = onMS;
state.flashOffMs = offMS;
}
+ state.color = colorARGB;
state.brightnessMode = brightness;
Status status;
-
{
ALOGD_IF_SLOW(50, "Excessive delay setting light");
Return<Status> ret = gLight->setLight(type, state);
diff --git a/services/core/jni/com_android_server_location_ContextHubService.cpp b/services/core/jni/com_android_server_location_ContextHubService.cpp
index e25bda8..47c9559 100644
--- a/services/core/jni/com_android_server_location_ContextHubService.cpp
+++ b/services/core/jni/com_android_server_location_ContextHubService.cpp
@@ -42,7 +42,6 @@
using IContexthub = android::hardware::contexthub::V1_0::IContexthub;
using Result = android::hardware::contexthub::V1_0::Result;
-using NanoAppBinary = android::hardware::contexthub::V1_0::NanoAppBinary;
using ContextHubMsg = android::hardware::contexthub::V1_0::ContextHubMsg;
using IContexthubCallback = android::hardware::contexthub::V1_0::IContexthubCallback;
using AsyncEventType = android::hardware::contexthub::V1_0::AsyncEventType;
diff --git a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
index 09886db..fa6405a 100644
--- a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
+++ b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
@@ -59,6 +59,12 @@
static jmethodID method_reportMeasurementData;
static jmethodID method_reportNavigationMessages;
+/*
+ * Save a pointer to JavaVm to attach/detach threads executing
+ * callback methods that need to make JNI calls.
+ */
+static JavaVM* sJvm;
+
using android::OK;
using android::sp;
using android::status_t;
@@ -216,6 +222,62 @@
}
}
+class ScopedJniThreadAttach {
+public:
+ ScopedJniThreadAttach() {
+ /*
+ * attachResult will also be JNI_OK if the thead was already attached to
+ * JNI before the call to AttachCurrentThread().
+ */
+ jint attachResult = sJvm->AttachCurrentThread(&mEnv, nullptr);
+ LOG_ALWAYS_FATAL_IF(attachResult != JNI_OK, "Unable to attach thread. Error %d",
+ attachResult);
+ }
+
+ ~ScopedJniThreadAttach() {
+ jint detachResult = sJvm->DetachCurrentThread();
+ /*
+ * Return if the thread was already detached. Log error for any other
+ * failure.
+ */
+ if (detachResult == JNI_EDETACHED) {
+ return;
+ }
+
+ LOG_ALWAYS_FATAL_IF(detachResult != JNI_OK, "Unable to detach thread. Error %d",
+ detachResult);
+ }
+
+ JNIEnv* getEnv() {
+ /*
+ * Checking validity of mEnv in case the thread was detached elsewhere.
+ */
+ LOG_ALWAYS_FATAL_IF(AndroidRuntime::getJNIEnv() != mEnv);
+ return mEnv;
+ }
+
+private:
+ JNIEnv* mEnv = nullptr;
+};
+
+thread_local std::unique_ptr<ScopedJniThreadAttach> tJniThreadAttacher;
+
+static JNIEnv* getJniEnv() {
+ JNIEnv* env = AndroidRuntime::getJNIEnv();
+
+ /*
+ * If env is nullptr, the thread is not already attached to
+ * JNI. It is attached below and the destructor for ScopedJniThreadAttach
+ * will detach it on thread exit.
+ */
+ if (env == nullptr) {
+ tJniThreadAttacher.reset(new ScopedJniThreadAttach());
+ env = tJniThreadAttacher->getEnv();
+ }
+
+ return env;
+}
+
/*
* GnssCallback class implements the callback methods for IGnss interface.
*/
@@ -247,7 +309,7 @@
Return<void> GnssCallback::gnssLocationCb(
const ::android::hardware::gnss::V1_0::GnssLocation& location) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
env->CallVoidMethod(mCallbacksObj,
method_reportLocation,
location.gnssLocationFlags,
@@ -263,14 +325,14 @@
}
Return<void> GnssCallback::gnssStatusCb(const IGnssCallback::GnssStatusValue status) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
env->CallVoidMethod(mCallbacksObj, method_reportStatus, status);
checkAndClearExceptionFromCallback(env, __FUNCTION__);
return Void();
}
Return<void> GnssCallback::gnssSvStatusCb(const IGnssCallback::GnssSvStatus& svStatus) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
sGnssSvListSize = svStatus.numSvs;
if (sGnssSvListSize > static_cast<uint32_t>(
@@ -292,7 +354,7 @@
Return<void> GnssCallback::gnssNmeaCb(
int64_t timestamp, const ::android::hardware::hidl_string& nmea) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
/*
* The Java code will call back to read these values.
* We do this to avoid creating unnecessary String objects.
@@ -308,7 +370,7 @@
Return<void> GnssCallback::gnssSetCapabilitesCb(uint32_t capabilities) {
ALOGD("%s: %du\n", __func__, capabilities);
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
env->CallVoidMethod(mCallbacksObj, method_setEngineCapabilities, capabilities);
checkAndClearExceptionFromCallback(env, __FUNCTION__);
return Void();
@@ -325,7 +387,7 @@
}
Return<void> GnssCallback::gnssRequestTimeCb() {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
env->CallVoidMethod(mCallbacksObj, method_requestUtcTime);
checkAndClearExceptionFromCallback(env, __FUNCTION__);
return Void();
@@ -334,7 +396,7 @@
Return<void> GnssCallback::gnssSetSystemInfoCb(const IGnssCallback::GnssSystemInfo& info) {
ALOGD("%s: yearOfHw=%d\n", __func__, info.yearOfHw);
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
env->CallVoidMethod(mCallbacksObj, method_setGnssYearOfHardware,
info.yearOfHw);
checkAndClearExceptionFromCallback(env, __FUNCTION__);
@@ -350,7 +412,7 @@
* interface.
*/
Return<void> GnssXtraCallback::downloadRequestCb() {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
env->CallVoidMethod(mCallbacksObj, method_xtraDownloadRequest);
checkAndClearExceptionFromCallback(env, __FUNCTION__);
return Void();
@@ -385,7 +447,7 @@
const android::hardware::gnss::V1_0::GnssLocation& location,
GeofenceTransition transition,
hardware::gnss::V1_0::GnssUtcTime timestamp) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
env->CallVoidMethod(mCallbacksObj,
method_reportGeofenceTransition,
@@ -408,7 +470,7 @@
Return<void> GnssGeofenceCallback::gnssGeofenceStatusCb(
GeofenceAvailability status,
const android::hardware::gnss::V1_0::GnssLocation& location) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
env->CallVoidMethod(mCallbacksObj,
method_reportGeofenceStatus,
status,
@@ -426,7 +488,7 @@
Return<void> GnssGeofenceCallback::gnssGeofenceAddCb(int32_t geofenceId,
GeofenceStatus status) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
if (status != IGnssGeofenceCallback::GeofenceStatus::OPERATION_SUCCESS) {
ALOGE("%s: Error in adding a Geofence: %d\n", __func__, status);
}
@@ -441,7 +503,7 @@
Return<void> GnssGeofenceCallback::gnssGeofenceRemoveCb(int32_t geofenceId,
GeofenceStatus status) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
if (status != IGnssGeofenceCallback::GeofenceStatus::OPERATION_SUCCESS) {
ALOGE("%s: Error in removing a Geofence: %d\n", __func__, status);
}
@@ -455,7 +517,7 @@
Return<void> GnssGeofenceCallback::gnssGeofencePauseCb(int32_t geofenceId,
GeofenceStatus status) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
if (status != IGnssGeofenceCallback::GeofenceStatus::OPERATION_SUCCESS) {
ALOGE("%s: Error in pausing Geofence: %d\n", __func__, status);
}
@@ -469,7 +531,7 @@
Return<void> GnssGeofenceCallback::gnssGeofenceResumeCb(int32_t geofenceId,
GeofenceStatus status) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
if (status != IGnssGeofenceCallback::GeofenceStatus::OPERATION_SUCCESS) {
ALOGE("%s: Error in resuming Geofence: %d\n", __func__, status);
}
@@ -496,7 +558,7 @@
Return<void> GnssNavigationMessageCallback::gnssNavigationMessageCb(
const IGnssNavigationMessageCallback::GnssNavigationMessage& message) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
size_t dataLength = message.data.size();
@@ -545,7 +607,7 @@
Return<void> GnssMeasurementCallback::GnssMeasurementCb(
const IGnssMeasurementCallback::GnssData& data) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
jobject clock;
jobjectArray measurementArray;
@@ -700,7 +762,7 @@
Return<void> GnssNiCallback::niNotifyCb(
const IGnssNiCallback::GnssNiNotification& notification) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
jstring requestorId = env->NewStringUTF(notification.requestorId.c_str());
jstring text = env->NewStringUTF(notification.notificationMessage.c_str());
@@ -742,7 +804,7 @@
Return<void> AGnssCallback::agnssStatusIpV6Cb(
const IAGnssCallback::AGnssStatusIpV6& agps_status) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
jbyteArray byteArray = NULL;
bool isSupported = false;
@@ -778,7 +840,7 @@
Return<void> AGnssCallback::agnssStatusIpV4Cb(
const IAGnssCallback::AGnssStatusIpV4& agps_status) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
jbyteArray byteArray = NULL;
uint32_t ipAddr = agps_status.ipV4Addr;
@@ -813,7 +875,7 @@
return NULL;
}
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
jbyteArray byteArray = env->NewByteArray(4);
if (byteArray == NULL) {
ALOGE("Unable to allocate byte array for IPv4 address");
@@ -832,19 +894,19 @@
* interface.
*/
struct AGnssRilCallback : IAGnssRilCallback {
- Return<void> requestSetIdCb(IAGnssRilCallback::ID setIdFlag) override;
+ Return<void> requestSetIdCb(uint32_t setIdFlag) override;
Return<void> requestRefLocCb() override;
};
-Return<void> AGnssRilCallback::requestSetIdCb(IAGnssRilCallback::ID setIdFlag) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+Return<void> AGnssRilCallback::requestSetIdCb(uint32_t setIdFlag) {
+ JNIEnv* env = getJniEnv();
env->CallVoidMethod(mCallbacksObj, method_requestSetID, setIdFlag);
checkAndClearExceptionFromCallback(env, __FUNCTION__);
return Void();
}
Return<void> AGnssRilCallback::requestRefLocCb() {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ JNIEnv* env = getJniEnv();
env->CallVoidMethod(mCallbacksObj, method_requestRefLocation);
checkAndClearExceptionFromCallback(env, __FUNCTION__);
return Void();
@@ -885,6 +947,14 @@
"reportNavigationMessage",
"(Landroid/location/GnssNavigationMessage;)V");
+ /*
+ * Save a pointer to JVM.
+ */
+ jint jvmStatus = env->GetJavaVM(&sJvm);
+ if (jvmStatus != JNI_OK) {
+ LOG_ALWAYS_FATAL("Unable to get Java VM. Error: %d", jvmStatus);
+ }
+
// TODO(b/31632518)
gnssHal = IGnss::getService("gnss");
if (gnssHal != nullptr) {
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index e5c8d02..cfd2bed 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -75,6 +75,7 @@
import android.app.admin.SecurityLog.SecurityEvent;
import android.app.admin.SystemUpdatePolicy;
import android.app.backup.IBackupManager;
+import android.app.trust.TrustManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -1492,6 +1493,10 @@
return TelephonyManager.from(mContext);
}
+ TrustManager getTrustManager() {
+ return (TrustManager) mContext.getSystemService(Context.TRUST_SERVICE);
+ }
+
IWindowManager getIWindowManager() {
return IWindowManager.Stub
.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE));
@@ -4355,8 +4360,9 @@
Preconditions.checkArgument(timeoutMs >= 0, "Timeout must not be a negative number.");
// timeoutMs with value 0 means that the admin doesn't participate
// timeoutMs is clamped to the interval in case the internal constants change in the future
- if (timeoutMs != 0 && timeoutMs < MINIMUM_STRONG_AUTH_TIMEOUT_MS) {
- timeoutMs = MINIMUM_STRONG_AUTH_TIMEOUT_MS;
+ final long minimumStrongAuthTimeout = getMinimumStrongAuthTimeoutMs();
+ if (timeoutMs != 0 && timeoutMs < minimumStrongAuthTimeout) {
+ timeoutMs = minimumStrongAuthTimeout;
}
if (timeoutMs > DevicePolicyManager.DEFAULT_STRONG_AUTH_TIMEOUT_MS) {
timeoutMs = DevicePolicyManager.DEFAULT_STRONG_AUTH_TIMEOUT_MS;
@@ -4400,36 +4406,68 @@
strongAuthUnlockTimeout = Math.min(timeout, strongAuthUnlockTimeout);
}
}
- return Math.max(strongAuthUnlockTimeout, MINIMUM_STRONG_AUTH_TIMEOUT_MS);
+ return Math.max(strongAuthUnlockTimeout, getMinimumStrongAuthTimeoutMs());
}
}
+ private long getMinimumStrongAuthTimeoutMs() {
+ if (!mInjector.isBuildDebuggable()) {
+ return MINIMUM_STRONG_AUTH_TIMEOUT_MS;
+ }
+ // ideally the property was named persist.sys.min_strong_auth_timeout, but system property
+ // name cannot be longer than 31 characters
+ return Math.min(mInjector.systemPropertiesGetLong("persist.sys.min_str_auth_timeo",
+ MINIMUM_STRONG_AUTH_TIMEOUT_MS),
+ MINIMUM_STRONG_AUTH_TIMEOUT_MS);
+ }
+
@Override
- public void lockNow(boolean parent) {
+ public void lockNow(int flags, boolean parent) {
if (!mHasFeature) {
return;
}
+
+ final int callingUserId = mInjector.userHandleGetCallingUserId();
synchronized (this) {
// This API can only be called by an active device admin,
// so try to retrieve it to check that the caller is one.
- getActiveAdminForCallerLocked(
+ final ActiveAdmin admin = getActiveAdminForCallerLocked(
null, DeviceAdminInfo.USES_POLICY_FORCE_LOCK, parent);
- int userToLock = mInjector.userHandleGetCallingUserId();
-
- // Unless this is a managed profile with work challenge enabled, lock all users.
- if (parent || !isSeparateProfileChallengeEnabled(userToLock)) {
- userToLock = UserHandle.USER_ALL;
- }
final long ident = mInjector.binderClearCallingIdentity();
try {
+ // Evict key
+ if ((flags & DevicePolicyManager.FLAG_EVICT_CE_KEY) != 0) {
+ enforceManagedProfile(callingUserId, "set FLAG_EVICT_CE_KEY");
+ if (!isProfileOwner(admin.info.getComponent(), callingUserId)) {
+ throw new SecurityException(
+ "Only profile owner admins can set FLAG_EVICT_CE_KEY");
+ }
+ if (parent) {
+ throw new IllegalArgumentException(
+ "Cannot set FLAG_EVICT_CE_KEY for the parent");
+ }
+ if (!mInjector.storageManagerIsFileBasedEncryptionEnabled()) {
+ throw new UnsupportedOperationException(
+ "FLAG_EVICT_CE_KEY only applies to FBE devices");
+ }
+ mUserManager.evictCredentialEncryptionKey(callingUserId);
+ }
+
+ // Lock all users unless this is a managed profile with a separate challenge
+ final int userToLock = (parent || !isSeparateProfileChallengeEnabled(callingUserId)
+ ? UserHandle.USER_ALL : callingUserId);
mLockPatternUtils.requireStrongAuth(
STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW, userToLock);
+
+ // Require authentication for the device or profile
if (userToLock == UserHandle.USER_ALL) {
// Power off the display
mInjector.powerManagerGoToSleep(SystemClock.uptimeMillis(),
PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN, 0);
mInjector.getIWindowManager().lockNow(null);
+ } else {
+ mInjector.getTrustManager().setDeviceLockedForUser(userToLock, true);
}
} catch (RemoteException e) {
} finally {
@@ -4788,7 +4826,9 @@
}
}
- private void wipeDataLocked(boolean wipeExtRequested, String reason, boolean force) {
+ private void wipeDataNoLock(boolean wipeExtRequested, String reason, boolean force) {
+ wtfIfInLock();
+
if (wipeExtRequested) {
StorageManager sm = (StorageManager) mContext.getSystemService(
Context.STORAGE_SERVICE);
@@ -4808,13 +4848,14 @@
}
final int userHandle = mInjector.userHandleGetCallingUserId();
enforceFullCrossUsersPermission(userHandle);
+
+ final String source;
synchronized (this) {
// This API can only be called by an active device admin,
// so try to retrieve it to check that the caller is one.
final ActiveAdmin admin = getActiveAdminForCallerLocked(null,
DeviceAdminInfo.USES_POLICY_WIPE_DATA);
-
- final String source = admin.info.getComponent().flattenToShortString();
+ source = admin.info.getComponent().flattenToShortString();
long ident = mInjector.binderClearCallingIdentity();
try {
@@ -4844,45 +4885,47 @@
}
}
- boolean wipeExtRequested = (flags & WIPE_EXTERNAL_STORAGE) != 0;
- wipeDeviceOrUserLocked(wipeExtRequested, userHandle,
- "DevicePolicyManager.wipeData() from " + source, /*force=*/ true);
} finally {
mInjector.binderRestoreCallingIdentity(ident);
}
}
+ final boolean wipeExtRequested = (flags & WIPE_EXTERNAL_STORAGE) != 0;
+ wipeDeviceNoLock(wipeExtRequested, userHandle,
+ "DevicePolicyManager.wipeData() from " + source, /*force=*/ true);
}
- private void wipeDeviceOrUserLocked(
+ private void wipeDeviceNoLock(
boolean wipeExtRequested, final int userHandle, String reason, boolean force) {
- // TODO If split user is enabled and the device owner is set in the primary user (rather
- // than system), we should probably trigger factory reset. Current code just remove
- // that user (but still clears FRP...)
- if (userHandle == UserHandle.USER_SYSTEM) {
- wipeDataLocked(wipeExtRequested, reason, force);
- } else {
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- try {
- IActivityManager am = mInjector.getIActivityManager();
- if (am.getCurrentUser().id == userHandle) {
- am.switchUser(UserHandle.USER_SYSTEM);
- }
+ wtfIfInLock();
- boolean userRemoved = force
- ? mUserManagerInternal.removeUserEvenWhenDisallowed(userHandle)
- : mUserManager.removeUser(userHandle);
- if (!userRemoved) {
- Slog.w(LOG_TAG, "Couldn't remove user " + userHandle);
- } else if (isManagedProfile(userHandle)) {
- sendWipeProfileNotification();
- }
- } catch (RemoteException re) {
- // Shouldn't happen
+ long ident = mInjector.binderClearCallingIdentity();
+ try {
+ // TODO If split user is enabled and the device owner is set in the primary user (rather
+ // than system), we should probably trigger factory reset. Current code just remove
+ // that user (but still clears FRP...)
+ if (userHandle == UserHandle.USER_SYSTEM) {
+ wipeDataNoLock(wipeExtRequested, reason, force);
+ } else {
+ try {
+ IActivityManager am = mInjector.getIActivityManager();
+ if (am.getCurrentUser().id == userHandle) {
+ am.switchUser(UserHandle.USER_SYSTEM);
}
+
+ boolean userRemoved = force
+ ? mUserManagerInternal.removeUserEvenWhenDisallowed(userHandle)
+ : mUserManager.removeUser(userHandle);
+ if (!userRemoved) {
+ Slog.w(LOG_TAG, "Couldn't remove user " + userHandle);
+ } else if (isManagedProfile(userHandle)) {
+ sendWipeProfileNotification();
+ }
+ } catch (RemoteException re) {
+ // Shouldn't happen
}
- });
+ }
+ } finally {
+ mInjector.binderRestoreCallingIdentity(ident);
}
}
@@ -5047,8 +5090,7 @@
}
if (wipeData) {
// Call without holding lock.
- wipeDeviceOrUserLocked(false, identifier,
- "reportFailedPasswordAttempt()", false);
+ wipeDeviceNoLock(false, identifier, "reportFailedPasswordAttempt()", false);
}
} finally {
mInjector.binderRestoreCallingIdentity(ident);
@@ -6550,6 +6592,15 @@
}
/**
+ * Calls wtfStack() if called with the DPMS lock held.
+ */
+ private void wtfIfInLock() {
+ if (Thread.holdsLock(this)) {
+ Slog.wtfStack(LOG_TAG, "Shouldn't be called with DPMS lock held");
+ }
+ }
+
+ /**
* The profile owner can only be set by adb or an app with the MANAGE_PROFILE_AND_DEVICE_OWNERS
* permission.
* The profile owner can only be set before the user setup phase has completed,
@@ -8716,40 +8767,43 @@
"can broadcast update information.");
return;
}
- Intent intent = new Intent(DeviceAdminReceiver.ACTION_NOTIFY_PENDING_SYSTEM_UPDATE);
+ final Intent intent = new Intent(DeviceAdminReceiver.ACTION_NOTIFY_PENDING_SYSTEM_UPDATE);
intent.putExtra(DeviceAdminReceiver.EXTRA_SYSTEM_UPDATE_RECEIVED_TIME,
updateReceivedTime);
- synchronized (this) {
- final String deviceOwnerPackage =
- mOwners.hasDeviceOwner() ? mOwners.getDeviceOwnerComponent().getPackageName()
- : null;
- if (deviceOwnerPackage == null) {
- return;
- }
- final UserHandle deviceOwnerUser = new UserHandle(mOwners.getDeviceOwnerUserId());
-
- ActivityInfo[] receivers = null;
- try {
- receivers = mInjector.getPackageManager().getPackageInfo(
- deviceOwnerPackage, PackageManager.GET_RECEIVERS).receivers;
- } catch (NameNotFoundException e) {
- Log.e(LOG_TAG, "Cannot find device owner package", e);
- }
- if (receivers != null) {
- long ident = mInjector.binderClearCallingIdentity();
- try {
- for (int i = 0; i < receivers.length; i++) {
- if (permission.BIND_DEVICE_ADMIN.equals(receivers[i].permission)) {
- intent.setComponent(new ComponentName(deviceOwnerPackage,
- receivers[i].name));
- mContext.sendBroadcastAsUser(intent, deviceOwnerUser);
- }
- }
- } finally {
- mInjector.binderRestoreCallingIdentity(ident);
+ final long ident = mInjector.binderClearCallingIdentity();
+ try {
+ synchronized (this) {
+ // Broadcast to device owner first if there is one.
+ if (mOwners.hasDeviceOwner()) {
+ final UserHandle deviceOwnerUser =
+ UserHandle.of(mOwners.getDeviceOwnerUserId());
+ intent.setComponent(mOwners.getDeviceOwnerComponent());
+ mContext.sendBroadcastAsUser(intent, deviceOwnerUser);
}
}
+ // Get running users.
+ final int runningUserIds[];
+ try {
+ runningUserIds = mInjector.getIActivityManager().getRunningUserIds();
+ } catch (RemoteException e) {
+ // Shouldn't happen.
+ Log.e(LOG_TAG, "Could not retrieve the list of running users", e);
+ return;
+ }
+ // Send broadcasts to corresponding profile owners if any.
+ for (final int userId : runningUserIds) {
+ synchronized (this) {
+ final ComponentName profileOwnerPackage =
+ mOwners.getProfileOwnerComponent(userId);
+ if (profileOwnerPackage != null) {
+ intent.setComponent(profileOwnerPackage);
+ mContext.sendBroadcastAsUser(intent, UserHandle.of(userId));
+ }
+ }
+ }
+ } finally {
+ mInjector.binderRestoreCallingIdentity(ident);
}
}
@@ -9870,10 +9924,7 @@
if (!isAdb()) {
return true;
}
- if (Thread.holdsLock(this)) {
- Slog.wtf(LOG_TAG, "hasIncompatibleAccountsNoLock() called with the DPMS lock held.");
- return true;
- }
+ wtfIfInLock();
final long token = mInjector.binderClearCallingIdentity();
try {
@@ -9974,6 +10025,7 @@
+ " service not being available yet.");
}
mNetworkLogger = null;
+ mInjector.getNotificationManager().cancel(NETWORK_LOGGING_NOTIFICATION_ID);
}
} finally {
mInjector.binderRestoreCallingIdentity(callingIdentity);
@@ -10060,6 +10112,7 @@
.setSmallIcon(R.drawable.ic_qs_network_logging)
.setContentTitle(mContext.getString(R.string.network_logging_notification_title))
.setContentText(mContext.getString(R.string.network_logging_notification_text))
+ .setTicker(mContext.getString(R.string.network_logging_notification_title))
.setShowWhen(true)
.setContentIntent(pendingIntent)
.build();
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/NetworkLogger.java b/services/devicepolicy/java/com/android/server/devicepolicy/NetworkLogger.java
index 49ae2bc3..b82cb3c 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/NetworkLogger.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/NetworkLogger.java
@@ -23,7 +23,6 @@
import android.net.IIpConnectivityMetrics;
import android.net.INetdEventCallback;
import android.os.Bundle;
-import android.os.Handler;
import android.os.Message;
import android.os.Process;
import android.os.RemoteException;
@@ -115,8 +114,7 @@
mHandlerThread.start();
mNetworkLoggingHandler = new NetworkLoggingHandler(mHandlerThread.getLooper(),
mDpm);
- mNetworkLoggingHandler.scheduleBatchFinalization(
- NetworkLoggingHandler.BATCH_FINALIZATION_TIMEOUT_MS);
+ mNetworkLoggingHandler.scheduleBatchFinalization();
mIsLoggingEnabled.set(true);
return true;
} else {
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/NetworkLoggingHandler.java b/services/devicepolicy/java/com/android/server/devicepolicy/NetworkLoggingHandler.java
index 957d4c5..baa4c13 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/NetworkLoggingHandler.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/NetworkLoggingHandler.java
@@ -17,16 +17,11 @@
package com.android.server.devicepolicy;
import android.app.admin.DeviceAdminReceiver;
-import android.app.admin.ConnectEvent;
-import android.app.admin.DnsEvent;
import android.app.admin.NetworkEvent;
-import android.net.IIpConnectivityMetrics;
-import android.net.INetdEventCallback;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
-import android.os.RemoteException;
import android.util.Log;
import com.android.internal.annotations.GuardedBy;
@@ -44,10 +39,9 @@
static final String NETWORK_EVENT_KEY = "network_event";
- // est. ~128kB of memory usage per full batch TODO(mkarpinski): fine tune based on testing data
// If this value changes, update DevicePolicyManager#retrieveNetworkLogs() javadoc
private static final int MAX_EVENTS_PER_BATCH = 1200;
- static final long BATCH_FINALIZATION_TIMEOUT_MS = TimeUnit.MINUTES.toMillis(90);
+ private static final long BATCH_FINALIZATION_TIMEOUT_MS = TimeUnit.MINUTES.toMillis(90);
static final int LOG_NETWORK_EVENT_MSG = 1;
static final int FINALIZE_BATCH_MSG = 2;
@@ -78,31 +72,32 @@
if (networkEvent != null) {
mNetworkEvents.add(networkEvent);
if (mNetworkEvents.size() >= MAX_EVENTS_PER_BATCH) {
- finalizeBatchAndNotifyDeviceOwner();
+ finalizeBatchAndNotifyDeviceOwnerIfNotEmpty();
}
}
break;
}
case FINALIZE_BATCH_MSG: {
- finalizeBatchAndNotifyDeviceOwner();
+ finalizeBatchAndNotifyDeviceOwnerIfNotEmpty();
break;
}
}
}
- void scheduleBatchFinalization(long delay) {
+ void scheduleBatchFinalization() {
removeMessages(FINALIZE_BATCH_MSG);
- sendMessageDelayed(obtainMessage(FINALIZE_BATCH_MSG), delay);
+ sendMessageDelayed(obtainMessage(FINALIZE_BATCH_MSG), BATCH_FINALIZATION_TIMEOUT_MS);
+ Log.d(TAG, "Scheduled new batch finalization " + BATCH_FINALIZATION_TIMEOUT_MS
+ + "ms from now.");
}
- private synchronized void finalizeBatchAndNotifyDeviceOwner() {
- mFullBatch = mNetworkEvents;
- // start a new batch from scratch
- mNetworkEvents = new ArrayList<NetworkEvent>();
- scheduleBatchFinalization(BATCH_FINALIZATION_TIMEOUT_MS);
- // notify DO that there's a new non-empty batch waiting
- if (mFullBatch.size() > 0) {
+ private synchronized void finalizeBatchAndNotifyDeviceOwnerIfNotEmpty() {
+ if (mNetworkEvents.size() > 0) {
+ // finalize the batch and start a new one from scratch
+ mFullBatch = mNetworkEvents;
mCurrentFullBatchToken++;
+ mNetworkEvents = new ArrayList<NetworkEvent>();
+ // notify DO that there's a new non-empty batch waiting
Bundle extras = new Bundle();
extras.putLong(DeviceAdminReceiver.EXTRA_NETWORK_LOGS_TOKEN, mCurrentFullBatchToken);
extras.putInt(DeviceAdminReceiver.EXTRA_NETWORK_LOGS_COUNT, mFullBatch.size());
@@ -110,8 +105,14 @@
+ mCurrentFullBatchToken);
mDpm.sendDeviceOwnerCommand(DeviceAdminReceiver.ACTION_NETWORK_LOGS_AVAILABLE, extras);
} else {
- mFullBatch = null;
+ // don't notify the DO, since there are no events; DPC can still retrieve
+ // the last full batch
+ Log.d(TAG, "Was about to finalize the batch, but there were no events to send to"
+ + " the DPC, the batchToken of last available batch: "
+ + mCurrentFullBatchToken);
}
+ // regardless of whether the batch was non-empty schedule a new finalization after timeout
+ scheduleBatchFinalization();
}
synchronized List<NetworkEvent> retrieveFullLogBatch(long batchToken) {
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 5b46f51..68cb0c5 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -165,6 +165,8 @@
"com.android.server.LockSettingsService$Lifecycle";
private static final String STORAGE_MANAGER_SERVICE_CLASS =
"com.android.server.StorageManagerService$Lifecycle";
+ private static final String STORAGE_STATS_SERVICE_CLASS =
+ "com.android.server.usage.StorageStatsService$Lifecycle";
private static final String SEARCH_MANAGER_SERVICE_CLASS =
"com.android.server.search.SearchManagerService$Lifecycle";
private static final String THERMAL_OBSERVER_CLASS =
@@ -219,6 +221,7 @@
private boolean mOnlyCore;
private boolean mFirstBoot;
+ private final boolean mRuntimeRestart;
/**
* Start the sensor service.
@@ -235,6 +238,8 @@
public SystemServer() {
// Check for factory test mode.
mFactoryTestMode = FactoryTest.getMode();
+ // Remember if it's runtime restart(when sys.boot_completed is already set) or reboot
+ mRuntimeRestart = "1".equals(SystemProperties.get("sys.boot_completed"));
}
private void run() {
@@ -271,13 +276,16 @@
// Here we go!
Slog.i(TAG, "Entered the Android system server!");
- int uptimeMillis = (int) SystemClock.uptimeMillis();
+ int uptimeMillis = (int) SystemClock.elapsedRealtime();
EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_SYSTEM_RUN, uptimeMillis);
- MetricsLogger.histogram(null, "boot_system_server_init", uptimeMillis);
- // Also report when first stage of init has started
- long initStartNs = SystemProperties.getLong("ro.boottime.init", -1);
- if (initStartNs >= 0) {
- MetricsLogger.histogram(null, "boot_android_init", (int)(initStartNs / 1000000));
+ if (!mRuntimeRestart && !mFirstBoot) {
+ MetricsLogger.histogram(null, "boot_system_server_init", uptimeMillis);
+ // Also report when first stage of init has started
+ long initStartNs = SystemProperties.getLong("ro.boottime.init", -1);
+ if (initStartNs >= 0) {
+ MetricsLogger.histogram(null, "boot_android_init",
+ (int)(initStartNs / 1000000));
+ }
}
// In case the runtime switched since last boot (such as when
@@ -344,6 +352,8 @@
// Create the system service manager.
mSystemServiceManager = new SystemServiceManager(mSystemContext);
+ mSystemServiceManager.setRuntimeRestarted(mRuntimeRestart);
+ mSystemServiceManager.setFirstBoot(mFirstBoot);
LocalServices.addService(SystemServiceManager.class, mSystemServiceManager);
// Prepare the thread pool for init tasks that can be parallelized
SystemServerInitThreadPool.get();
@@ -370,7 +380,10 @@
if (StrictMode.conditionallyEnableDebugLogging()) {
Slog.i(TAG, "Enabled StrictMode for system server main thread.");
}
- MetricsLogger.histogram(null, "boot_system_server_ready", (int) SystemClock.uptimeMillis());
+ if (!mRuntimeRestart && !mFirstBoot) {
+ MetricsLogger.histogram(null, "boot_system_server_ready",
+ (int) SystemClock.elapsedRealtime());
+ }
// Loop forever.
Looper.loop();
@@ -499,16 +512,20 @@
}
// Start the package manager.
- MetricsLogger.histogram(null, "boot_package_manager_init_start",
- (int) SystemClock.uptimeMillis());
+ if (!mRuntimeRestart) {
+ MetricsLogger.histogram(null, "boot_package_manager_init_start",
+ (int) SystemClock.elapsedRealtime());
+ }
traceBeginAndSlog("StartPackageManagerService");
mPackageManagerService = PackageManagerService.main(mSystemContext, installer,
mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF, mOnlyCore);
mFirstBoot = mPackageManagerService.isFirstBoot();
mPackageManager = mSystemContext.getPackageManager();
traceEnd();
- MetricsLogger.histogram(null, "boot_package_manager_init_ready",
- (int) SystemClock.uptimeMillis());
+ if (!mRuntimeRestart && !mFirstBoot) {
+ MetricsLogger.histogram(null, "boot_package_manager_init_ready",
+ (int) SystemClock.elapsedRealtime());
+ }
// Manages A/B OTA dexopting. This is a bootstrap service as we need it to rename
// A/B artifacts after boot, before anything else might touch/need them.
// Note: this isn't needed during decryption (we don't have /data anyways).
@@ -795,7 +812,7 @@
if (mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL) {
if (!disableStorage &&
- !"0".equals(SystemProperties.get("system_init.startmountservice"))) {
+ !"0".equals(SystemProperties.get("system_init.startmountservice"))) {
traceBeginAndSlog("StartStorageManagerService");
try {
/*
@@ -806,7 +823,15 @@
storageManager = IStorageManager.Stub.asInterface(
ServiceManager.getService("mount"));
} catch (Throwable e) {
- reportWtf("starting StorageManager Service", e);
+ reportWtf("starting StorageManagerService", e);
+ }
+ traceEnd();
+
+ traceBeginAndSlog("StartStorageStatsService");
+ try {
+ mSystemServiceManager.startService(STORAGE_STATS_SERVICE_CLASS);
+ } catch (Throwable e) {
+ reportWtf("starting StorageStatsService", e);
}
traceEnd();
}
diff --git a/services/tests/notification/Android.mk b/services/tests/notification/Android.mk
index 8aded60..bc37fef 100644
--- a/services/tests/notification/Android.mk
+++ b/services/tests/notification/Android.mk
@@ -32,7 +32,7 @@
LOCAL_CERTIFICATE := platform
# These are not normally accessible from apps so they must be explicitly included.
-LOCAL_JNI_SHARED_LIBRARIES := libservicestestsjni \
+LOCAL_JNI_SHARED_LIBRARIES := \
libbacktrace \
libbase \
libbinder \
diff --git a/services/tests/notification/AndroidManifest.xml b/services/tests/notification/AndroidManifest.xml
index 087806e..1ed8ed0 100644
--- a/services/tests/notification/AndroidManifest.xml
+++ b/services/tests/notification/AndroidManifest.xml
@@ -18,7 +18,10 @@
package="com.android.frameworks.tests.notification">
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
+ <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
+ <uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" />
<uses-permission android:name="android.permission.MANAGE_USERS" />
+ <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<application>
<uses-library android:name="android.test.runner" />
diff --git a/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java
index e1c0166..40938fd 100644
--- a/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -16,6 +16,7 @@
package com.android.server.notification;
+import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;
@@ -29,24 +30,29 @@
import static org.mockito.Mockito.when;
import android.app.INotificationManager;
-import android.app.IOnNotificationChannelCreatedListener;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
+import android.content.pm.ParceledListSlice;
import android.os.Binder;
import android.os.Handler;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
+import android.support.test.annotation.UiThreadTest;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import java.util.Arrays;
+import java.util.List;
import java.util.concurrent.CountDownLatch;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import com.android.server.lights.Light;
+import com.android.server.lights.LightsManager;
@SmallTest
@RunWith(AndroidJUnit4.class)
@@ -58,6 +64,7 @@
private IPackageManager mPackageManager = mock(IPackageManager.class);
@Before
+ @UiThreadTest
public void setUp() throws Exception {
final Context context = InstrumentationRegistry.getTargetContext();
mNotificationManagerService = new NotificationManagerService(context);
@@ -67,37 +74,32 @@
applicationInfo.uid = Binder.getCallingUid();
when(mPackageManager.getApplicationInfo(any(), anyInt(), anyInt()))
.thenReturn(applicationInfo);
- mNotificationManagerService.setPackageManager(mPackageManager);
- mNotificationManagerService.setHandler(new Handler(context.getMainLooper()));
+ final LightsManager mockLightsManager = mock(LightsManager.class);
+ when(mockLightsManager.getLight(anyInt())).thenReturn(mock(Light.class));
+ mNotificationManagerService.init(mPackageManager, mockLightsManager);
// Tests call directly into the Binder.
mBinderService = mNotificationManagerService.getBinderService();
}
@Test
- public void testCreateNotificationChannel_SuccessCallsListener() throws Exception {
+ @UiThreadTest
+ public void testCreateNotificationChannels_SingleChannel() throws Exception {
final NotificationChannel channel =
new NotificationChannel("id", "name", NotificationManager.IMPORTANCE_DEFAULT);
- mNotificationManagerService.setRankingHelper(mock(RankingHelper.class));
- final CountDownLatch latch = new CountDownLatch(1);
- mBinderService.createNotificationChannel("test_pkg", channel,
- new IOnNotificationChannelCreatedListener.Stub() {
- @Override public void onNotificationChannelCreated(
- NotificationChannel channel) {
- latch.countDown();
- }});
- latch.await();
+ mBinderService.createNotificationChannels("test_pkg",
+ new ParceledListSlice(Arrays.asList(channel)));
+ final NotificationChannel createdChannel =
+ mBinderService.getNotificationChannel("test_pkg", "id");
+ assertTrue(createdChannel != null);
}
@Test
- public void testCreateNotificationChannel_FailureDoesNotCallListener() throws Exception {
+ @UiThreadTest
+ public void testCreateNotificationChannels_NullChannelThrowsException() throws Exception {
try {
- mBinderService.createNotificationChannel("test_pkg", null,
- new IOnNotificationChannelCreatedListener.Stub() {
- @Override public void onNotificationChannelCreated(
- NotificationChannel channel) {
- fail("Listener was triggered from failure.");
- }});
+ mBinderService.createNotificationChannels("test_pkg",
+ new ParceledListSlice(Arrays.asList(null)));
fail("Exception should be thrown immediately.");
} catch (NullPointerException e) {
// pass
@@ -105,6 +107,54 @@
}
@Test
+ @UiThreadTest
+ public void testCreateNotificationChannels_TwoChannels() throws Exception {
+ final NotificationChannel channel1 =
+ new NotificationChannel("id1", "name", NotificationManager.IMPORTANCE_DEFAULT);
+ final NotificationChannel channel2 =
+ new NotificationChannel("id2", "name", NotificationManager.IMPORTANCE_DEFAULT);
+ mBinderService.createNotificationChannels("test_pkg",
+ new ParceledListSlice(Arrays.asList(channel1, channel2)));
+ assertTrue(mBinderService.getNotificationChannel("test_pkg", "id1") != null);
+ assertTrue(mBinderService.getNotificationChannel("test_pkg", "id2") != null);
+ }
+
+ @Test
+ @UiThreadTest
+ public void testCreateNotificationChannels_SecondCreateDoesNotChangeImportance()
+ throws Exception {
+ final NotificationChannel channel =
+ new NotificationChannel("id", "name", NotificationManager.IMPORTANCE_DEFAULT);
+ mBinderService.createNotificationChannels("test_pkg",
+ new ParceledListSlice(Arrays.asList(channel)));
+
+ // Recreating the channel doesn't throw, but ignores importance.
+ final NotificationChannel dupeChannel =
+ new NotificationChannel("id", "name", NotificationManager.IMPORTANCE_HIGH);
+ mBinderService.createNotificationChannels("test_pkg",
+ new ParceledListSlice(Arrays.asList(dupeChannel)));
+ final NotificationChannel createdChannel =
+ mBinderService.getNotificationChannel("test_pkg", "id");
+ assertEquals(NotificationManager.IMPORTANCE_DEFAULT, createdChannel.getImportance());
+ }
+
+ @Test
+ @UiThreadTest
+ public void testCreateNotificationChannels_IdenticalChannelsInListIgnoresSecond()
+ throws Exception {
+ final NotificationChannel channel1 =
+ new NotificationChannel("id", "name", NotificationManager.IMPORTANCE_DEFAULT);
+ final NotificationChannel channel2 =
+ new NotificationChannel("id", "name", NotificationManager.IMPORTANCE_HIGH);
+ mBinderService.createNotificationChannels("test_pkg",
+ new ParceledListSlice(Arrays.asList(channel1, channel2)));
+ final NotificationChannel createdChannel =
+ mBinderService.getNotificationChannel("test_pkg", "id");
+ assertEquals(NotificationManager.IMPORTANCE_DEFAULT, createdChannel.getImportance());
+ }
+
+ @Test
+ @UiThreadTest
public void testBlockedNotifications_suspended() throws Exception {
NotificationUsageStats usageStats = mock(NotificationUsageStats.class);
when(mPackageManager.isPackageSuspendedForUser(anyString(), anyInt())).thenReturn(true);
@@ -120,13 +170,14 @@
}
@Test
+ @UiThreadTest
public void testBlockedNotifications_blockedChannel() throws Exception {
NotificationUsageStats usageStats = mock(NotificationUsageStats.class);
when(mPackageManager.isPackageSuspendedForUser(anyString(), anyInt())).thenReturn(false);
NotificationChannel channel = new NotificationChannel("id", "name",
NotificationManager.IMPORTANCE_HIGH);
- channel.setAllowed(false);
+ channel.setImportance(NotificationManager.IMPORTANCE_NONE);
NotificationRecord r = generateNotificationRecord(channel);
NotificationManagerService.EnqueueNotificationRunnable enqueue =
mNotificationManagerService.new EnqueueNotificationRunnable(UserHandle.USER_SYSTEM,
@@ -136,6 +187,7 @@
}
@Test
+ @UiThreadTest
public void testBlockedNotifications_blockedApp() throws Exception {
NotificationUsageStats usageStats = mock(NotificationUsageStats.class);
when(mPackageManager.isPackageSuspendedForUser(anyString(), anyInt())).thenReturn(false);
diff --git a/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java b/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java
index 5696a72..f8061f6 100644
--- a/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java
+++ b/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java
@@ -488,25 +488,6 @@
}
@Test
- public void testUpdate_userLockedAllowed() throws Exception {
- final NotificationChannel channel =
- new NotificationChannel("id2", "name2", NotificationManager.IMPORTANCE_LOW);
- channel.setAllowed(true);
- channel.lockFields(NotificationChannel.USER_LOCKED_ALLOWED);
-
- mHelper.createNotificationChannel(pkg, uid, channel, false);
-
- final NotificationChannel channel2 =
- new NotificationChannel("id2", "name2", NotificationManager.IMPORTANCE_HIGH);
- channel2.setAllowed(false);
-
- mHelper.updateNotificationChannelFromAssistant(pkg, uid, channel2);
-
- // no fields should be changed
- assertEquals(channel, mHelper.getNotificationChannel(pkg, uid, channel.getId()));
- }
-
- @Test
public void testUpdate_userLockedBadge() throws Exception {
final NotificationChannel channel =
new NotificationChannel("id2", "name2", NotificationManager.IMPORTANCE_LOW);
@@ -567,7 +548,6 @@
channel.setBypassDnd(true);
channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
channel.setShowBadge(true);
- channel.setAllowed(false);
int lockMask = 0;
for (int i = 0; i < NotificationChannel.LOCKABLE_FIELDS.length; i++) {
lockMask |= NotificationChannel.LOCKABLE_FIELDS[i];
@@ -583,7 +563,7 @@
assertEquals(channel.shouldShowLights(), savedChannel.shouldShowLights());
assertFalse(savedChannel.canBypassDnd());
assertFalse(Notification.VISIBILITY_SECRET == savedChannel.getLockscreenVisibility());
- assertFalse(savedChannel.canShowBadge());
+ assertEquals(channel.canShowBadge(), savedChannel.canShowBadge());
}
@Test
@@ -595,7 +575,6 @@
channel.setBypassDnd(true);
channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
channel.setShowBadge(true);
- channel.setAllowed(false);
int lockMask = 0;
for (int i = 0; i < NotificationChannel.LOCKABLE_FIELDS.length; i++) {
lockMask |= NotificationChannel.LOCKABLE_FIELDS[i];
@@ -611,6 +590,6 @@
assertEquals(channel.shouldShowLights(), savedChannel.shouldShowLights());
assertFalse(savedChannel.canBypassDnd());
assertFalse(Notification.VISIBILITY_SECRET == savedChannel.getLockscreenVisibility());
- assertFalse(savedChannel.canShowBadge());
+ assertEquals(channel.canShowBadge(), savedChannel.canShowBadge());
}
}
diff --git a/services/tests/notification/src/com/android/server/notification/SnoozeHelperTest.java b/services/tests/notification/src/com/android/server/notification/SnoozeHelperTest.java
index 4f6a35c..460fcdf 100644
--- a/services/tests/notification/src/com/android/server/notification/SnoozeHelperTest.java
+++ b/services/tests/notification/src/com/android/server/notification/SnoozeHelperTest.java
@@ -68,7 +68,7 @@
@Test
public void testSnoozeForTime() throws Exception {
NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
- mSnoozeHelper.snooze(r , UserHandle.USER_SYSTEM, 1000);
+ mSnoozeHelper.snooze(r, 1000);
verify(mAm, times(1)).setExactAndAllowWhileIdle(
anyInt(), eq((long) 1000), any(PendingIntent.class));
assertTrue(mSnoozeHelper.isSnoozed(
@@ -78,7 +78,7 @@
@Test
public void testSnooze() throws Exception {
NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
- mSnoozeHelper.snooze(r , UserHandle.USER_SYSTEM);
+ mSnoozeHelper.snooze(r);
verify(mAm, never()).setExactAndAllowWhileIdle(
anyInt(), anyLong(), any(PendingIntent.class));
assertTrue(mSnoozeHelper.isSnoozed(
@@ -89,8 +89,8 @@
public void testCancelByApp() throws Exception {
NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM);
- mSnoozeHelper.snooze(r , UserHandle.USER_SYSTEM, 1000);
- mSnoozeHelper.snooze(r2 , UserHandle.USER_SYSTEM, 1000);
+ mSnoozeHelper.snooze(r, 1000);
+ mSnoozeHelper.snooze(r2 , 1000);
assertTrue(mSnoozeHelper.isSnoozed(
UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey()));
assertTrue(mSnoozeHelper.isSnoozed(
@@ -110,9 +110,9 @@
NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM);
NotificationRecord r3 = getNotificationRecord("pkg", 3, "three", UserHandle.ALL);
- mSnoozeHelper.snooze(r , UserHandle.USER_SYSTEM, 1000);
- mSnoozeHelper.snooze(r2 , UserHandle.USER_SYSTEM, 1000);
- mSnoozeHelper.snooze(r3 , UserHandle.USER_ALL, 1000);
+ mSnoozeHelper.snooze(r, 1000);
+ mSnoozeHelper.snooze(r2, 1000);
+ mSnoozeHelper.snooze(r3, 1000);
assertTrue(mSnoozeHelper.isSnoozed(
UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey()));
assertTrue(mSnoozeHelper.isSnoozed(
@@ -136,9 +136,9 @@
NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM);
NotificationRecord r3 = getNotificationRecord("pkg2", 3, "three", UserHandle.SYSTEM);
- mSnoozeHelper.snooze(r , UserHandle.USER_SYSTEM, 1000);
- mSnoozeHelper.snooze(r2 , UserHandle.USER_SYSTEM, 1000);
- mSnoozeHelper.snooze(r3 , UserHandle.USER_SYSTEM, 1000);
+ mSnoozeHelper.snooze(r, 1000);
+ mSnoozeHelper.snooze(r2, 1000);
+ mSnoozeHelper.snooze(r3, 1000);
assertTrue(mSnoozeHelper.isSnoozed(
UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey()));
assertTrue(mSnoozeHelper.isSnoozed(
@@ -160,17 +160,27 @@
@Test
public void testRepost() throws Exception {
NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
- mSnoozeHelper.snooze(r , UserHandle.USER_SYSTEM, 1000);
+ mSnoozeHelper.snooze(r, 1000);
NotificationRecord r2 = getNotificationRecord("pkg", 2, "one", UserHandle.ALL);
- mSnoozeHelper.snooze(r2 , UserHandle.USER_ALL, 1000);
+ mSnoozeHelper.snooze(r2, 1000);
mSnoozeHelper.repost(r.getKey(), UserHandle.USER_SYSTEM);
verify(mCallback, times(1)).repost(UserHandle.USER_SYSTEM, r);
}
@Test
+ public void testRepost_noUser() throws Exception {
+ NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
+ mSnoozeHelper.snooze(r, 1000);
+ NotificationRecord r2 = getNotificationRecord("pkg", 2, "one", UserHandle.ALL);
+ mSnoozeHelper.snooze(r2, 1000);
+ mSnoozeHelper.repost(r.getKey());
+ verify(mCallback, times(1)).repost(UserHandle.USER_SYSTEM, r);
+ }
+
+ @Test
public void testUpdate() throws Exception {
NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
- mSnoozeHelper.snooze(r , UserHandle.USER_SYSTEM, 1000);
+ mSnoozeHelper.snooze(r , 1000);
r.getNotification().category = "NEW CATEGORY";
mSnoozeHelper.update(UserHandle.USER_SYSTEM, r);
diff --git a/services/tests/servicestests/Android.mk b/services/tests/servicestests/Android.mk
index ae5da78..15c61f6 100644
--- a/services/tests/servicestests/Android.mk
+++ b/services/tests/servicestests/Android.mk
@@ -34,7 +34,7 @@
LOCAL_CERTIFICATE := platform
# These are not normally accessible from apps so they must be explicitly included.
-LOCAL_JNI_SHARED_LIBRARIES := libservicestestsjni \
+LOCAL_JNI_SHARED_LIBRARIES := \
libbacktrace \
libbase \
libbinder \
@@ -50,44 +50,8 @@
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
-# Code coverage puts us over the dex limit, so enable multi-dex for coverage-enabled builds
-ifeq (true,$(EMMA_INSTRUMENT))
LOCAL_JACK_FLAGS := --multi-dex native
-endif # EMMA_INSTRUMENT_STATIC
LOCAL_STATIC_JAVA_LIBRARIES += ub-uiautomator
include $(BUILD_PACKAGE)
-
-#########################################################################
-# Build JNI Shared Library
-#########################################################################
-
-LOCAL_PATH:= $(LOCAL_PATH)/jni
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := tests
-
-LOCAL_CFLAGS := -Wall -Wextra -Werror
-
-LOCAL_C_INCLUDES := \
- libpcap \
- hardware/google/apf
-
-LOCAL_SRC_FILES := $(call all-cpp-files-under)
-
-LOCAL_SHARED_LIBRARIES := \
- libbinder \
- liblog \
- libcutils \
- libnativehelper \
- libnetdaidl
-
-LOCAL_STATIC_LIBRARIES := \
- libpcap \
- libapf
-
-LOCAL_MODULE := libservicestestsjni
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/services/tests/servicestests/src/com/android/server/AccessibilityManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/AccessibilityManagerServiceTest.java
index 51e14d3..60842a6 100644
--- a/services/tests/servicestests/src/com/android/server/AccessibilityManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/AccessibilityManagerServiceTest.java
@@ -285,7 +285,7 @@
}
@LargeTest
- public void testSendAccessibilityEvent_OneService_NotifivationAfterTimeout() throws Exception {
+ public void testSendAccessibilityEvent_OneService_NotificationAfterTimeout() throws Exception {
// enable the mock accessibility service
ensureOnlyMockServicesEnabled(mContext, true, false);
@@ -570,6 +570,8 @@
mState = state;
}
+ public void notifyServicesStateChanged() {}
+
public void setTouchExplorationEnabled(boolean enabled) {
}
}
diff --git a/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java
index 9a9f81e..1189dae 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java
@@ -23,6 +23,7 @@
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;
@@ -61,6 +62,7 @@
import android.net.ScoredNetwork;
import android.net.WifiKey;
import android.net.wifi.WifiConfiguration;
+import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
import android.os.IRemoteCallback;
@@ -147,11 +149,11 @@
@Test
public void testRequestScores_noPermission() throws Exception {
doThrow(new SecurityException()).when(mContext)
- .enforceCallingOrSelfPermission(eq(permission.BROADCAST_NETWORK_PRIVILEGED),
+ .enforceCallingOrSelfPermission(eq(permission.REQUEST_NETWORK_SCORES),
anyString());
try {
mNetworkScoreService.requestScores(null);
- fail("BROADCAST_NETWORK_PRIVILEGED not enforced.");
+ fail("REQUEST_NETWORK_SCORES not enforced.");
} catch (SecurityException e) {
// expected
}
@@ -184,11 +186,11 @@
@Test
public void testRequestRecommendation_noPermission() throws Exception {
doThrow(new SecurityException()).when(mContext)
- .enforceCallingOrSelfPermission(eq(permission.BROADCAST_NETWORK_PRIVILEGED),
+ .enforceCallingOrSelfPermission(eq(permission.REQUEST_NETWORK_SCORES),
anyString());
try {
mNetworkScoreService.requestRecommendation(mRecommendationRequest);
- fail("BROADCAST_NETWORK_PRIVILEGED not enforced.");
+ fail("REQUEST_NETWORK_SCORES not enforced.");
} catch (SecurityException e) {
// expected
}
@@ -261,7 +263,7 @@
@Test
public void testUpdateScores_notActiveScorer() {
- when(mNetworkScorerAppManager.isCallerActiveScorer(anyInt())).thenReturn(false);
+ bindToScorer(false /*callerIsScorer*/);
try {
mNetworkScoreService.updateScores(new ScoredNetwork[0]);
@@ -273,7 +275,7 @@
@Test
public void testUpdateScores_oneRegisteredCache() throws RemoteException {
- when(mNetworkScorerAppManager.isCallerActiveScorer(anyInt())).thenReturn(true);
+ bindToScorer(true /*callerIsScorer*/);
mNetworkScoreService.registerNetworkScoreCache(NetworkKey.TYPE_WIFI,
mNetworkScoreCache, CACHE_FILTER_NONE);
@@ -288,7 +290,7 @@
@Test
public void testUpdateScores_twoRegisteredCaches() throws RemoteException {
- when(mNetworkScorerAppManager.isCallerActiveScorer(anyInt())).thenReturn(true);
+ bindToScorer(true /*callerIsScorer*/);
mNetworkScoreService.registerNetworkScoreCache(NetworkKey.TYPE_WIFI,
mNetworkScoreCache, CACHE_FILTER_NONE);
@@ -322,9 +324,9 @@
}
@Test
- public void testClearScores_notActiveScorer_noBroadcastNetworkPermission() {
- when(mNetworkScorerAppManager.isCallerActiveScorer(anyInt())).thenReturn(false);
- when(mContext.checkCallingOrSelfPermission(permission.BROADCAST_NETWORK_PRIVILEGED))
+ public void testClearScores_notActiveScorer_noRequestNetworkScoresPermission() {
+ bindToScorer(false /*callerIsScorer*/);
+ when(mContext.checkCallingOrSelfPermission(permission.REQUEST_NETWORK_SCORES))
.thenReturn(PackageManager.PERMISSION_DENIED);
try {
mNetworkScoreService.clearScores();
@@ -335,9 +337,9 @@
}
@Test
- public void testClearScores_activeScorer_noBroadcastNetworkPermission() {
- when(mNetworkScorerAppManager.isCallerActiveScorer(anyInt())).thenReturn(true);
- when(mContext.checkCallingOrSelfPermission(permission.BROADCAST_NETWORK_PRIVILEGED))
+ public void testClearScores_activeScorer_noRequestNetworkScoresPermission() {
+ bindToScorer(true /*callerIsScorer*/);
+ when(mContext.checkCallingOrSelfPermission(permission.REQUEST_NETWORK_SCORES))
.thenReturn(PackageManager.PERMISSION_DENIED);
mNetworkScoreService.clearScores();
@@ -345,7 +347,7 @@
@Test
public void testClearScores_activeScorer() throws RemoteException {
- when(mNetworkScorerAppManager.isCallerActiveScorer(anyInt())).thenReturn(true);
+ bindToScorer(true /*callerIsScorer*/);
mNetworkScoreService.registerNetworkScoreCache(NetworkKey.TYPE_WIFI, mNetworkScoreCache,
CACHE_FILTER_NONE);
@@ -355,10 +357,10 @@
}
@Test
- public void testClearScores_notActiveScorer_hasBroadcastNetworkPermission()
+ public void testClearScores_notActiveScorer_hasRequestNetworkScoresPermission()
throws RemoteException {
- when(mNetworkScorerAppManager.isCallerActiveScorer(anyInt())).thenReturn(false);
- when(mContext.checkCallingOrSelfPermission(permission.BROADCAST_NETWORK_PRIVILEGED))
+ bindToScorer(false /*callerIsScorer*/);
+ when(mContext.checkCallingOrSelfPermission(permission.REQUEST_NETWORK_SCORES))
.thenReturn(PackageManager.PERMISSION_GRANTED);
mNetworkScoreService.registerNetworkScoreCache(NetworkKey.TYPE_WIFI, mNetworkScoreCache,
@@ -382,9 +384,9 @@
}
@Test
- public void testDisableScoring_notActiveScorer_noBroadcastNetworkPermission() {
- when(mNetworkScorerAppManager.isCallerActiveScorer(anyInt())).thenReturn(false);
- when(mContext.checkCallingOrSelfPermission(permission.BROADCAST_NETWORK_PRIVILEGED))
+ public void testDisableScoring_notActiveScorer_noRequestNetworkScoresPermission() {
+ bindToScorer(false /*callerIsScorer*/);
+ when(mContext.checkCallingOrSelfPermission(permission.REQUEST_NETWORK_SCORES))
.thenReturn(PackageManager.PERMISSION_DENIED);
try {
@@ -396,9 +398,9 @@
}
@Test
- public void testRegisterNetworkScoreCache_noBroadcastNetworkPermission() {
+ public void testRegisterNetworkScoreCache_noRequestNetworkScoresPermission() {
doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission(
- eq(permission.BROADCAST_NETWORK_PRIVILEGED), anyString());
+ eq(permission.REQUEST_NETWORK_SCORES), anyString());
try {
mNetworkScoreService.registerNetworkScoreCache(
@@ -410,9 +412,9 @@
}
@Test
- public void testUnregisterNetworkScoreCache_noBroadcastNetworkPermission() {
+ public void testUnregisterNetworkScoreCache_noRequestNetworkScoresPermission() {
doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission(
- eq(permission.BROADCAST_NETWORK_PRIVILEGED), anyString());
+ eq(permission.REQUEST_NETWORK_SCORES), anyString());
try {
mNetworkScoreService.unregisterNetworkScoreCache(
@@ -448,6 +450,42 @@
assertFalse(stringWriter.toString().isEmpty());
}
+ @Test
+ public void testIsCallerActiveScorer_noBoundService() throws Exception {
+ mNetworkScoreService.systemRunning();
+
+ assertFalse(mNetworkScoreService.isCallerActiveScorer(Binder.getCallingUid()));
+ }
+
+ @Test
+ public void testIsCallerActiveScorer_boundServiceIsNotCaller() throws Exception {
+ bindToScorer(false /*callerIsScorer*/);
+
+ assertFalse(mNetworkScoreService.isCallerActiveScorer(Binder.getCallingUid()));
+ }
+
+ @Test
+ public void testIsCallerActiveScorer_boundServiceIsCaller() throws Exception {
+ bindToScorer(true /*callerIsScorer*/);
+
+ assertTrue(mNetworkScoreService.isCallerActiveScorer(Binder.getCallingUid()));
+ }
+
+ @Test
+ public void testGetActiveScorerPackage_notActive() throws Exception {
+ mNetworkScoreService.systemRunning();
+
+ assertNull(mNetworkScoreService.getActiveScorerPackage());
+ }
+
+ @Test
+ public void testGetActiveScorerPackage_active() throws Exception {
+ when(mNetworkScorerAppManager.getActiveScorer()).thenReturn(NEW_SCORER);
+ mNetworkScoreService.systemRunning();
+
+ assertEquals(NEW_SCORER.packageName, mNetworkScoreService.getActiveScorerPackage());
+ }
+
// "injects" the mock INetworkRecommendationProvider into the NetworkScoreService.
private void injectProvider() {
final ComponentName componentName = new ComponentName(NEW_SCORER.packageName,
@@ -467,4 +505,14 @@
});
mNetworkScoreService.systemRunning();
}
+
+ private void bindToScorer(boolean callerIsScorer) {
+ final int callingUid = callerIsScorer ? Binder.getCallingUid() : 0;
+ NetworkScorerAppData appData = new NetworkScorerAppData(NEW_SCORER.packageName,
+ callingUid, NEW_SCORER.recommendationServiceClassName);
+ when(mNetworkScorerAppManager.getActiveScorer()).thenReturn(appData);
+ when(mContext.bindServiceAsUser(isA(Intent.class), isA(ServiceConnection.class), anyInt(),
+ isA(UserHandle.class))).thenReturn(true);
+ mNetworkScoreService.systemRunning();
+ }
}
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityCacheTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityCacheTest.java
index 9ccf290..ace65a6 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityCacheTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityCacheTest.java
@@ -17,12 +17,14 @@
package com.android.server.accessibility;
import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.when;
import android.support.test.runner.AndroidJUnit4;
@@ -479,6 +481,25 @@
AccessibilityEvent.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION);
}
+ @Test
+ public void testCacheCriticalEventList_doesntLackEvents() {
+ for (int i = 0; i < 32; i++) {
+ int eventType = 1 << i;
+ if ((eventType & AccessibilityCache.CACHE_CRITICAL_EVENTS_MASK) == 0) {
+ try {
+ assertEventTypeClearsNode(eventType, false);
+ verify(mAccessibilityNodeRefresher, never())
+ .refreshNode(anyObject(), anyBoolean());
+ } catch (Throwable e) {
+ throw new AssertionError(
+ "Failed for eventType: " + AccessibilityEvent.eventTypeToString(
+ eventType),
+ e);
+ }
+ }
+ }
+ }
+
private void assertNodeIsRefreshedWithEventType(int eventType, int contentChangeTypes) {
AccessibilityNodeInfo nodeInfo = getNodeWithA11yAndWindowId(SINGLE_VIEW_ID, WINDOW_ID_1);
mAccessibilityCache.add(nodeInfo);
@@ -521,13 +542,28 @@
}
private void assertEventTypeClearsNode(int eventType) {
+ assertEventTypeClearsNode(eventType, true);
+ }
+
+ private void assertEventTypeClearsNode(int eventType, boolean clears) {
final int nodeId = 0xBEEF;
AccessibilityNodeInfo nodeInfo = getNodeWithA11yAndWindowId(nodeId, WINDOW_ID_1);
long id = nodeInfo.getSourceNodeId();
mAccessibilityCache.add(nodeInfo);
nodeInfo.recycle();
mAccessibilityCache.onAccessibilityEvent(AccessibilityEvent.obtain(eventType));
- assertNull(mAccessibilityCache.getNode(WINDOW_ID_1, id));
+ AccessibilityNodeInfo cachedNode = mAccessibilityCache.getNode(WINDOW_ID_1, id);
+ try {
+ if (clears) {
+ assertNull(cachedNode);
+ } else {
+ assertNotNull(cachedNode);
+ }
+ } finally {
+ if (cachedNode != null) {
+ cachedNode.recycle();
+ }
+ }
}
private AccessibilityNodeInfo getParentNode() {
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceMigrationTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceMigrationTest.java
index 3a6b983..b440095 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceMigrationTest.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceMigrationTest.java
@@ -183,7 +183,8 @@
// Check the new owner restrictions.
DpmTestUtils.assertRestrictions(
DpmTestUtils.newRestrictions(
- UserManager.DISALLOW_ADD_USER
+ UserManager.DISALLOW_ADD_USER,
+ UserManager.DISALLOW_ADD_MANAGED_PROFILE
),
dpms.getDeviceOwnerAdminLocked().ensureUserRestrictions());
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
index d392459..182f045 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
@@ -2289,6 +2289,11 @@
setUpPackageManagerForAdmin(admin1, mContext.binder.callingUid);
mContext.packageName = admin1.getPackageName();
+ final ComponentName adminDifferentPackage =
+ new ComponentName("another.package", "whatever.random.class");
+ final int ANOTHER_UID = UserHandle.getUid(DpmMockContext.CALLER_USER_HANDLE, 948);
+ setUpPackageManagerForFakeAdmin(adminDifferentPackage, ANOTHER_UID, admin2);
+
// COMP mode is allowed.
assertProvisioningAllowed(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE, true);
@@ -2304,12 +2309,66 @@
.thenReturn(UserManager.RESTRICTION_SOURCE_DEVICE_OWNER);
assertProvisioningAllowed(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE, true);
+ // But another app should not
+ mContext.binder.callingUid = ANOTHER_UID;
+ mContext.packageName = adminDifferentPackage.getPackageName();
+ assertProvisioningAllowed(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE, false);
+
// The DO should not be allowed to initiate provisioning if the restriction is set by
// another entity.
when(mContext.userManager.getUserRestrictionSource(
eq(UserManager.DISALLOW_ADD_MANAGED_PROFILE),
eq(UserHandle.getUserHandleForUid(mContext.binder.callingUid))))
.thenReturn(UserManager.RESTRICTION_SOURCE_SYSTEM);
+ mContext.binder.callingUid = DpmMockContext.CALLER_UID;
+ mContext.packageName = admin1.getPackageName();
+ assertProvisioningAllowed(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE, false);
+
+ mContext.binder.callingUid = ANOTHER_UID;
+ mContext.packageName = adminDifferentPackage.getPackageName();
+ assertProvisioningAllowed(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE, false);
+ }
+
+ public void testIsProvisioningAllowed_nonSplitUser_comp() throws Exception {
+ setDeviceOwner();
+ setup_nonSplitUser_afterDeviceSetup_primaryUser();
+ setUpPackageManagerForAdmin(admin1, DpmMockContext.CALLER_UID);
+
+ final ComponentName adminDifferentPackage =
+ new ComponentName("another.package", "whatever.class");
+ final int ANOTHER_UID = UserHandle.getUid(DpmMockContext.CALLER_USER_HANDLE, 948);
+ setUpPackageManagerForFakeAdmin(adminDifferentPackage, ANOTHER_UID, admin2);
+
+ final int MANAGED_PROFILE_USER_ID = 18;
+ final int MANAGED_PROFILE_ADMIN_UID = UserHandle.getUid(MANAGED_PROFILE_USER_ID, 1308);
+ addManagedProfile(admin1, MANAGED_PROFILE_ADMIN_UID, admin1);
+
+ when(mContext.userManager.canAddMoreManagedProfiles(DpmMockContext.CALLER_USER_HANDLE,
+ false /* we can't remove a managed profile */)).thenReturn(false);
+ when(mContext.userManager.canAddMoreManagedProfiles(DpmMockContext.CALLER_USER_HANDLE,
+ true)).thenReturn(true);
+
+ // We can delete the managed profile to create a new one, so provisioning is allowed.
+ mContext.packageName = admin1.getPackageName();
+ mContext.binder.callingUid = DpmMockContext.CALLER_UID;
+ assertProvisioningAllowed(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE, true);
+
+ mContext.packageName = adminDifferentPackage.getPackageName();
+ mContext.binder.callingUid = ANOTHER_UID;
+ assertProvisioningAllowed(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE, true);
+
+ when(mContext.userManager.hasUserRestriction(
+ eq(UserManager.DISALLOW_REMOVE_MANAGED_PROFILE),
+ eq(UserHandle.of(DpmMockContext.CALLER_USER_HANDLE))))
+ .thenReturn(true);
+
+ // Now, we can't remove the profile any more to create a new one.
+ mContext.packageName = admin1.getPackageName();
+ mContext.binder.callingUid = DpmMockContext.CALLER_UID;
+ assertProvisioningAllowed(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE, false);
+
+ mContext.packageName = adminDifferentPackage.getPackageName();
+ mContext.binder.callingUid = ANOTHER_UID;
assertProvisioningAllowed(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE, false);
}
diff --git a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java
index dcaab76..228b8e0 100644
--- a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java
@@ -404,7 +404,6 @@
@Override
boolean injectIsActivityEnabledAndExported(ComponentName activity, @UserIdInt int userId) {
- assertNotNull(activity);
return mEnabledActivityChecker.test(activity, userId);
}
@@ -450,11 +449,6 @@
// During tests, WTF is fatal.
fail(message + " exception: " + th + "\n" + Log.getStackTraceString(th));
}
-
- @Override
- void verifyError() {
- fail("Verify error");
- }
}
/** ShortcutManager with injection override methods. */
@@ -1409,7 +1403,7 @@
protected ShortcutInfo makeShortcut(String id, String title, ComponentName activity,
Icon icon, Intent intent, int rank) {
final ShortcutInfo.Builder b = new ShortcutInfo.Builder(mClientContext, id)
- .setActivity(new ComponentName(mClientContext.getPackageName(), "dummy"))
+ .setActivity(new ComponentName(mClientContext.getPackageName(), "main"))
.setShortLabel(title)
.setRank(rank)
.setIntent(intent);
@@ -1438,7 +1432,7 @@
protected ShortcutInfo makeShortcut(String id, String title, ComponentName activity,
Icon icon, Intent[] intents, int rank) {
final ShortcutInfo.Builder b = new ShortcutInfo.Builder(mClientContext, id)
- .setActivity(new ComponentName(mClientContext.getPackageName(), "dummy"))
+ .setActivity(new ComponentName(mClientContext.getPackageName(), "main"))
.setShortLabel(title)
.setRank(rank)
.setIntents(intents);
@@ -1461,7 +1455,7 @@
protected ShortcutInfo makeShortcutWithExtras(String id, Intent intent,
PersistableBundle extras) {
final ShortcutInfo.Builder b = new ShortcutInfo.Builder(mClientContext, id)
- .setActivity(new ComponentName(mClientContext.getPackageName(), "dummy"))
+ .setActivity(new ComponentName(mClientContext.getPackageName(), "main"))
.setShortLabel("title-" + id)
.setExtras(extras)
.setIntent(intent);
diff --git a/services/tests/servicestests/src/com/android/server/pm/InstallerTest.java b/services/tests/servicestests/src/com/android/server/pm/InstallerTest.java
new file mode 100644
index 0000000..5ab9020
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/pm/InstallerTest.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.pm;
+
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageStats;
+import android.os.SystemClock;
+import android.os.UserHandle;
+import android.test.AndroidTestCase;
+import android.util.Log;
+
+import com.android.internal.util.ArrayUtils;
+
+import java.util.Arrays;
+
+public class InstallerTest extends AndroidTestCase {
+ private static final String TAG = "InstallerTest";
+
+ private Installer mInstaller;
+
+ private final Timer mManual = new Timer("Manual");
+ private final Timer mQuota = new Timer("Quota");
+
+ private static class Timer {
+ private final String mTitle;
+ private long mStart;
+ private long mTotal;
+
+ public Timer(String title) {
+ mTitle = title;
+ }
+
+ public void start() {
+ mStart = SystemClock.currentTimeMicro();
+ }
+
+ public void stop() {
+ mTotal += SystemClock.currentTimeMicro() - mStart;
+ }
+
+ public void reset() {
+ mStart = 0;
+ mTotal = 0;
+ }
+
+ @Override
+ public String toString() {
+ return mTitle + ": " + (mTotal / 1000) + "ms";
+ }
+ }
+
+ @Override
+ public void setUp() throws Exception {
+ mInstaller = new Installer(getContext());
+ mInstaller.onStart();
+ mManual.reset();
+ mQuota.reset();
+ }
+
+ @Override
+ public void tearDown() throws Exception {
+ Log.i(TAG, mManual.toString());
+ Log.i(TAG, mQuota.toString());
+ mInstaller = null;
+ }
+
+ public void testGetAppSize() throws Exception {
+ final PackageManager pm = getContext().getPackageManager();
+ for (ApplicationInfo app : pm.getInstalledApplications(0)) {
+ final int userId = UserHandle.getUserId(app.uid);
+ final int appId = UserHandle.getAppId(app.uid);
+
+ final String[] packageNames = pm.getPackagesForUid(app.uid);
+ final long[] ceDataInodes = new long[packageNames.length];
+ final String[] codePaths = new String[packageNames.length];
+
+ for (int i = 0; i < packageNames.length; i++) {
+ final ApplicationInfo info = pm.getApplicationInfo(packageNames[i], 0);
+ codePaths[i] = info.getCodePath();
+ }
+
+ final PackageStats stats = new PackageStats(app.packageName);
+ final PackageStats quotaStats = new PackageStats(app.packageName);
+
+ mManual.start();
+ mInstaller.getAppSize(app.volumeUuid, packageNames, userId, 0,
+ appId, ceDataInodes, codePaths, stats);
+ mManual.stop();
+
+ mQuota.start();
+ mInstaller.getAppSize(app.volumeUuid, packageNames, userId, Installer.FLAG_USE_QUOTA,
+ appId, ceDataInodes, codePaths, quotaStats);
+ mQuota.stop();
+
+ checkEquals(Arrays.toString(packageNames) + " UID=" + app.uid, stats, quotaStats);
+ }
+ }
+
+ public void testGetUserSize() throws Exception {
+ int[] appIds = null;
+
+ final PackageManager pm = getContext().getPackageManager();
+ for (ApplicationInfo app : pm.getInstalledApplications(0)) {
+ final int appId = UserHandle.getAppId(app.uid);
+ if (!ArrayUtils.contains(appIds, appId)) {
+ appIds = ArrayUtils.appendInt(appIds, appId);
+ }
+ }
+
+ final PackageStats stats = new PackageStats("android");
+ final PackageStats quotaStats = new PackageStats("android");
+
+ mManual.start();
+ mInstaller.getUserSize(null, UserHandle.USER_SYSTEM, 0,
+ appIds, stats);
+ mManual.stop();
+
+ mQuota.start();
+ mInstaller.getUserSize(null, UserHandle.USER_SYSTEM, Installer.FLAG_USE_QUOTA,
+ appIds, quotaStats);
+ mQuota.stop();
+
+ checkEquals(Arrays.toString(appIds), stats, quotaStats);
+ }
+
+ public void testGetExternalSize() throws Exception {
+ mManual.start();
+ final long[] stats = mInstaller.getExternalSize(null, UserHandle.USER_SYSTEM, 0);
+ mManual.stop();
+
+ mQuota.start();
+ final long[] quotaStats = mInstaller.getExternalSize(null, UserHandle.USER_SYSTEM,
+ Installer.FLAG_USE_QUOTA);
+ mQuota.stop();
+
+ for (int i = 0; i < stats.length; i++) {
+ checkEquals("#" + i, stats[i], quotaStats[i]);
+ }
+ }
+
+ private static void checkEquals(String msg, PackageStats a, PackageStats b) {
+ checkEquals(msg + " codeSize", a.codeSize, b.codeSize);
+ checkEquals(msg + " dataSize", a.dataSize, b.dataSize);
+ checkEquals(msg + " cacheSize", a.cacheSize, b.cacheSize);
+ checkEquals(msg + " externalCodeSize", a.externalCodeSize, b.externalCodeSize);
+ checkEquals(msg + " externalDataSize", a.externalDataSize, b.externalDataSize);
+ checkEquals(msg + " externalCacheSize", a.externalCacheSize, b.externalCacheSize);
+ }
+
+ private static void checkEquals(String msg, long expected, long actual) {
+ if (expected != actual) {
+ Log.e(TAG, msg + " expected " + expected + " actual " + actual);
+ }
+ }
+}
diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
index 97bcaf0..74c1ca5 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
@@ -1292,43 +1292,7 @@
/* activity =*/ null, /* flags */ 0), getCallingUser());
});
- // Make sure floating shortcuts don't match with an activity.
- // At this point, s1 is dynamic and pinned, so it still has a target activity.
- runWithCaller(LAUNCHER_1, USER_0, () -> {
- assertWith(mLauncherApps.getShortcuts(buildQuery(
- /* time =*/ 0,
- CALLING_PACKAGE_2,
- /* activity =*/ new ComponentName(CALLING_PACKAGE_2,
- ShortcutActivity2.class.getName()),
- ShortcutQuery.FLAG_GET_PINNED),
- getCallingUser()))
- .haveIds("s3")
- .areAllPinned()
- .areAllDynamic()
- .areAllWithActivity(new ComponentName(CALLING_PACKAGE_2,
- ShortcutActivity2.class.getName()));
- });
-
- // Now remove as a dynamic, making it floating.
- runWithCaller(CALLING_PACKAGE_2, USER_0, () -> {
- mManager.removeDynamicShortcuts(list("s3"));
- assertWith(mManager.getPinnedShortcuts())
- .selectFloating()
- .areAllWithNoActivity();
- });
-
- runWithCaller(LAUNCHER_1, USER_0, () -> {
- // This shouldn't match now.
- assertWith(mLauncherApps.getShortcuts(buildQuery(
- /* time =*/ 0,
- CALLING_PACKAGE_2,
- /* activity =*/ new ComponentName(CALLING_PACKAGE_2,
- ShortcutActivity2.class.getName()),
- ShortcutQuery.FLAG_GET_PINNED),
- getCallingUser()))
- .isEmpty();
- });
-
+ // TODO More tests: pinned but dynamic.
}
public void testGetShortcuts_shortcutKinds() throws Exception {
diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java
index 7486858..d25923c 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java
@@ -1052,7 +1052,7 @@
assertEquals(CALLING_PACKAGE_1, si.getPackage());
assertEquals("id", si.getId());
- assertNull(si.getActivity()); // It's now floating, so no target activity.
+ assertEquals(ShortcutActivity2.class.getName(), si.getActivity().getClassName());
assertEquals(null, si.getIcon());
assertEquals("title", si.getTitle());
assertEquals("text", si.getText());
@@ -1116,7 +1116,7 @@
assertEquals(CALLING_PACKAGE_1, si.getPackage());
assertEquals("id", si.getId());
- assertNull(si.getActivity()); // It's now floating, so no target activity.
+ assertEquals(ShortcutActivity2.class.getName(), si.getActivity().getClassName());
assertEquals(null, si.getIcon());
assertEquals(10, si.getTitleResId());
assertEquals("r10", si.getTitleResName());
diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest8.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest8.java
index fbf0ed2..bcd72fc 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest8.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest8.java
@@ -38,6 +38,7 @@
import android.os.UserHandle;
import android.test.MoreAsserts;
import android.test.suitebuilder.annotation.SmallTest;
+import android.util.Log;
import android.util.Pair;
import com.android.frameworks.servicestests.R;
@@ -227,8 +228,9 @@
private void assertPinItemRequest(PinItemRequest actualRequest) {
assertNotNull(actualRequest);
-
assertEquals(PinItemRequest.REQUEST_TYPE_SHORTCUT, actualRequest.getRequestType());
+
+ Log.i(TAG, "Requested shortcut: " + actualRequest.getShortcutInfo().toInsecureString());
}
/**
@@ -243,9 +245,16 @@
final Icon res32x32 = Icon.createWithResource(getTestContext(), R.drawable.black_32x32);
runWithCaller(CALLING_PACKAGE_1, USER_P0, () -> {
- ShortcutInfo s1 = makeShortcutWithIcon("s1", res32x32);
+ /// Create a shortcut with no target activity.
+ final ShortcutInfo.Builder b = new ShortcutInfo.Builder(mClientContext, "s1")
+ .setShortLabel("Title-" + "s1")
+ .setIcon(res32x32)
+ .setIntent(makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class));
+ final ShortcutInfo s = b.build();
- assertTrue(mManager.requestPinShortcut(s1,
+ assertNull(s.getActivity());
+
+ assertTrue(mManager.requestPinShortcut(s,
resultIntent == null ? null : resultIntent.getIntentSender()));
verify(mServiceContext, times(0)).sendIntentSender(any(IntentSender.class));
@@ -271,6 +280,7 @@
assertWith(request.getShortcutInfo())
.haveIds("s1")
.areAllOrphan()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, MAIN_ACTIVITY_CLASS))
.areAllWithNoIntent();
assertAllHaveIcon(list(request.getShortcutInfo()));
@@ -295,6 +305,7 @@
.areAllNotDynamic()
.areAllEnabled()
.areAllPinned()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, MAIN_ACTIVITY_CLASS))
.areAllWithIntent();
});
}
@@ -310,6 +321,145 @@
checkRequestPinShortcut(resultIntent);
}
+ public void testRequestPinShortcut_explicitTargetActivity() {
+ setDefaultLauncher(USER_0, mMainActivityFetcher.apply(LAUNCHER_1, USER_0));
+ setDefaultLauncher(USER_10, mMainActivityFetcher.apply(LAUNCHER_2, USER_10));
+
+ runWithCaller(CALLING_PACKAGE_1, USER_P0, () -> {
+ ShortcutInfo s1 = makeShortcutWithActivity("s1",
+ new ComponentName(CALLING_PACKAGE_1, "different_activity"));
+
+ assertTrue(mManager.requestPinShortcut(s1, null));
+
+ verify(mServiceContext, times(0)).sendIntentSender(any(IntentSender.class));
+
+ // Shortcut shouldn't be registered yet.
+ assertWith(getCallerShortcuts())
+ .isEmpty();
+ });
+
+ runWithCaller(LAUNCHER_1, USER_0, () -> {
+ // Check the intent passed to startActivityAsUser().
+ final ArgumentCaptor<Intent> intent = ArgumentCaptor.forClass(Intent.class);
+
+ verify(mServiceContext).startActivityAsUser(intent.capture(), eq(HANDLE_USER_0));
+
+ assertPinItemRequestIntent(intent.getValue(), mInjectedClientPackage);
+
+ // Check the request object.
+ final PinItemRequest request = mLauncherApps.getPinItemRequest(intent.getValue());
+
+ assertPinItemRequest(request);
+
+ assertWith(request.getShortcutInfo())
+ .haveIds("s1")
+ .areAllOrphan()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "different_activity"))
+ .areAllWithNoIntent();
+
+ // Accept the request.
+ assertForLauncherCallbackNoThrow(mLauncherApps,
+ () -> assertTrue(request.accept()))
+ .assertCallbackCalledForPackageAndUser(CALLING_PACKAGE_1, HANDLE_USER_P0)
+ .haveIds("s1");
+ });
+
+ verify(mServiceContext, times(1)).sendIntentSender(eq(null));
+
+ runWithCaller(CALLING_PACKAGE_1, USER_P0, () -> {
+ assertWith(getCallerShortcuts())
+ .haveIds("s1")
+ .areAllNotDynamic()
+ .areAllEnabled()
+ .areAllPinned()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "different_activity"))
+ .areAllWithIntent();
+ });
+ }
+
+ public void testRequestPinShortcut_wrongTargetActivity() {
+ setDefaultLauncher(USER_0, mMainActivityFetcher.apply(LAUNCHER_1, USER_0));
+
+ runWithCaller(CALLING_PACKAGE_1, USER_P0, () -> {
+ // Create dynamic shortcut
+ ShortcutInfo s1 = makeShortcutWithActivity("s1",
+ new ComponentName("wrong_package", "different_activity"));
+
+ assertExpectException(IllegalStateException.class, "not belong to package", () -> {
+ assertTrue(mManager.requestPinShortcut(s1, /* resultIntent=*/ null));
+ });
+
+ verify(mServiceContext, times(0)).sendIntentSender(any(IntentSender.class));
+ verify(mServiceContext, times(0)).startActivityAsUser(
+ any(Intent.class), any(UserHandle.class));
+ });
+ }
+
+ public void testRequestPinShortcut_noTargetActivity_noMainActivity() {
+ setDefaultLauncher(USER_0, mMainActivityFetcher.apply(LAUNCHER_1, USER_0));
+ setDefaultLauncher(USER_10, mMainActivityFetcher.apply(LAUNCHER_2, USER_10));
+
+ runWithCaller(CALLING_PACKAGE_1, USER_P0, () -> {
+ /// Create a shortcut with no target activity.
+ final ShortcutInfo.Builder b = new ShortcutInfo.Builder(mClientContext, "s1")
+ .setShortLabel("Title-" + "s1")
+ .setIntent(makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class));
+ final ShortcutInfo s = b.build();
+
+ assertNull(s.getActivity());
+
+ // Caller has no main activity.
+ mMainActivityFetcher = (packageName, userId) -> null;
+
+ assertTrue(mManager.requestPinShortcut(s, null));
+
+ verify(mServiceContext, times(0)).sendIntentSender(any(IntentSender.class));
+
+ // Shortcut shouldn't be registered yet.
+ assertWith(getCallerShortcuts())
+ .isEmpty();
+ });
+
+ runWithCaller(LAUNCHER_1, USER_0, () -> {
+ // Check the intent passed to startActivityAsUser().
+ final ArgumentCaptor<Intent> intent = ArgumentCaptor.forClass(Intent.class);
+
+ verify(mServiceContext).startActivityAsUser(intent.capture(), eq(HANDLE_USER_0));
+
+ assertPinItemRequestIntent(intent.getValue(), mInjectedClientPackage);
+
+ // Check the request object.
+ final PinItemRequest request = mLauncherApps.getPinItemRequest(intent.getValue());
+
+ assertPinItemRequest(request);
+
+ assertWith(request.getShortcutInfo())
+ .haveIds("s1")
+ .areAllOrphan()
+ .areAllWithNoActivity() // Activity is not set; expected.
+ .areAllWithNoIntent();
+
+ // Accept the request.
+ assertForLauncherCallbackNoThrow(mLauncherApps,
+ () -> assertTrue(request.accept()))
+ .assertCallbackCalledForPackageAndUser(CALLING_PACKAGE_1, HANDLE_USER_P0)
+ .haveIds("s1");
+ });
+
+ verify(mServiceContext, times(1)).sendIntentSender(eq(null));
+
+ runWithCaller(CALLING_PACKAGE_1, USER_P0, () -> {
+ assertWith(getCallerShortcuts())
+ .haveIds("s1")
+ .areAllNotDynamic()
+ .areAllEnabled()
+ .areAllPinned()
+ .areAllWithNoActivity() // Activity is not set; expected.
+ .areAllWithIntent();
+ });
+
+ }
+
public void testRequestPinShortcut_dynamicExists() {
setDefaultLauncher(USER_0, mMainActivityFetcher.apply(LAUNCHER_1, USER_0));
@@ -328,6 +478,7 @@
assertWith(getCallerShortcuts())
.haveIds("s1")
.areAllDynamic()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllNotPinned();
});
@@ -348,6 +499,7 @@
.haveIds("s1")
.areAllDynamic()
.areAllNotPinned()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllWithNoIntent();
assertAllHaveIcon(list(request.getShortcutInfo()));
@@ -361,6 +513,7 @@
.haveIds("s1")
.areAllDynamic()
.areAllEnabled()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllPinned();
});
}
@@ -379,6 +532,8 @@
assertWith(getCallerShortcuts())
.haveIds("ms1")
.areAllManifest()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
.areAllNotPinned();
});
@@ -399,6 +554,8 @@
.haveIds("ms1")
.areAllManifest()
.areAllNotPinned()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
.areAllWithNoIntent();
assertAllHaveIcon(list(request.getShortcutInfo()));
@@ -412,6 +569,8 @@
.haveIds("ms1")
.areAllManifest()
.areAllEnabled()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
.areAllPinned();
});
}
@@ -431,6 +590,7 @@
assertWith(getCallerShortcuts())
.haveIds("s1")
.areAllDynamic()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllPinned();
assertTrue(mManager.requestPinShortcut(makeShortcutIdOnly("s1"),
@@ -456,6 +616,8 @@
assertWith(getCallerShortcuts())
.haveIds("ms1")
.areAllManifest()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
.areAllPinned();
assertTrue(mManager.requestPinShortcut(makeShortcutIdOnly("ms1"),
@@ -483,6 +645,7 @@
.haveIds("s1")
.areAllNotDynamic()
.areAllEnabled()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllPinned();
assertTrue(mManager.requestPinShortcut(makeShortcutIdOnly("s1"),
@@ -511,6 +674,7 @@
.haveIds("s1")
.areAllNotDynamic()
.areAllDisabled()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllPinned();
assertExpectException(IllegalArgumentException.class, "exists but disabled", () -> {
@@ -541,6 +705,8 @@
.haveIds("ms1")
.areAllNotManifest()
.areAllDisabled()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
.areAllPinned();
assertExpectException(IllegalArgumentException.class, "exists but disabled", () -> {
@@ -570,6 +736,7 @@
assertWith(getCallerShortcuts())
.haveIds("s1")
.areAllDynamic()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllPinned();
// The shortcut is already pinned, but not by the current launcher, so it'll still
@@ -597,6 +764,7 @@
.haveIds("s1")
.areAllDynamic()
.areAllNotPinned() // Note it's not pinned by this launcher.
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllWithNoIntent();
// Accept the request.
@@ -608,6 +776,7 @@
.haveIds("s1")
.areAllDynamic()
.areAllEnabled()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllPinned();
});
}
@@ -629,6 +798,8 @@
assertWith(getCallerShortcuts())
.haveIds("ms1")
.areAllManifest()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
.areAllPinned();
// The shortcut is already pinned, but not by the current launcher, so it'll still
@@ -656,6 +827,8 @@
.haveIds("ms1")
.areAllManifest()
.areAllNotPinned() // Note it's not pinned by this launcher.
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
.areAllWithNoIntent();
// Accept the request.
@@ -667,6 +840,8 @@
.haveIds("ms1")
.areAllManifest()
.areAllEnabled()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
.areAllPinned();
});
}
@@ -710,6 +885,7 @@
.haveIds("s1")
.areAllDynamic()
.areAllNotPinned()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllWithNoIntent();
// Accept the request.
@@ -719,6 +895,7 @@
.haveIds("s1", "s2")
.areAllDynamic()
.areAllEnabled()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllPinned();
});
@@ -727,6 +904,7 @@
.haveIds("s1", "s2")
.areAllDynamic()
.areAllEnabled()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllPinned();
});
}
@@ -752,6 +930,7 @@
assertWith(getCallerShortcuts())
.haveIds("s1")
.areAllDynamic()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllNotPinned();
});
@@ -772,6 +951,7 @@
.haveIds("s1")
.areAllDynamic()
.areAllNotPinned()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllWithNoIntent();
assertAllHaveIcon(list(request.getShortcutInfo()));
@@ -786,6 +966,7 @@
.areAllDynamic()
.areAllEnabled()
.areAllPinned()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.forShortcutWithId("s1", (si) -> {
// Still the original title.
assertEquals("Title-s1", si.getShortLabel());
@@ -810,6 +991,8 @@
assertWith(getCallerShortcuts())
.haveIds("ms1")
.areAllManifest()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
.areAllNotPinned();
});
@@ -830,6 +1013,8 @@
.haveIds("ms1")
.areAllManifest()
.areAllNotPinned()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
.areAllWithNoIntent();
assertAllHaveIcon(list(request.getShortcutInfo()));
@@ -844,6 +1029,8 @@
.areAllManifest()
.areAllEnabled()
.areAllPinned()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
.forShortcutWithId("ms1", (si) -> {
// Still the original title.
// Title should be something like:
@@ -893,6 +1080,7 @@
.haveIds("s1")
.areAllDynamic()
.areAllNotPinned()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllWithNoIntent();
// Accept the request -> should fail.
@@ -950,9 +1138,9 @@
.haveIds("s1")
.areAllDynamic()
.areAllNotPinned()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllWithNoIntent();
- // Accept the request -> should fail.
assertTrue(request.accept());
});
@@ -1004,6 +1192,8 @@
.haveIds("ms1")
.areAllManifest()
.areAllNotPinned()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
.areAllWithNoIntent();
// Accept the request -> should fail.
@@ -1059,10 +1249,11 @@
.haveIds("ms1")
.areAllManifest()
.areAllNotPinned()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
.areAllWithNoIntent();
- // Accept the request -> should fail.
assertTrue(request.accept());
});
@@ -1071,6 +1262,9 @@
.haveIds("ms1")
.areAllMutable() // Note it's no longer immutable.
.areAllFloating()
+
+ // Note it's the activity from makeShortcutWithShortLabel().
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.forShortcutWithId("ms1", si -> {
assertEquals("new", si.getShortLabel());
});
@@ -1104,6 +1298,7 @@
mManager.disableShortcuts(list("s1"));
assertWith(getCallerShortcuts())
.haveIds("s1")
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllDisabled();
});
@@ -1125,6 +1320,7 @@
.haveIds("s1")
.areAllDynamic()
.areAllNotPinned()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllWithNoIntent();
// Accept the request -> should fail.
@@ -1144,6 +1340,7 @@
runWithCaller(CALLING_PACKAGE_1, USER_P0, () -> {
assertWith(getCallerShortcuts())
.haveIds("s1")
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
.areAllDisabled();
});
}
@@ -1174,6 +1371,8 @@
publishManifestShortcutsAsCaller(R.xml.shortcut_0);
assertWith(getCallerShortcuts())
.haveIds("ms1")
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
.areAllDisabled();
});
@@ -1195,6 +1394,8 @@
.haveIds("ms1")
.areAllManifest()
.areAllNotPinned()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
.areAllWithNoIntent();
// Accept the request -> should fail.
@@ -1214,6 +1415,8 @@
runWithCaller(CALLING_PACKAGE_1, USER_P0, () -> {
assertWith(getCallerShortcuts())
.haveIds("ms1")
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
.areAllDisabled();
});
}
diff --git a/services/tests/servicestests/src/com/android/server/wm/AppWindowContainerControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/AppWindowContainerControllerTests.java
new file mode 100644
index 0000000..7f1c273
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/wm/AppWindowContainerControllerTests.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.server.wm;
+
+import org.junit.Test;
+
+import android.os.Binder;
+import android.os.IBinder;
+import android.platform.test.annotations.Presubmit;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.view.IApplicationToken;
+
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
+import static android.content.res.Configuration.EMPTY;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+/**
+ * Test class for {@link AppWindowContainerController}.
+ *
+ * Build/Install/Run:
+ * bit FrameworksServicesTests:com.android.server.wm.AppWindowContainerControllerTests
+ */
+@SmallTest
+@Presubmit
+@org.junit.runner.RunWith(AndroidJUnit4.class)
+public class AppWindowContainerControllerTests extends WindowTestsBase {
+
+ @Test
+ public void testRemoveContainer() throws Exception {
+ final TestAppWindowContainerController controller = createAppWindowController();
+
+ // Assert token was added to display.
+ assertNotNull(sDisplayContent.getWindowToken(controller.mToken.asBinder()));
+ // Assert that the container was created and linked.
+ assertNotNull(controller.mContainer);
+
+ controller.removeContainer(sDisplayContent.getDisplayId());
+
+ // Assert token was remove from display.
+ assertNull(sDisplayContent.getWindowToken(controller.mToken.asBinder()));
+ // Assert that the container was removed.
+ assertNull(controller.mContainer);
+ }
+
+ @Test
+ public void testSetOrientation() throws Exception {
+ final TestAppWindowContainerController controller = createAppWindowController();
+
+ // Assert orientation is unspecified to start.
+ assertEquals(SCREEN_ORIENTATION_UNSPECIFIED, controller.getOrientation());
+
+ controller.setOrientation(SCREEN_ORIENTATION_LANDSCAPE, sDisplayContent.getDisplayId(),
+ EMPTY /* displayConfig */, false /* freezeScreenIfNeeded */);
+ assertEquals(SCREEN_ORIENTATION_LANDSCAPE, controller.getOrientation());
+
+ controller.removeContainer(sDisplayContent.getDisplayId());
+ // Assert orientation is unspecified to after container is removed.
+ assertEquals(SCREEN_ORIENTATION_UNSPECIFIED, controller.getOrientation());
+ }
+
+ private TestAppWindowContainerController createAppWindowController() {
+ final TaskStack stack = createTaskStackOnDisplay(sDisplayContent);
+ final TestTaskWindowContainerController taskController =
+ new TestTaskWindowContainerController(stack.mStackId);
+ final IApplicationToken token = new TestIApplicationToken();
+ return new TestAppWindowContainerController(taskController, token);
+ }
+
+ private class TestAppWindowContainerController extends AppWindowContainerController {
+
+ final IApplicationToken mToken;
+
+ TestAppWindowContainerController(TestTaskWindowContainerController taskController,
+ IApplicationToken token) {
+ super(taskController, token, null /* listener */, 0 /* index */,
+ SCREEN_ORIENTATION_UNSPECIFIED, true /* fullscreen */,
+ true /* showForAllUsers */, 0 /* configChanges */, false /* voiceInteraction */,
+ false /* launchTaskBehind */, false /* alwaysFocusable */,
+ 0 /* targetSdkVersion */, 0 /* rotationAnimationHint */,
+ 0 /* inputDispatchingTimeoutNanos */, sWm);
+ mToken = token;
+ }
+ }
+
+ private class TestIApplicationToken implements IApplicationToken {
+
+ private final Binder mBinder = new Binder();
+ @Override
+ public IBinder asBinder() {
+ return mBinder;
+ }
+ }
+}
diff --git a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
index 786c2bb..85931e8 100644
--- a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
@@ -19,6 +19,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
+import android.content.res.Configuration;
import android.hardware.display.DisplayManagerGlobal;
import android.platform.test.annotations.Presubmit;
import android.support.test.filters.SmallTest;
@@ -208,6 +209,10 @@
voiceInteractionWindow.removeImmediately();
}
+ /**
+ * This tests stack movement between displays and proper stack's, task's and app token's display
+ * container references updates.
+ */
@Test
public void testMoveStackBetweenDisplays() throws Exception {
// Create second display.
@@ -238,4 +243,28 @@
assertEquals(sDisplayContent, task.getDisplayContent());
assertEquals(sDisplayContent, token.getDisplayContent());
}
+
+ /**
+ * This tests override configuration updates for display content.
+ */
+ @Test
+ public void testDisplayOverrideConfigUpdate() throws Exception {
+ final int displayId = sDisplayContent.getDisplayId();
+ final Configuration currentOverrideConfig = sDisplayContent.getOverrideConfiguration();
+
+ // Create new, slightly changed override configuration and apply it to the display.
+ final Configuration newOverrideConfig = new Configuration(currentOverrideConfig);
+ newOverrideConfig.densityDpi += 120;
+ newOverrideConfig.fontScale += 0.3;
+
+ sWm.setNewDisplayOverrideConfiguration(newOverrideConfig, displayId);
+
+ // Check that override config is applied.
+ assertEquals(newOverrideConfig, sDisplayContent.getOverrideConfiguration());
+
+ // Check that global configuration is updated, as we've updated default display's config.
+ final Configuration globalConfig = sWm.mRoot.getConfiguration();
+ assertEquals(newOverrideConfig.densityDpi, globalConfig.densityDpi);
+ assertEquals(newOverrideConfig.fontScale, globalConfig.fontScale, 0.1 /* delta */);
+ }
}
diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotControllerTest.java b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotControllerTest.java
new file mode 100644
index 0000000..5dff997
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotControllerTest.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2016 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.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
+import static com.android.server.wm.AppTransition.TRANSIT_UNSET;
+import static junit.framework.Assert.assertEquals;
+
+import android.platform.test.annotations.Presubmit;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.util.ArraySet;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Test class for {@link TaskSnapshotController}.
+ *
+ * runtest frameworks-services -c com.android.server.wm.TaskSnapshotControllerTest
+ */
+@SmallTest
+@Presubmit
+@RunWith(AndroidJUnit4.class)
+public class TaskSnapshotControllerTest extends WindowTestsBase {
+
+ @Test
+ public void testGetClosingApps_closing() throws Exception {
+ final WindowState closingWindow = createWindow(null, FIRST_APPLICATION_WINDOW,
+ "closingWindow");
+ closingWindow.mAppToken.setVisibility(null, false /* visible */, TRANSIT_UNSET,
+ true /* performLayout */, false /* isVoiceInteraction */);
+ final ArraySet<AppWindowToken> closingApps = new ArraySet<>();
+ closingApps.add(closingWindow.mAppToken);
+ final ArraySet<Task> closingTasks = new ArraySet<>();
+ sWm.mTaskSnapshotController.getClosingTasks(closingApps, closingTasks);
+ assertEquals(1, closingTasks.size());
+ assertEquals(closingWindow.mAppToken.mTask, closingTasks.valueAt(0));
+ }
+
+ @Test
+ public void testGetClosingApps_notClosing() throws Exception {
+ final WindowState closingWindow = createWindow(null, FIRST_APPLICATION_WINDOW,
+ "closingWindow");
+ final WindowState openingWindow = createAppWindow(closingWindow.getTask(),
+ FIRST_APPLICATION_WINDOW, "openingWindow");
+ closingWindow.mAppToken.setVisibility(null, false /* visible */, TRANSIT_UNSET,
+ true /* performLayout */, false /* isVoiceInteraction */);
+ openingWindow.mAppToken.setVisibility(null, true /* visible */, TRANSIT_UNSET,
+ true /* performLayout */, false /* isVoiceInteraction */);
+ final ArraySet<AppWindowToken> closingApps = new ArraySet<>();
+ closingApps.add(closingWindow.mAppToken);
+ final ArraySet<Task> closingTasks = new ArraySet<>();
+ sWm.mTaskSnapshotController.getClosingTasks(closingApps, closingTasks);
+ assertEquals(0, closingTasks.size());
+ }
+}
diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java b/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java
index eca2500..1c69033 100644
--- a/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java
@@ -56,4 +56,20 @@
assertEquals(stack.mChildren.get(0), task2);
assertEquals(stack.mChildren.get(1), task1);
}
+
+ @Test
+ public void testStackRemoveImmediately() throws Exception {
+ final TaskStack stack = createTaskStackOnDisplay(sDisplayContent);
+ final Task task = createTaskInStack(stack, 0 /* userId */);
+ assertEquals(stack, task.mStack);
+ assertTrue(sDisplayContent.mDimLayerController.hasDimLayerUser(stack));
+ assertTrue(sDisplayContent.mDimLayerController.hasDimLayerUser(task));
+
+ // Remove stack and check if its child is also removed.
+ stack.removeImmediately();
+ assertNull(stack.getDisplayContent());
+ assertNull(task.mStack);
+ assertFalse(sDisplayContent.mDimLayerController.hasDimLayerUser(stack));
+ assertFalse(sDisplayContent.mDimLayerController.hasDimLayerUser(task));
+ }
}
diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskWindowContainerControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/TaskWindowContainerControllerTests.java
new file mode 100644
index 0000000..0dd31c3
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/wm/TaskWindowContainerControllerTests.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.server.wm;
+
+import org.junit.Test;
+
+import android.platform.test.annotations.Presubmit;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+/**
+ * Test class for {@link TaskWindowContainerController}.
+ *
+ * Build/Install/Run:
+ * bit FrameworksServicesTests:com.android.server.wm.TaskWindowContainerControllerTests
+ */
+@SmallTest
+@Presubmit
+@org.junit.runner.RunWith(AndroidJUnit4.class)
+public class TaskWindowContainerControllerTests extends WindowTestsBase {
+// TODO Add tests once StackWindowContainerController is created.
+ @Test
+ public void dummyTest() throws Exception {}
+}
diff --git a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java
index 1853a65..12e7a15 100644
--- a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java
+++ b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java
@@ -16,29 +16,6 @@
package com.android.server.wm;
-import com.android.internal.policy.IKeyguardDismissCallback;
-import com.android.internal.policy.IShortcutService;
-import com.android.server.input.InputManagerService;
-
-import android.annotation.Nullable;
-import android.content.Context;
-import android.content.res.CompatibilityInfo;
-import android.content.res.Configuration;
-import android.graphics.Rect;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.util.Log;
-import android.view.Display;
-import android.view.IWindowManager;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.WindowManager;
-import android.view.WindowManagerPolicy;
-import android.view.animation.Animation;
-
-import java.io.PrintWriter;
-
import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
@@ -62,8 +39,8 @@
import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL;
import static android.view.WindowManager.LayoutParams.TYPE_PHONE;
import static android.view.WindowManager.LayoutParams.TYPE_POINTER;
-import static android.view.WindowManager.LayoutParams.TYPE_PRIORITY_PHONE;
import static android.view.WindowManager.LayoutParams.TYPE_PRESENTATION;
+import static android.view.WindowManager.LayoutParams.TYPE_PRIORITY_PHONE;
import static android.view.WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION;
import static android.view.WindowManager.LayoutParams.TYPE_QS_DIALOG;
import static android.view.WindowManager.LayoutParams.TYPE_SCREENSHOT;
@@ -81,9 +58,30 @@
import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION_STARTING;
import static android.view.WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
-
import static org.mockito.Mockito.mock;
+import android.annotation.Nullable;
+import android.content.Context;
+import android.content.res.CompatibilityInfo;
+import android.content.res.Configuration;
+import android.graphics.Rect;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.util.Log;
+import android.view.Display;
+import android.view.IWindowManager;
+import android.view.KeyEvent;
+import android.view.WindowManager;
+import android.view.WindowManagerPolicy;
+import android.view.animation.Animation;
+
+import com.android.internal.policy.IKeyguardDismissCallback;
+import com.android.internal.policy.IShortcutService;
+import com.android.server.input.InputManagerService;
+
+import java.io.PrintWriter;
+
class TestWindowManagerPolicy implements WindowManagerPolicy {
private static final String TAG = "TestWindowManagerPolicy";
@@ -308,18 +306,13 @@
}
@Override
- public View addStartingWindow(IBinder appToken, String packageName, int theme,
+ public StartingSurface addSplashScreen(IBinder appToken, String packageName, int theme,
CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, int icon,
int logo, int windowFlags, Configuration overrideConfig) {
return null;
}
@Override
- public void removeStartingWindow(IBinder appToken, View window) {
-
- }
-
- @Override
public int prepareAddWindowLw(WindowState win,
WindowManager.LayoutParams attrs) {
return 0;
diff --git a/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java b/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java
index 07f65bd..6129198 100644
--- a/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java
@@ -19,7 +19,6 @@
import static junit.framework.Assert.assertTrue;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.mock;
import android.app.ActivityManagerInternal;
import android.content.Context;
@@ -27,7 +26,6 @@
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
-import android.view.IApplicationToken;
import com.android.server.LocalServices;
@@ -114,7 +112,6 @@
}
private AppWindowToken createAppToken() {
- return new AppWindowToken(mWm, mock(IApplicationToken.class), false,
- mWm.getDefaultDisplayContentLocked());
+ return new AppWindowToken(mWm, null, false, mWm.getDefaultDisplayContentLocked());
}
}
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowContainerControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowContainerControllerTests.java
new file mode 100644
index 0000000..956735c
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowContainerControllerTests.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2016 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 org.junit.Test;
+import org.junit.runner.RunWith;
+
+import android.platform.test.annotations.Presubmit;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Test class for {@link WindowContainerController}.
+ *
+ * Build/Install/Run:
+ * bit FrameworksServicesTests:com.android.server.wm.WindowContainerControllerTests
+ */
+@SmallTest
+@Presubmit
+@org.junit.runner.RunWith(AndroidJUnit4.class)
+public class WindowContainerControllerTests extends WindowTestsBase {
+
+ @Test
+ public void testCreation() throws Exception {
+ final WindowContainerController controller = new WindowContainerController(null, sWm);
+ final WindowContainer container = new WindowContainer();
+
+ container.setController(controller);
+ assertEquals(controller, container.getController());
+ assertEquals(controller.mContainer, container);
+ }
+
+ @Test
+ public void testSetContainer() throws Exception {
+ final WindowContainerController controller = new WindowContainerController(null, sWm);
+ final WindowContainer container = new WindowContainer();
+
+ controller.setContainer(container);
+ assertEquals(controller.mContainer, container);
+
+ // Assert we can't change the container to another one once set
+ boolean gotException = false;
+ try {
+ controller.setContainer(new WindowContainer());
+ } catch (IllegalArgumentException e) {
+ gotException = true;
+ }
+ assertTrue(gotException);
+
+ // Assert that we can set the container to null.
+ controller.setContainer(null);
+ assertNull(controller.mContainer);
+ }
+
+ @Test
+ public void testRemoveContainer() throws Exception {
+ final WindowContainerController controller = new WindowContainerController(null, sWm);
+ final WindowContainer container = new WindowContainer();
+
+ controller.setContainer(container);
+ assertEquals(controller.mContainer, container);
+
+ controller.removeContainer();
+ assertNull(controller.mContainer);
+ }
+}
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowContainerTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowContainerTests.java
index 7277ba4..b57329c 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowContainerTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowContainerTests.java
@@ -52,7 +52,7 @@
@SmallTest
@Presubmit
@RunWith(AndroidJUnit4.class)
-public class WindowContainerTests {
+public class WindowContainerTests extends WindowTestsBase {
@Test
public void testCreation() throws Exception {
@@ -192,6 +192,44 @@
}
@Test
+ public void testRemoveImmediately_WithController() throws Exception {
+ final WindowContainer container = new WindowContainer();
+ final WindowContainerController controller = new WindowContainerController(null, sWm);
+
+ container.setController(controller);
+ assertEquals(controller, container.getController());
+ assertEquals(container, controller.mContainer);
+
+ container.removeImmediately();
+ assertNull(container.getController());
+ assertNull(controller.mContainer);
+ }
+
+ @Test
+ public void testSetController() throws Exception {
+ final WindowContainerController controller = new WindowContainerController(null, sWm);
+ final WindowContainer container = new WindowContainer();
+
+ container.setController(controller);
+ assertEquals(controller, container.getController());
+ assertEquals(container, controller.mContainer);
+
+ // Assert we can't change the controller to another one once set
+ boolean gotException = false;
+ try {
+ container.setController(new WindowContainerController(null, sWm));
+ } catch (IllegalArgumentException e) {
+ gotException = true;
+ }
+ assertTrue(gotException);
+
+ // Assert that we can set the controller to null.
+ container.setController(null);
+ assertNull(container.getController());
+ assertNull(controller.mContainer);
+ }
+
+ @Test
public void testPositionChildAt() throws Exception {
final TestWindowContainerBuilder builder = new TestWindowContainerBuilder();
final TestWindowContainer root = builder.setLayer(0).build();
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java
index ef6ee32..466da94 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java
@@ -76,7 +76,7 @@
final Rect mInsetBounds = new Rect();
boolean mFullscreenForTest = true;
TaskWithBounds(Rect bounds) {
- super(0, mStubStack, 0, sWm, null, null, false, 0, false);
+ super(0, mStubStack, 0, sWm, null, null, false, 0, false, null);
mBounds = bounds;
}
@Override
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java
index 3985687..466bd67 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java
@@ -27,6 +27,7 @@
import static android.app.ActivityManager.StackId.FIRST_DYNAMIC_STACK_ID;
import static android.app.AppOpsManager.OP_NONE;
+import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
import static android.content.res.Configuration.EMPTY;
import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
@@ -39,12 +40,13 @@
import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
+import static com.android.server.wm.WindowContainer.POSITION_TOP;
import static org.mockito.Mockito.mock;
/**
* Common base class for window manager unit test classes.
*/
-public class WindowTestsBase {
+class WindowTestsBase {
static WindowManagerService sWm = null;
private final IWindow mIWindow = new TestIWindow();
private final Session mMockSession = mock(Session.class);
@@ -52,17 +54,17 @@
private static int sNextTaskId = 0;
private static boolean sOneTimeSetupDone = false;
- protected static DisplayContent sDisplayContent;
- protected static WindowLayersController sLayersController;
- protected static WindowState sWallpaperWindow;
- protected static WindowState sImeWindow;
- protected static WindowState sImeDialogWindow;
- protected static WindowState sStatusBarWindow;
- protected static WindowState sDockedDividerWindow;
- protected static WindowState sNavBarWindow;
- protected static WindowState sAppWindow;
- protected static WindowState sChildAppWindowAbove;
- protected static WindowState sChildAppWindowBelow;
+ static DisplayContent sDisplayContent;
+ static WindowLayersController sLayersController;
+ static WindowState sWallpaperWindow;
+ static WindowState sImeWindow;
+ static WindowState sImeDialogWindow;
+ static WindowState sStatusBarWindow;
+ static WindowState sDockedDividerWindow;
+ static WindowState sNavBarWindow;
+ static WindowState sAppWindow;
+ static WindowState sChildAppWindowAbove;
+ static WindowState sChildAppWindowBelow;
@Before
public void setUp() throws Exception {
@@ -117,6 +119,12 @@
: createWindow(parent, type, parent.mToken, name);
}
+ WindowState createAppWindow(Task task, int type, String name) {
+ final AppWindowToken token = new TestAppWindowToken(sDisplayContent);
+ task.addChild(token, 0);
+ return createWindow(null, type, token, name);
+ }
+
WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name) {
final WindowToken token = createWindowToken(dc, type);
return createWindow(parent, type, token, name);
@@ -144,8 +152,8 @@
/**Creates a {@link Task} and adds it to the specified {@link TaskStack}. */
Task createTaskInStack(TaskStack stack, int userId) {
final Task newTask = new Task(sNextTaskId++, stack, userId, sWm, null, EMPTY, false, 0,
- false);
- stack.addTask(newTask, true);
+ false, null);
+ stack.addTask(newTask, POSITION_TOP);
return newTask;
}
@@ -192,4 +200,17 @@
return mChildren.getLast();
}
}
+
+ /**
+ * Used so we can gain access to some protected members of {@link TaskWindowContainerController}
+ * class.
+ */
+ class TestTaskWindowContainerController extends TaskWindowContainerController {
+
+ TestTaskWindowContainerController(int stackId) {
+ super(sNextTaskId++, stackId, 0 /* userId */, null /* bounds */,
+ EMPTY /* overrideConfig*/, RESIZE_MODE_UNRESIZEABLE, false /* homeTask*/,
+ false /* isOnTopLauncher */, true /* toTop*/, true /* showForAllUsers */);
+ }
+ }
}
diff --git a/services/tests/shortcutmanagerutils/src/com/android/server/pm/shortcutmanagertest/ShortcutManagerTestUtils.java b/services/tests/shortcutmanagerutils/src/com/android/server/pm/shortcutmanagertest/ShortcutManagerTestUtils.java
index a664f21..ea45bd1 100644
--- a/services/tests/shortcutmanagerutils/src/com/android/server/pm/shortcutmanagertest/ShortcutManagerTestUtils.java
+++ b/services/tests/shortcutmanagerutils/src/com/android/server/pm/shortcutmanagertest/ShortcutManagerTestUtils.java
@@ -925,7 +925,7 @@
}
public ShortcutListAsserter areAllWithActivity(ComponentName activity) {
- forAllShortcuts(s -> assertTrue("id=" + s.getId(), s.getActivity().equals(activity)));
+ forAllShortcuts(s -> assertEquals("id=" + s.getId(), activity, s.getActivity()));
return this;
}
diff --git a/services/usage/java/com/android/server/usage/StorageStatsService.java b/services/usage/java/com/android/server/usage/StorageStatsService.java
new file mode 100644
index 0000000..512a119
--- /dev/null
+++ b/services/usage/java/com/android/server/usage/StorageStatsService.java
@@ -0,0 +1,254 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.usage;
+
+import android.app.AppOpsManager;
+import android.app.usage.ExternalStorageStats;
+import android.app.usage.IStorageStatsManager;
+import android.app.usage.StorageStats;
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.PackageStats;
+import android.content.pm.UserInfo;
+import android.os.Binder;
+import android.os.Environment;
+import android.os.SystemProperties;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.os.storage.StorageManager;
+import android.os.storage.VolumeInfo;
+import android.util.Log;
+
+import com.android.internal.util.ArrayUtils;
+import com.android.server.SystemService;
+import com.android.server.pm.Installer;
+import com.android.server.pm.Installer.InstallerException;
+
+public class StorageStatsService extends IStorageStatsManager.Stub {
+ private static final String TAG = "StorageStatsService";
+
+ private static final String PROP_VERIFY_STORAGE = "fw.verify_storage";
+
+ // TODO: pivot all methods to manual mode when quota isn't supported
+
+ public static class Lifecycle extends SystemService {
+ private StorageStatsService mService;
+
+ public Lifecycle(Context context) {
+ super(context);
+ }
+
+ @Override
+ public void onStart() {
+ mService = new StorageStatsService(getContext());
+ publishBinderService(Context.STORAGE_STATS_SERVICE, mService);
+ }
+ }
+
+ private final Context mContext;
+ private final AppOpsManager mAppOps;
+ private final UserManager mUser;
+ private final PackageManager mPackage;
+ private final StorageManager mStorage;
+ private final Installer mInstaller;
+
+ public StorageStatsService(Context context) {
+ mContext = context;
+ mAppOps = context.getSystemService(AppOpsManager.class);
+ mUser = context.getSystemService(UserManager.class);
+ mPackage = context.getSystemService(PackageManager.class);
+ mStorage = context.getSystemService(StorageManager.class);
+ mInstaller = new Installer(context);
+ }
+
+ private void enforcePermission(int callingUid, String callingPackage) {
+ final int mode = mAppOps.checkOp(AppOpsManager.OP_GET_USAGE_STATS,
+ callingUid, callingPackage);
+ switch (mode) {
+ case AppOpsManager.MODE_ALLOWED:
+ return;
+ case AppOpsManager.MODE_DEFAULT:
+ mContext.enforceCallingPermission(
+ android.Manifest.permission.PACKAGE_USAGE_STATS, TAG);
+ default:
+ throw new SecurityException("Blocked by mode " + mode);
+ }
+ }
+
+ @Override
+ public long getTotalBytes(String volumeUuid, String callingPackage) {
+ enforcePermission(Binder.getCallingUid(), callingPackage);
+
+ if (volumeUuid == StorageManager.UUID_PRIVATE_INTERNAL) {
+ // TODO: round total size to nearest power of two
+ return mStorage.getPrimaryStorageSize();
+ } else {
+ final VolumeInfo vol = mStorage.findVolumeByUuid(volumeUuid);
+ return vol.disk.size;
+ }
+ }
+
+ @Override
+ public long getFreeBytes(String volumeUuid, String callingPackage) {
+ enforcePermission(Binder.getCallingUid(), callingPackage);
+
+ long cacheBytes = 0;
+ for (UserInfo user : mUser.getUsers()) {
+ final StorageStats stats = queryStatsForUser(volumeUuid, user.id, null);
+ cacheBytes += stats.cacheBytes;
+ }
+
+ if (volumeUuid == StorageManager.UUID_PRIVATE_INTERNAL) {
+ return Environment.getDataDirectory().getFreeSpace() + cacheBytes;
+ } else {
+ final VolumeInfo vol = mStorage.findVolumeByUuid(volumeUuid);
+ return vol.getPath().getFreeSpace() + cacheBytes;
+ }
+ }
+
+ @Override
+ public StorageStats queryStatsForUid(String volumeUuid, int uid, String callingPackage) {
+ enforcePermission(Binder.getCallingUid(), callingPackage);
+ if (UserHandle.getUserId(uid) != UserHandle.getCallingUserId()) {
+ mContext.enforceCallingOrSelfPermission(
+ android.Manifest.permission.INTERACT_ACROSS_USERS, TAG);
+ }
+
+ final int userId = UserHandle.getUserId(uid);
+ final int appId = UserHandle.getUserId(uid);
+
+ final String[] packageNames = mPackage.getPackagesForUid(uid);
+ final long[] ceDataInodes = new long[packageNames.length];
+ final String[] codePaths = new String[packageNames.length];
+
+ for (int i = 0; i < packageNames.length; i++) {
+ try {
+ codePaths[i] = mPackage.getApplicationInfoAsUser(packageNames[i], 0,
+ userId).getCodePath();
+ } catch (NameNotFoundException e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
+ final PackageStats stats = new PackageStats(TAG);
+ try {
+ mInstaller.getAppSize(volumeUuid, packageNames, userId, Installer.FLAG_USE_QUOTA,
+ appId, ceDataInodes, codePaths, stats);
+
+ if (SystemProperties.getBoolean(PROP_VERIFY_STORAGE, false)) {
+ final PackageStats manualStats = new PackageStats(TAG);
+ mInstaller.getAppSize(volumeUuid, packageNames, userId, 0,
+ appId, ceDataInodes, codePaths, manualStats);
+ checkEquals("UID " + uid, manualStats, stats);
+ }
+ } catch (InstallerException e) {
+ throw new IllegalStateException(e);
+ }
+ return translate(stats);
+ }
+
+ @Override
+ public StorageStats queryStatsForUser(String volumeUuid, int userId, String callingPackage) {
+ enforcePermission(Binder.getCallingUid(), callingPackage);
+ if (userId != UserHandle.getCallingUserId()) {
+ mContext.enforceCallingOrSelfPermission(
+ android.Manifest.permission.INTERACT_ACROSS_USERS, TAG);
+ }
+
+ int[] appIds = null;
+ for (ApplicationInfo app : mPackage.getInstalledApplicationsAsUser(0, userId)) {
+ final int appId = UserHandle.getAppId(app.uid);
+ if (!ArrayUtils.contains(appIds, appId)) {
+ appIds = ArrayUtils.appendInt(appIds, appId);
+ }
+ }
+
+ final PackageStats stats = new PackageStats(TAG);
+ try {
+ mInstaller.getUserSize(volumeUuid, userId, Installer.FLAG_USE_QUOTA, appIds, stats);
+
+ if (SystemProperties.getBoolean(PROP_VERIFY_STORAGE, false)) {
+ final PackageStats manualStats = new PackageStats(TAG);
+ mInstaller.getUserSize(volumeUuid, userId, 0, appIds, manualStats);
+ checkEquals("User " + userId, manualStats, stats);
+ }
+ } catch (InstallerException e) {
+ throw new IllegalStateException(e);
+ }
+ return translate(stats);
+ }
+
+ @Override
+ public ExternalStorageStats queryExternalStatsForUser(String volumeUuid, int userId,
+ String callingPackage) {
+ enforcePermission(Binder.getCallingUid(), callingPackage);
+ if (userId != UserHandle.getCallingUserId()) {
+ mContext.enforceCallingOrSelfPermission(
+ android.Manifest.permission.INTERACT_ACROSS_USERS, TAG);
+ }
+
+ final long[] stats;
+ try {
+ stats = mInstaller.getExternalSize(volumeUuid, userId, Installer.FLAG_USE_QUOTA);
+
+ if (SystemProperties.getBoolean(PROP_VERIFY_STORAGE, false)) {
+ final long[] manualStats = mInstaller.getExternalSize(volumeUuid, userId, 0);
+ checkEquals("External " + userId, manualStats, stats);
+ }
+ } catch (InstallerException e) {
+ throw new IllegalStateException(e);
+ }
+
+ final ExternalStorageStats res = new ExternalStorageStats();
+ res.totalBytes = stats[0];
+ res.audioBytes = stats[1];
+ res.videoBytes = stats[2];
+ res.imageBytes = stats[3];
+ return res;
+ }
+
+ private static void checkEquals(String msg, long[] a, long[] b) {
+ for (int i = 0; i < a.length; i++) {
+ checkEquals(msg + "[" + i + "]", a[i], b[i]);
+ }
+ }
+
+ private static void checkEquals(String msg, PackageStats a, PackageStats b) {
+ checkEquals(msg + " codeSize", a.codeSize, b.codeSize);
+ checkEquals(msg + " dataSize", a.dataSize, b.dataSize);
+ checkEquals(msg + " cacheSize", a.cacheSize, b.cacheSize);
+ checkEquals(msg + " externalCodeSize", a.externalCodeSize, b.externalCodeSize);
+ checkEquals(msg + " externalDataSize", a.externalDataSize, b.externalDataSize);
+ checkEquals(msg + " externalCacheSize", a.externalCacheSize, b.externalCacheSize);
+ }
+
+ private static void checkEquals(String msg, long expected, long actual) {
+ if (expected != actual) {
+ Log.e(TAG, msg + " expected " + expected + " actual " + actual);
+ }
+ }
+
+ private static StorageStats translate(PackageStats stats) {
+ final StorageStats res = new StorageStats();
+ res.codeBytes = stats.codeSize + stats.externalCodeSize;
+ res.dataBytes = stats.dataSize + stats.externalDataSize;
+ res.cacheBytes = stats.cacheSize + stats.externalCacheSize;
+ return res;
+ }
+}
diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java
index c69b7c2..b20384d 100644
--- a/telecomm/java/android/telecom/Call.java
+++ b/telecomm/java/android/telecom/Call.java
@@ -115,6 +115,13 @@
*/
public static final String AVAILABLE_PHONE_ACCOUNTS = "selectPhoneAccountAccounts";
+ /**
+ * Extra key used to indicate the time (in millis) when the last outgoing emergency call was
+ * made. This is used to identify potential emergency callbacks.
+ */
+ public static final String EXTRA_LAST_EMERGENCY_CALLBACK_TIME_MILLIS =
+ "android.telecom.extra.LAST_EMERGENCY_CALLBACK_TIME_MILLIS";
+
public static class Details {
/** Call can currently be put on hold or unheld. */
diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java
index 1bd5b1d..7158969 100644
--- a/test-runner/src/android/test/mock/MockPackageManager.java
+++ b/test-runner/src/android/test/mock/MockPackageManager.java
@@ -886,6 +886,12 @@
throw new UnsupportedOperationException();
}
+ /** @hide */
+ @Override
+ public void setApplicationCategoryHint(String packageName, int categoryHint) {
+ throw new UnsupportedOperationException();
+ }
+
/**
* @hide
*/
diff --git a/tests/UiBench/AndroidManifest.xml b/tests/UiBench/AndroidManifest.xml
index 29154aa..0681b61 100644
--- a/tests/UiBench/AndroidManifest.xml
+++ b/tests/UiBench/AndroidManifest.xml
@@ -76,6 +76,14 @@
</intent-filter>
</activity>
<activity
+ android:name=".ResizeHWLayerActivity"
+ android:label="General/Resize HW Layer" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="com.android.test.uibench.TEST" />
+ </intent-filter>
+ </activity>
+ <activity
android:name=".TrivialAnimationActivity"
android:label="General/Trivial Animation" >
<intent-filter>
diff --git a/tests/UiBench/src/com/android/test/uibench/ResizeHWLayerActivity.java b/tests/UiBench/src/com/android/test/uibench/ResizeHWLayerActivity.java
new file mode 100644
index 0000000..23a2713
--- /dev/null
+++ b/tests/UiBench/src/com/android/test/uibench/ResizeHWLayerActivity.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.test.uibench;
+
+import android.animation.PropertyValuesHolder;
+import android.animation.ValueAnimator;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.util.DisplayMetrics;
+import android.view.View;
+import android.view.ViewGroup.LayoutParams;
+import android.widget.FrameLayout;
+
+/**
+ * Tests resizing of a View backed by a hardware layer.
+ */
+public class ResizeHWLayerActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ DisplayMetrics metrics = getResources().getDisplayMetrics();
+ int width = metrics.widthPixels;
+ int height = metrics.heightPixels;
+ View child = new View(this);
+ child.setBackgroundColor(Color.BLUE);
+ child.setLayoutParams(new FrameLayout.LayoutParams(width, height));
+ child.setLayerType(View.LAYER_TYPE_HARDWARE, null);
+ PropertyValuesHolder pvhWidth = PropertyValuesHolder.ofInt("width", width, 1);
+ PropertyValuesHolder pvhHeight = PropertyValuesHolder.ofInt("height", height, 1);
+ final LayoutParams params = child.getLayoutParams();
+ ValueAnimator animator = ValueAnimator.ofPropertyValuesHolder(pvhWidth, pvhHeight);
+ animator.setRepeatMode(ValueAnimator.REVERSE);
+ animator.setRepeatCount(ValueAnimator.INFINITE);
+ animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator valueAnimator) {
+ params.width = (Integer)valueAnimator.getAnimatedValue("width");
+ params.height = (Integer)valueAnimator.getAnimatedValue("height");
+ child.requestLayout();
+ }
+ });
+ animator.start();
+ setContentView(child);
+ }
+}
diff --git a/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java b/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java
index 28a2cb3..4aeae70 100644
--- a/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java
+++ b/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java
@@ -43,26 +43,6 @@
@SmallTest
public void testMANAGE_APP_TOKENS() {
try {
- mWm.pauseKeyDispatching(null);
- fail("IWindowManager.pauseKeyDispatching did not throw SecurityException as"
- + " expected");
- } catch (SecurityException e) {
- // expected
- } catch (RemoteException e) {
- fail("Unexpected remote exception");
- }
-
- try {
- mWm.resumeKeyDispatching(null);
- fail("IWindowManager.resumeKeyDispatching did not throw SecurityException as"
- + " expected");
- } catch (SecurityException e) {
- // expected
- } catch (RemoteException e) {
- fail("Unexpected remote exception");
- }
-
- try {
mWm.setEventDispatching(true);
fail("IWindowManager.setEventDispatching did not throw SecurityException as"
+ " expected");
@@ -93,26 +73,6 @@
}
try {
- mWm.addAppToken(0, null, 0, 0, false, false, 0, false, false, false, 0, -1);
- fail("IWindowManager.addAppToken did not throw SecurityException as"
- + " expected");
- } catch (SecurityException e) {
- // expected
- } catch (RemoteException e) {
- fail("Unexpected remote exception");
- }
-
- try {
- mWm.addAppToTask(null, 0);
- fail("IWindowManager.setAppGroupId did not throw SecurityException as"
- + " expected");
- } catch (SecurityException e) {
- // expected
- } catch (RemoteException e) {
- fail("Unexpected remote exception");
- }
-
- try {
mWm.updateOrientationFromAppTokens(new Configuration(),
null /* freezeThisOneIfNeeded */, DEFAULT_DISPLAY);
fail("IWindowManager.updateOrientationFromAppTokens did not throw SecurityException as"
@@ -124,17 +84,6 @@
}
try {
- mWm.setAppOrientation(null, 0);
- mWm.addWindowToken(null, 0, DEFAULT_DISPLAY);
- fail("IWindowManager.setAppOrientation did not throw SecurityException as"
- + " expected");
- } catch (SecurityException e) {
- // expected
- } catch (RemoteException e) {
- fail("Unexpected remote exception");
- }
-
- try {
mWm.setFocusedApp(null, false);
fail("IWindowManager.setFocusedApp did not throw SecurityException as"
+ " expected");
@@ -163,56 +112,6 @@
} catch (RemoteException e) {
fail("Unexpected remote exception");
}
-
- try {
- mWm.setAppStartingWindow(null, "foo", 0, null, null, 0, 0, 0, 0, null, false);
- fail("IWindowManager.setAppStartingWindow did not throw SecurityException as"
- + " expected");
- } catch (SecurityException e) {
- // expected
- } catch (RemoteException e) {
- fail("Unexpected remote exception");
- }
-
- try {
- mWm.setAppVisibility(null, false);
- fail("IWindowManager.setAppVisibility did not throw SecurityException as"
- + " expected");
- } catch (SecurityException e) {
- // expected
- } catch (RemoteException e) {
- fail("Unexpected remote exception");
- }
-
- try {
- mWm.startAppFreezingScreen(null, 0);
- fail("IWindowManager.startAppFreezingScreen did not throw SecurityException as"
- + " expected");
- } catch (SecurityException e) {
- // expected
- } catch (RemoteException e) {
- fail("Unexpected remote exception");
- }
-
- try {
- mWm.stopAppFreezingScreen(null, false);
- fail("IWindowManager.stopAppFreezingScreen did not throw SecurityException as"
- + " expected");
- } catch (SecurityException e) {
- // expected
- } catch (RemoteException e) {
- fail("Unexpected remote exception");
- }
-
- try {
- mWm.removeAppToken(null, DEFAULT_DISPLAY);
- fail("IWindowManager.removeAppToken did not throw SecurityException as"
- + " expected");
- } catch (SecurityException e) {
- // expected
- } catch (RemoteException e) {
- fail("Unexpected remote exception");
- }
}
@SmallTest
diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp
index 2e34197..0e031e7 100644
--- a/tools/aapt/Command.cpp
+++ b/tools/aapt/Command.cpp
@@ -393,10 +393,14 @@
printf("\n");
}
-static void printUsesImpliedPermission(const String8& name, const String8& reason) {
- printf("uses-implied-permission: name='%s' reason='%s'\n",
- ResTable::normalizeForOutput(name.string()).string(),
- ResTable::normalizeForOutput(reason.string()).string());
+static void printUsesImpliedPermission(const String8& name, const String8& reason,
+ const int32_t maxSdkVersion = -1) {
+ printf("uses-implied-permission: name='%s'",
+ ResTable::normalizeForOutput(name.string()).string());
+ if (maxSdkVersion != -1) {
+ printf(" maxSdkVersion='%d'", maxSdkVersion);
+ }
+ printf(" reason='%s'\n", ResTable::normalizeForOutput(reason.string()).string());
}
Vector<String8> getNfcAidCategories(AssetManager& assets, const String8& xmlPath, bool offHost,
@@ -1027,6 +1031,7 @@
// These two implement the implicit permissions that are granted
// to pre-1.6 applications.
bool hasWriteExternalStoragePermission = false;
+ int32_t writeExternalStoragePermissionMaxSdkVersion = -1;
bool hasReadPhoneStatePermission = false;
// If an app requests write storage, they will also get read storage.
@@ -1538,8 +1543,12 @@
addImpliedFeaturesForPermission(targetSdk, name, &impliedFeatures, false);
+ const int32_t maxSdkVersion =
+ AaptXml::getIntegerAttribute(tree, MAX_SDK_VERSION_ATTR, -1);
+
if (name == "android.permission.WRITE_EXTERNAL_STORAGE") {
hasWriteExternalStoragePermission = true;
+ writeExternalStoragePermissionMaxSdkVersion = maxSdkVersion;
} else if (name == "android.permission.READ_EXTERNAL_STORAGE") {
hasReadExternalStoragePermission = true;
} else if (name == "android.permission.READ_PHONE_STATE") {
@@ -1556,7 +1565,7 @@
printUsesPermission(name,
AaptXml::getIntegerAttribute(tree, REQUIRED_ATTR, 1) == 0,
- AaptXml::getIntegerAttribute(tree, MAX_SDK_VERSION_ATTR));
+ maxSdkVersion);
} else if (tag == "uses-permission-sdk-23" || tag == "uses-permission-sdk-m") {
String8 name = AaptXml::getAttribute(tree, NAME_ATTR, &error);
@@ -2039,9 +2048,11 @@
// do this (regardless of target API version) because we can't have
// an app with write permission but not read permission.
if (!hasReadExternalStoragePermission && hasWriteExternalStoragePermission) {
- printUsesPermission(String8("android.permission.READ_EXTERNAL_STORAGE"));
+ printUsesPermission(String8("android.permission.READ_EXTERNAL_STORAGE"),
+ false /* optional */, writeExternalStoragePermissionMaxSdkVersion);
printUsesImpliedPermission(String8("android.permission.READ_EXTERNAL_STORAGE"),
- String8("requested WRITE_EXTERNAL_STORAGE"));
+ String8("requested WRITE_EXTERNAL_STORAGE"),
+ writeExternalStoragePermissionMaxSdkVersion);
}
// Pre-JellyBean call log permission compatibility.
diff --git a/tools/bit/Android.mk b/tools/bit/Android.mk
index 1c1291f..57f46d4 100644
--- a/tools/bit/Android.mk
+++ b/tools/bit/Android.mk
@@ -22,8 +22,7 @@
LOCAL_MODULE := bit
-# This tool doesn't build on darwin.
-LOCAL_MODULE_HOST_OS := linux
+LOCAL_MODULE_HOST_OS := linux darwin
LOCAL_SRC_FILES := \
aapt.cpp \
@@ -43,4 +42,3 @@
libprotobuf-cpp-full
include $(BUILD_HOST_EXECUTABLE)
-
diff --git a/tools/bit/make.cpp b/tools/bit/make.cpp
index 60b5687..a800241 100644
--- a/tools/bit/make.cpp
+++ b/tools/bit/make.cpp
@@ -26,6 +26,7 @@
#include <fstream>
#include <string>
#include <map>
+#include <thread>
#include <sys/types.h>
#include <dirent.h>
@@ -35,6 +36,14 @@
map<string,string> g_buildVars;
+static unsigned int
+get_thread_count()
+{
+ unsigned int threads = std::thread::hardware_concurrency();
+ // Guess if the value cannot be computed
+ return threads == 0 ? 4 : static_cast<unsigned int>(threads * 1.3f);
+}
+
string
get_build_var(const string& buildTop, const string& name, bool quiet)
{
@@ -44,6 +53,7 @@
if (it == g_buildVars.end()) {
Command cmd("make");
cmd.AddArg("--no-print-directory");
+ cmd.AddArg(string("-j") + std::to_string(get_thread_count()));
cmd.AddArg("-C");
cmd.AddArg(buildTop);
cmd.AddArg("-f");
@@ -199,6 +209,7 @@
build_goals(const vector<string>& goals)
{
Command cmd("make");
+ cmd.AddArg(string("-j") + std::to_string(get_thread_count()));
cmd.AddArg("-f");
cmd.AddArg("build/core/main.mk");
for (size_t i=0; i<goals.size(); i++) {
diff --git a/tools/fonts/fontchain_lint.py b/tools/fonts/fontchain_lint.py
index 219fa2d..f193ea4 100755
--- a/tools/fonts/fontchain_lint.py
+++ b/tools/fonts/fontchain_lint.py
@@ -204,7 +204,13 @@
_script_to_font_map = collections.defaultdict(set)
_fallback_chain = []
tree = ElementTree.parse(fonts_xml_path)
- for family in tree.findall('family'):
+ families = tree.findall('family')
+ # Minikin supports up to 254 but users can place their own font at the first
+ # place. Thus, 253 is the maximum allowed number of font families in the
+ # default collection.
+ assert len(families) < 254, (
+ 'System font collection can contains up to 253 font families.')
+ for family in families:
name = family.get('name')
variant = family.get('variant')
langs = family.get('lang')
diff --git a/tools/layoutlib/bridge/src/android/graphics/Bitmap_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Bitmap_Delegate.java
index 2ae4654..9d9d71f 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Bitmap_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Bitmap_Delegate.java
@@ -62,7 +62,7 @@
public enum BitmapCreateFlags {
- PREMULTIPLIED, MUTABLE
+ NONE, PREMULTIPLIED, MUTABLE
}
// ---- delegate manager ----
@@ -616,6 +616,26 @@
// do nothing as Bitmap_Delegate does not have caches
}
+ @LayoutlibDelegate
+ /*package*/ static Bitmap nativeCopyPreserveInternalConfig(long nativeBitmap) {
+ Bitmap_Delegate srcBmpDelegate = sManager.getDelegate(nativeBitmap);
+ if (srcBmpDelegate == null) {
+ return null;
+ }
+
+ BufferedImage srcImage = srcBmpDelegate.getImage();
+
+ // create the image
+ BufferedImage image = new BufferedImage(srcImage.getColorModel(), srcImage.copyData(null),
+ srcImage.isAlphaPremultiplied(), null);
+
+ // create a delegate with the content of the stream.
+ Bitmap_Delegate delegate = new Bitmap_Delegate(image, srcBmpDelegate.getConfig());
+
+ return createBitmap(delegate, EnumSet.of(BitmapCreateFlags.NONE),
+ Bitmap.getDefaultDensity());
+ }
+
// ---- Private delegate/helper methods ----
private Bitmap_Delegate(BufferedImage image, Config config) {
diff --git a/tools/layoutlib/bridge/src/android/graphics/LayerRasterizer_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/LayerRasterizer_Delegate.java
deleted file mode 100644
index 10cc572..0000000
--- a/tools/layoutlib/bridge/src/android/graphics/LayerRasterizer_Delegate.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2010 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.graphics;
-
-import com.android.layoutlib.bridge.impl.DelegateManager;
-import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
-
-/**
- * Delegate implementing the native methods of android.graphics.LayerRasterizer
- *
- * Through the layoutlib_create tool, the original native methods of LayerRasterizer have
- * been replaced by calls to methods of the same name in this delegate class.
- *
- * This class behaves like the original native implementation, but in Java, keeping previously
- * native data into its own objects and mapping them to int that are sent back and forth between
- * it and the original LayerRasterizer class.
- *
- * Because this extends {@link Rasterizer_Delegate}, there's no need to use a
- * {@link DelegateManager}, as all the Shader classes will be added to the manager
- * owned by {@link Rasterizer_Delegate}.
- *
- * @see Rasterizer_Delegate
- *
- */
-public class LayerRasterizer_Delegate extends Rasterizer_Delegate {
-
- // ---- delegate data ----
-
- // ---- Public Helper methods ----
-
- @Override
- public boolean isSupported() {
- return false;
- }
-
- @Override
- public String getSupportMessage() {
- return "Layer Rasterizers are not supported.";
- }
-
- // ---- native methods ----
-
- @LayoutlibDelegate
- /*package*/ static long nativeConstructor() {
- LayerRasterizer_Delegate newDelegate = new LayerRasterizer_Delegate();
- return sManager.addNewDelegate(newDelegate);
- }
-
- @LayoutlibDelegate
- /*package*/ static void nativeAddLayer(long native_layer, long native_paint, float dx, float dy) {
-
- }
-
- // ---- Private delegate/helper methods ----
-}
diff --git a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
index e68d8b3..9b8fa99 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
@@ -99,7 +99,6 @@
private Shader_Delegate mShader;
private PathEffect_Delegate mPathEffect;
private MaskFilter_Delegate mMaskFilter;
- private Rasterizer_Delegate mRasterizer;
private Locale mLocale = Locale.getDefault();
@@ -248,15 +247,6 @@
return mMaskFilter;
}
- /**
- * Returns the {@link Rasterizer} delegate or null if none have been set
- *
- * @return the delegate or null.
- */
- public Rasterizer_Delegate getRasterizer() {
- return mRasterizer;
- }
-
// ---- native methods ----
@LayoutlibDelegate
@@ -898,25 +888,6 @@
}
@LayoutlibDelegate
- /*package*/ static long nSetRasterizer(long native_object, long rasterizer) {
- // get the delegate from the native int.
- Paint_Delegate delegate = sManager.getDelegate(native_object);
- if (delegate == null) {
- return rasterizer;
- }
-
- delegate.mRasterizer = Rasterizer_Delegate.getDelegate(rasterizer);
-
- // since none of those are supported, display a fidelity warning right away
- if (delegate.mRasterizer != null && !delegate.mRasterizer.isSupported()) {
- Bridge.getLog().fidelityWarning(LayoutLog.TAG_RASTERIZER,
- delegate.mRasterizer.getSupportMessage(), null, null /*data*/);
- }
-
- return rasterizer;
- }
-
- @LayoutlibDelegate
/*package*/ static int nGetTextAlign(long native_object) {
// get the delegate from the native int.
Paint_Delegate delegate = sManager.getDelegate(native_object);
@@ -1235,7 +1206,6 @@
mShader = paint.mShader;
mPathEffect = paint.mPathEffect;
mMaskFilter = paint.mMaskFilter;
- mRasterizer = paint.mRasterizer;
mHintingMode = paint.mHintingMode;
if (needsFontUpdate) {
@@ -1262,7 +1232,6 @@
mShader = null;
mPathEffect = null;
mMaskFilter = null;
- mRasterizer = null;
updateFontObject();
mHintingMode = Paint.HINTING_ON;
}
diff --git a/tools/layoutlib/bridge/src/android/graphics/PathMeasure_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/PathMeasure_Delegate.java
index fc9b4f7..7f707c9 100644
--- a/tools/layoutlib/bridge/src/android/graphics/PathMeasure_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/PathMeasure_Delegate.java
@@ -56,8 +56,8 @@
if (native_path != 0) {
if (forceClosed) {
// Copy the path and call close
- native_path = Path_Delegate.init2(native_path);
- Path_Delegate.native_close(native_path);
+ native_path = Path_Delegate.nInit(native_path);
+ Path_Delegate.nClose(native_path);
}
Path_Delegate pathDelegate = Path_Delegate.getDelegate(native_path);
@@ -108,8 +108,8 @@
if (native_path != 0) {
if (forceClosed) {
// Copy the path and call close
- native_path = Path_Delegate.init2(native_path);
- Path_Delegate.native_close(native_path);
+ native_path = Path_Delegate.nInit(native_path);
+ Path_Delegate.nClose(native_path);
}
Path_Delegate pathDelegate = Path_Delegate.getDelegate(native_path);
@@ -184,28 +184,28 @@
if (type != PathIterator.SEG_MOVETO) {
float[] lastPoint = new float[2];
iterator.getCurrentSegmentEnd(lastPoint);
- Path_Delegate.native_moveTo(native_dst_path, lastPoint[0], lastPoint[1]);
+ Path_Delegate.nMoveTo(native_dst_path, lastPoint[0], lastPoint[1]);
}
}
isZeroLength = isZeroLength && iterator.getCurrentSegmentLength() > 0;
switch (type) {
case PathIterator.SEG_MOVETO:
- Path_Delegate.native_moveTo(native_dst_path, points[0], points[1]);
+ Path_Delegate.nMoveTo(native_dst_path, points[0], points[1]);
break;
case PathIterator.SEG_LINETO:
- Path_Delegate.native_lineTo(native_dst_path, points[0], points[1]);
+ Path_Delegate.nLineTo(native_dst_path, points[0], points[1]);
break;
case PathIterator.SEG_CLOSE:
- Path_Delegate.native_close(native_dst_path);
+ Path_Delegate.nClose(native_dst_path);
break;
case PathIterator.SEG_CUBICTO:
- Path_Delegate.native_cubicTo(native_dst_path, points[0], points[1],
+ Path_Delegate.nCubicTo(native_dst_path, points[0], points[1],
points[2], points[3],
points[4], points[5]);
break;
case PathIterator.SEG_QUADTO:
- Path_Delegate.native_quadTo(native_dst_path, points[0], points[1],
+ Path_Delegate.nQuadTo(native_dst_path, points[0], points[1],
points[2],
points[3]);
break;
diff --git a/tools/layoutlib/bridge/src/android/graphics/Path_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Path_Delegate.java
index 219c487..579fce0 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Path_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Path_Delegate.java
@@ -98,7 +98,7 @@
// ---- native methods ----
@LayoutlibDelegate
- /*package*/ static long init1() {
+ /*package*/ static long nInit() {
// create the delegate
Path_Delegate newDelegate = new Path_Delegate();
@@ -106,7 +106,7 @@
}
@LayoutlibDelegate
- /*package*/ static long init2(long nPath) {
+ /*package*/ static long nInit(long nPath) {
// create the delegate
Path_Delegate newDelegate = new Path_Delegate();
@@ -120,7 +120,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_reset(long nPath) {
+ /*package*/ static void nReset(long nPath) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
return;
@@ -130,20 +130,20 @@
}
@LayoutlibDelegate
- /*package*/ static void native_rewind(long nPath) {
+ /*package*/ static void nRewind(long nPath) {
// call out to reset since there's nothing to optimize in
// terms of data structs.
- native_reset(nPath);
+ nReset(nPath);
}
@LayoutlibDelegate
- /*package*/ static void native_set(long native_dst, long native_src) {
+ /*package*/ static void nSet(long native_dst, long nSrc) {
Path_Delegate pathDstDelegate = sManager.getDelegate(native_dst);
if (pathDstDelegate == null) {
return;
}
- Path_Delegate pathSrcDelegate = sManager.getDelegate(native_src);
+ Path_Delegate pathSrcDelegate = sManager.getDelegate(nSrc);
if (pathSrcDelegate == null) {
return;
}
@@ -152,14 +152,14 @@
}
@LayoutlibDelegate
- /*package*/ static boolean native_isConvex(long nPath) {
+ /*package*/ static boolean nIsConvex(long nPath) {
Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED,
"Path.isConvex is not supported.", null, null);
return true;
}
@LayoutlibDelegate
- /*package*/ static int native_getFillType(long nPath) {
+ /*package*/ static int nGetFillType(long nPath) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
return 0;
@@ -169,7 +169,7 @@
}
@LayoutlibDelegate
- public static void native_setFillType(long nPath, int ft) {
+ public static void nSetFillType(long nPath, int ft) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
return;
@@ -179,14 +179,14 @@
}
@LayoutlibDelegate
- /*package*/ static boolean native_isEmpty(long nPath) {
+ /*package*/ static boolean nIsEmpty(long nPath) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
return pathDelegate == null || pathDelegate.isEmpty();
}
@LayoutlibDelegate
- /*package*/ static boolean native_isRect(long nPath, RectF rect) {
+ /*package*/ static boolean nIsRect(long nPath, RectF rect) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
return false;
@@ -206,7 +206,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_computeBounds(long nPath, RectF bounds) {
+ /*package*/ static void nComputeBounds(long nPath, RectF bounds) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
return;
@@ -216,13 +216,13 @@
}
@LayoutlibDelegate
- /*package*/ static void native_incReserve(long nPath, int extraPtCount) {
+ /*package*/ static void nIncReserve(long nPath, int extraPtCount) {
// since we use a java2D path, there's no way to pre-allocate new points,
// so we do nothing.
}
@LayoutlibDelegate
- /*package*/ static void native_moveTo(long nPath, float x, float y) {
+ /*package*/ static void nMoveTo(long nPath, float x, float y) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
return;
@@ -232,7 +232,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_rMoveTo(long nPath, float dx, float dy) {
+ /*package*/ static void nRMoveTo(long nPath, float dx, float dy) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
return;
@@ -242,7 +242,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_lineTo(long nPath, float x, float y) {
+ /*package*/ static void nLineTo(long nPath, float x, float y) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
return;
@@ -252,7 +252,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_rLineTo(long nPath, float dx, float dy) {
+ /*package*/ static void nRLineTo(long nPath, float dx, float dy) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
return;
@@ -262,7 +262,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_quadTo(long nPath, float x1, float y1, float x2, float y2) {
+ /*package*/ static void nQuadTo(long nPath, float x1, float y1, float x2, float y2) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
return;
@@ -272,7 +272,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_rQuadTo(long nPath, float dx1, float dy1, float dx2, float dy2) {
+ /*package*/ static void nRQuadTo(long nPath, float dx1, float dy1, float dx2, float dy2) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
return;
@@ -282,7 +282,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_cubicTo(long nPath, float x1, float y1,
+ /*package*/ static void nCubicTo(long nPath, float x1, float y1,
float x2, float y2, float x3, float y3) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
@@ -293,7 +293,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_rCubicTo(long nPath, float x1, float y1,
+ /*package*/ static void nRCubicTo(long nPath, float x1, float y1,
float x2, float y2, float x3, float y3) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
@@ -304,7 +304,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_arcTo(long nPath, float left, float top, float right,
+ /*package*/ static void nArcTo(long nPath, float left, float top, float right,
float bottom,
float startAngle, float sweepAngle, boolean forceMoveTo) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
@@ -316,7 +316,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_close(long nPath) {
+ /*package*/ static void nClose(long nPath) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
return;
@@ -326,7 +326,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_addRect(long nPath,
+ /*package*/ static void nAddRect(long nPath,
float left, float top, float right, float bottom, int dir) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
@@ -337,7 +337,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_addOval(long nPath, float left, float top, float right,
+ /*package*/ static void nAddOval(long nPath, float left, float top, float right,
float bottom, int dir) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
@@ -349,7 +349,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_addCircle(long nPath, float x, float y, float radius, int dir) {
+ /*package*/ static void nAddCircle(long nPath, float x, float y, float radius, int dir) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
return;
@@ -361,7 +361,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_addArc(long nPath, float left, float top, float right,
+ /*package*/ static void nAddArc(long nPath, float left, float top, float right,
float bottom, float startAngle, float sweepAngle) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
@@ -375,7 +375,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_addRoundRect(long nPath, float left, float top, float right,
+ /*package*/ static void nAddRoundRect(long nPath, float left, float top, float right,
float bottom, float rx, float ry, int dir) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
@@ -388,7 +388,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_addRoundRect(long nPath, float left, float top, float right,
+ /*package*/ static void nAddRoundRect(long nPath, float left, float top, float right,
float bottom, float[] radii, int dir) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
@@ -405,17 +405,17 @@
}
@LayoutlibDelegate
- /*package*/ static void native_addPath(long nPath, long src, float dx, float dy) {
+ /*package*/ static void nAddPath(long nPath, long src, float dx, float dy) {
addPath(nPath, src, AffineTransform.getTranslateInstance(dx, dy));
}
@LayoutlibDelegate
- /*package*/ static void native_addPath(long nPath, long src) {
+ /*package*/ static void nAddPath(long nPath, long src) {
addPath(nPath, src, null /*transform*/);
}
@LayoutlibDelegate
- /*package*/ static void native_addPath(long nPath, long src, long matrix) {
+ /*package*/ static void nAddPath(long nPath, long src, long matrix) {
Matrix_Delegate matrixDelegate = Matrix_Delegate.getDelegate(matrix);
if (matrixDelegate == null) {
return;
@@ -425,7 +425,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_offset(long nPath, float dx, float dy) {
+ /*package*/ static void nOffset(long nPath, float dx, float dy) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
return;
@@ -435,7 +435,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_setLastPoint(long nPath, float dx, float dy) {
+ /*package*/ static void nSetLastPoint(long nPath, float dx, float dy) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
return;
@@ -446,7 +446,7 @@
}
@LayoutlibDelegate
- /*package*/ static void native_transform(long nPath, long matrix,
+ /*package*/ static void nTransform(long nPath, long matrix,
long dst_path) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
@@ -465,23 +465,23 @@
}
@LayoutlibDelegate
- /*package*/ static void native_transform(long nPath, long matrix) {
- native_transform(nPath, matrix, 0);
+ /*package*/ static void nTransform(long nPath, long matrix) {
+ nTransform(nPath, matrix, 0);
}
@LayoutlibDelegate
- /*package*/ static boolean native_op(long nPath1, long nPath2, int op, long result) {
+ /*package*/ static boolean nOp(long nPath1, long nPath2, int op, long result) {
Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, "Path.op() not supported", null);
return false;
}
@LayoutlibDelegate
- /*package*/ static void finalizer(long nPath) {
+ /*package*/ static void nFinalize(long nPath) {
sManager.removeJavaReferenceFor(nPath);
}
@LayoutlibDelegate
- /*package*/ static float[] native_approximate(long nPath, float error) {
+ /*package*/ static float[] nApproximate(long nPath, float error) {
Path_Delegate pathDelegate = sManager.getDelegate(nPath);
if (pathDelegate == null) {
return null;
diff --git a/tools/layoutlib/bridge/src/android/graphics/Rasterizer_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Rasterizer_Delegate.java
deleted file mode 100644
index a742840..0000000
--- a/tools/layoutlib/bridge/src/android/graphics/Rasterizer_Delegate.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2010 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.graphics;
-
-import com.android.layoutlib.bridge.impl.DelegateManager;
-import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
-
-/**
- * Delegate implementing the native methods of android.graphics.Rasterizer
- *
- * Through the layoutlib_create tool, the original native methods of Rasterizer have been replaced
- * by calls to methods of the same name in this delegate class.
- *
- * This class behaves like the original native implementation, but in Java, keeping previously
- * native data into its own objects and mapping them to int that are sent back and forth between
- * it and the original Rasterizer class.
- *
- * This also serve as a base class for all Rasterizer delegate classes.
- *
- * @see DelegateManager
- *
- */
-public abstract class Rasterizer_Delegate {
-
- // ---- delegate manager ----
- protected static final DelegateManager<Rasterizer_Delegate> sManager =
- new DelegateManager<Rasterizer_Delegate>(Rasterizer_Delegate.class);
-
- // ---- delegate helper data ----
-
- // ---- delegate data ----
-
- // ---- Public Helper methods ----
-
- public static Rasterizer_Delegate getDelegate(long nativeShader) {
- return sManager.getDelegate(nativeShader);
- }
-
- public abstract boolean isSupported();
- public abstract String getSupportMessage();
-
- // ---- native methods ----
-
- @LayoutlibDelegate
- /*package*/ static void finalizer(long native_instance) {
- sManager.removeJavaReferenceFor(native_instance);
- }
-
- // ---- Private delegate/helper methods ----
-}
diff --git a/tools/layoutlib/bridge/src/android/graphics/drawable/VectorDrawable_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/drawable/VectorDrawable_Delegate.java
index cee679a..430607a 100644
--- a/tools/layoutlib/bridge/src/android/graphics/drawable/VectorDrawable_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/drawable/VectorDrawable_Delegate.java
@@ -1197,7 +1197,7 @@
assert fillPaintDelegate != null;
fillPaintDelegate.setColorFilter(filterPtr);
fillPaintDelegate.setShader(fullPath.mFillGradient);
- Path_Delegate.native_setFillType(mRenderPath.mNativePath, fullPath.mFillType);
+ Path_Delegate.nSetFillType(mRenderPath.mNativePath, fullPath.mFillType);
BaseCanvas_Delegate.nDrawPath(canvasPtr, mRenderPath.mNativePath, fillPaint
.getNativeInstance());
}
diff --git a/tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java b/tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java
index 85584d3..4445a22 100644
--- a/tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java
+++ b/tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java
@@ -51,4 +51,8 @@
view.dispatchDetachedFromWindow();
}
}
+
+ public static ViewRootImpl getRootView(View view) {
+ return view.mAttachInfo != null ? view.mAttachInfo.mViewRootImpl : null;
+ }
}
diff --git a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
index 4b9815d..5ed5460 100644
--- a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
+++ b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
@@ -16,18 +16,10 @@
package android.view;
-import android.graphics.Point;
-import android.graphics.Rect;
-import com.android.internal.app.IAssistScreenshotReceiver;
-import com.android.internal.os.IResultReceiver;
-import com.android.internal.policy.IKeyguardDismissCallback;
-import com.android.internal.policy.IShortcutService;
-import com.android.internal.view.IInputContext;
-import com.android.internal.view.IInputMethodClient;
-
-import android.content.res.CompatibilityInfo;
import android.content.res.Configuration;
import android.graphics.Bitmap;
+import android.graphics.Point;
+import android.graphics.Rect;
import android.os.Bundle;
import android.os.IBinder;
import android.os.IRemoteCallback;
@@ -35,7 +27,12 @@
import android.os.RemoteException;
import android.util.DisplayMetrics;
-import java.lang.Override;
+import com.android.internal.app.IAssistScreenshotReceiver;
+import com.android.internal.os.IResultReceiver;
+import com.android.internal.policy.IKeyguardDismissCallback;
+import com.android.internal.policy.IShortcutService;
+import com.android.internal.view.IInputContext;
+import com.android.internal.view.IInputMethodClient;
/**
* Basic implementation of {@link IWindowManager} so that {@link Display} (and
@@ -77,14 +74,6 @@
// ---- unused implementation of IWindowManager ----
@Override
- public void addAppToken(int addPos, IApplicationToken token, int taskId,
- int requestedOrientation, boolean fullscreen, boolean showWhenLocked, int configChanges,
- boolean voiceInteraction, boolean launchTaskBehind, boolean alwaysFocusable,
- int targetSdkVersion, int rotationAnimationHint) throws RemoteException {
- // TODO Auto-generated method stub
- }
-
- @Override
public void addWindowToken(IBinder arg0, int arg1, int arg2) throws RemoteException {
// TODO Auto-generated method stub
@@ -159,12 +148,6 @@
}
@Override
- public int getAppOrientation(IApplicationToken arg0) throws RemoteException {
- // TODO Auto-generated method stub
- return 0;
- }
-
- @Override
public int getPendingAppTransition() throws RemoteException {
// TODO Auto-generated method stub
return 0;
@@ -258,12 +241,6 @@
}
@Override
- public void pauseKeyDispatching(IBinder arg0) throws RemoteException {
- // TODO Auto-generated method stub
-
- }
-
- @Override
public void prepareAppTransition(int arg0, boolean arg1) throws RemoteException {
// TODO Auto-generated method stub
@@ -276,24 +253,12 @@
}
@Override
- public void removeAppToken(IBinder arg0, int arg1) throws RemoteException {
- // TODO Auto-generated method stub
-
- }
-
- @Override
public void removeWindowToken(IBinder arg0, int arg1) throws RemoteException {
// TODO Auto-generated method stub
}
@Override
- public void resumeKeyDispatching(IBinder arg0) throws RemoteException {
- // TODO Auto-generated method stub
-
- }
-
- @Override
public boolean requestAssistScreenshot(IAssistScreenshotReceiver receiver)
throws RemoteException {
// TODO Auto-generated method stub
@@ -301,13 +266,6 @@
}
@Override
- public Bitmap screenshotApplications(IBinder appToken, int displayId, int maxWidth,
- int maxHeight, float frameScale) throws RemoteException {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
public void setAnimationScale(int arg0, float arg1) throws RemoteException {
// TODO Auto-generated method stub
@@ -325,41 +283,6 @@
}
@Override
- public void addAppToTask(IBinder arg0, int arg1) throws RemoteException {
- // TODO Auto-generated method stub
- }
-
- @Override
- public void setAppOrientation(IApplicationToken arg0, int arg1) throws RemoteException {
- // TODO Auto-generated method stub
- }
-
- @Override
- public boolean setAppStartingWindow(IBinder arg0, String arg1, int arg2, CompatibilityInfo arg3,
- CharSequence arg4, int arg5, int arg6, int arg7, int arg8, IBinder arg9, boolean arg10)
- throws RemoteException {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public void setAppVisibility(IBinder arg0, boolean arg1) throws RemoteException {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void notifyAppResumed(IBinder token, boolean wasStopped, boolean allowSavedSurface)
- throws RemoteException {
- // TODO Auto-generated method stub
- }
-
- @Override
- public void notifyAppStopped(IBinder token) throws RemoteException {
- // TODO Auto-generated method stub
- }
-
- @Override
public void setEventDispatching(boolean arg0) throws RemoteException {
// TODO Auto-generated method stub
}
@@ -443,11 +366,6 @@
}
@Override
- public void startAppFreezingScreen(IBinder arg0, int arg1) throws RemoteException {
- // TODO Auto-generated method stub
- }
-
- @Override
public boolean startViewServer(int arg0) throws RemoteException {
// TODO Auto-generated method stub
return false;
@@ -469,11 +387,6 @@
}
@Override
- public void stopAppFreezingScreen(IBinder arg0, boolean arg1) throws RemoteException {
- // TODO Auto-generated method stub
- }
-
- @Override
public boolean stopViewServer() throws RemoteException {
// TODO Auto-generated method stub
return false;
@@ -564,14 +477,6 @@
}
@Override
- public void cancelTaskWindowTransition(int taskId) {
- }
-
- @Override
- public void cancelTaskThumbnailTransition(int taskId) {
- }
-
- @Override
public void endProlongedAnimations() {
}
diff --git a/core/java/android/service/autofill/IAutoFillCallback.aidl b/tools/layoutlib/bridge/src/android/view/ViewRootImpl_Accessor.java
similarity index 68%
copy from core/java/android/service/autofill/IAutoFillCallback.aidl
copy to tools/layoutlib/bridge/src/android/view/ViewRootImpl_Accessor.java
index d6d4f39..0e15b97 100644
--- a/core/java/android/service/autofill/IAutoFillCallback.aidl
+++ b/tools/layoutlib/bridge/src/android/view/ViewRootImpl_Accessor.java
@@ -14,14 +14,13 @@
* limitations under the License.
*/
-package android.service.autofill;
-
-import java.util.List;
+package android.view;
/**
- * @hide
+ * Accessor to allow layoutlib to call {@link ViewRootImpl#dispatchApplyInsets} directly.
*/
-oneway interface IAutoFillCallback {
- void autofill(in List values);
- void showError(String message);
+public class ViewRootImpl_Accessor {
+ public static void dispatchApplyInsets(ViewRootImpl viewRoot, View host) {
+ viewRoot.dispatchApplyInsets(host);
+ }
}
diff --git a/tools/layoutlib/bridge/src/android/view/accessibility/AccessibilityManager.java b/tools/layoutlib/bridge/src/android/view/accessibility/AccessibilityManager.java
index edb5eff..3ce7cab 100644
--- a/tools/layoutlib/bridge/src/android/view/accessibility/AccessibilityManager.java
+++ b/tools/layoutlib/bridge/src/android/view/accessibility/AccessibilityManager.java
@@ -92,6 +92,9 @@
new IAccessibilityManagerClient.Stub() {
public void setState(int state) {
}
+
+ public void notifyServicesStateChanged() {
+ }
};
/**
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java
index f47b105..8835b58 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java
@@ -784,6 +784,10 @@
}
@Override
+ public void setApplicationCategoryHint(String packageName, int categoryHint) {
+ }
+
+ @Override
public int getMoveStatus(int moveId) {
return 0;
}
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/Layout.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/Layout.java
index 726ff22..2fe3ed5 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/Layout.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/Layout.java
@@ -38,7 +38,10 @@
import android.graphics.drawable.Drawable;
import android.util.DisplayMetrics;
import android.util.TypedValue;
+import android.view.AttachInfo_Accessor;
import android.view.View;
+import android.view.ViewRootImpl;
+import android.view.ViewRootImpl_Accessor;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
@@ -302,6 +305,17 @@
return Bridge.getResourceId(ResourceType.ID, ID_PREFIX + name);
}
+ @Override
+ public void requestFitSystemWindows() {
+ // The framework call would usually bubble up to ViewRootImpl but, in layoutlib, Layout will
+ // act as view root for most purposes. That way, we can also save going through the Handler
+ // to dispatch the new applied insets.
+ ViewRootImpl root = AttachInfo_Accessor.getRootView(this);
+ if (root != null) {
+ ViewRootImpl_Accessor.dispatchApplyInsets(root, this);
+ }
+ }
+
/**
* A helper class to help initialize the Layout.
*/
diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/myapplication.widgets/InsetsWidget.java b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/myapplication.widgets/InsetsWidget.java
new file mode 100644
index 0000000..36e5c26
--- /dev/null
+++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/myapplication.widgets/InsetsWidget.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2016 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.layoutlib.test.myapplication.widgets;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.WindowInsets;
+import android.widget.TextView;
+
+public class InsetsWidget extends TextView {
+ public static boolean sApplyInsetsCalled = false;
+
+ public InsetsWidget(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+
+ requestApplyInsets();
+ }
+
+ @Override
+ public WindowInsets onApplyWindowInsets(WindowInsets insets) {
+ sApplyInsetsCalled = true;
+ return super.onApplyWindowInsets(insets);
+ }
+}
diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/layout/insets.xml b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/layout/insets.xml
new file mode 100644
index 0000000..ff06d79
--- /dev/null
+++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/layout/insets.xml
@@ -0,0 +1,12 @@
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:padding="16dp"
+ android:orientation="horizontal"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+
+ <com.android.layoutlib.test.myapplication.widgets.InsetsWidget
+ android:text="Hello world"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/text1"/>
+</LinearLayout>
diff --git a/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java
index c813a12..cdcae89 100644
--- a/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java
+++ b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java
@@ -53,7 +53,6 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.content.pm.PackageInstaller.Session;
import android.content.res.AssetManager;
import android.content.res.Configuration;
import android.content.res.Resources;
@@ -61,32 +60,17 @@
import java.io.File;
import java.io.IOException;
-import java.io.InputStream;
import java.lang.ref.WeakReference;
-import java.net.MalformedURLException;
+import java.lang.reflect.Field;
import java.net.URL;
-import java.net.URLClassLoader;
-import java.nio.file.CopyOption;
-import java.nio.file.FileVisitOption;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.StandardCopyOption;
-import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Comparator;
-import java.util.Enumeration;
-import java.util.List;
import java.util.concurrent.TimeUnit;
-import java.util.function.BiPredicate;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
import com.google.android.collect.Lists;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -434,6 +418,30 @@
renderAndVerify(params, "simple_activity.png");
}
+ @Test
+ public void testOnApplyInsetsCall()
+ throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
+ // We get the widget via reflection to avoid IntelliJ complaining about the class being
+ // located in the wrong package. (From the Bridge tests point of view, it is)
+ Class insetsWidgetClass = Class.forName("com.android.layoutlib.test.myapplication.widgets" +
+ ".InsetsWidget");
+ Field field = insetsWidgetClass.getDeclaredField("sApplyInsetsCalled");
+ assertFalse((Boolean)field.get(null));
+
+ LayoutPullParser parser = createLayoutPullParser("insets.xml");
+ LayoutLibTestCallback layoutLibCallback =
+ new LayoutLibTestCallback(getLogger(), mDefaultClassLoader);
+ layoutLibCallback.initResources();
+ SessionParams params = getSessionParams(parser, ConfigGenerator.NEXUS_5,
+ layoutLibCallback, "Theme.Material.Light.NoActionBar", false,
+ RenderingMode.NORMAL, 22);
+
+ render(params, -1);
+
+ assertTrue((Boolean)field.get(null));
+ field.set(null, false);
+ }
+
@AfterClass
public static void tearDown() {
sLayoutLibLog = null;
@@ -621,6 +629,37 @@
return new LayoutPullParser(APP_TEST_RES + "/layout/" + layoutPath);
}
+ @NonNull
+ private static RenderResult render(SessionParams params, long frameTimeNanos) {
+ // TODO: Set up action bar handler properly to test menu rendering.
+ // Create session params.
+ System_Delegate.setBootTimeNanos(TimeUnit.MILLISECONDS.toNanos(871732800000L));
+ System_Delegate.setNanosTime(TimeUnit.MILLISECONDS.toNanos(871732800000L));
+ RenderSession session = sBridge.createSession(params);
+
+ try {
+
+ if (frameTimeNanos != -1) {
+ session.setElapsedFrameTimeNanos(frameTimeNanos);
+ }
+
+ if (!session.getResult().isSuccess()) {
+ getLogger().error(session.getResult().getException(),
+ session.getResult().getErrorMessage());
+ }
+ // Render the session with a timeout of 50s.
+ Result renderResult = session.render(50000);
+ if (!renderResult.isSuccess()) {
+ getLogger().error(session.getResult().getException(),
+ session.getResult().getErrorMessage());
+ }
+
+ return RenderResult.getFromSession(session);
+ } finally {
+ session.dispose();
+ }
+ }
+
/**
* Create a new rendering session and test that rendering the given layout doesn't throw any
* exceptions and matches the provided image.
@@ -629,40 +668,19 @@
* how far in the future is.
*/
@Nullable
- private RenderResult renderAndVerify(SessionParams params, String goldenFileName, long frameTimeNanos)
+ private static RenderResult renderAndVerify(SessionParams params, String goldenFileName, long
+ frameTimeNanos)
throws ClassNotFoundException {
- // TODO: Set up action bar handler properly to test menu rendering.
- // Create session params.
- System_Delegate.setBootTimeNanos(TimeUnit.MILLISECONDS.toNanos(871732800000L));
- System_Delegate.setNanosTime(TimeUnit.MILLISECONDS.toNanos(871732800000L));
- RenderSession session = sBridge.createSession(params);
-
- if (frameTimeNanos != -1) {
- session.setElapsedFrameTimeNanos(frameTimeNanos);
- }
-
- if (!session.getResult().isSuccess()) {
- getLogger().error(session.getResult().getException(),
- session.getResult().getErrorMessage());
- }
- // Render the session with a timeout of 50s.
- Result renderResult = session.render(50000);
- if (!renderResult.isSuccess()) {
- getLogger().error(session.getResult().getException(),
- session.getResult().getErrorMessage());
- }
+ RenderResult result = Main.render(params, frameTimeNanos);
try {
String goldenImagePath = APP_TEST_DIR + "/golden/" + goldenFileName;
- ImageUtils.requireSimilar(goldenImagePath, session.getImage());
-
- return RenderResult.getFromSession(session);
+ assertNotNull(result.getImage());
+ ImageUtils.requireSimilar(goldenImagePath, result.getImage());
} catch (IOException e) {
getLogger().error(e, e.getMessage());
- } finally {
- session.dispose();
}
- return null;
+ return result;
}
/**
@@ -670,9 +688,9 @@
* exceptions and matches the provided image.
*/
@Nullable
- private RenderResult renderAndVerify(SessionParams params, String goldenFileName)
+ private static RenderResult renderAndVerify(SessionParams params, String goldenFileName)
throws ClassNotFoundException {
- return renderAndVerify(params, goldenFileName, -1);
+ return Main.renderAndVerify(params, goldenFileName, -1);
}
/**
diff --git a/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderResult.java b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderResult.java
index 17b20f7..087478f 100644
--- a/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderResult.java
+++ b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderResult.java
@@ -23,6 +23,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -31,19 +32,22 @@
private final List<ViewInfo> mRootViews;
private final List<ViewInfo> mSystemViews;
private final Result mRenderResult;
+ private BufferedImage mImage;
private RenderResult(@Nullable Result result, @Nullable List<ViewInfo> systemViewInfoList,
- @Nullable List<ViewInfo> rootViewInfoList) {
+ @Nullable List<ViewInfo> rootViewInfoList, @Nullable BufferedImage image) {
mSystemViews = systemViewInfoList == null ? Collections.emptyList() : systemViewInfoList;
mRootViews = rootViewInfoList == null ? Collections.emptyList() : rootViewInfoList;
mRenderResult = result;
+ mImage = image;
}
@NonNull
static RenderResult getFromSession(@NonNull RenderSession session) {
return new RenderResult(session.getResult(),
new ArrayList<>(session.getSystemRootViews()),
- new ArrayList<>(session.getRootViews()));
+ new ArrayList<>(session.getRootViews()),
+ session.getImage());
}
@Nullable
@@ -60,4 +64,9 @@
public List<ViewInfo> getSystemViews() {
return mSystemViews;
}
+
+ @Nullable
+ public BufferedImage getImage() {
+ return mImage;
+ }
}
diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java
index a23bad6..92fd75c 100644
--- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java
+++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java
@@ -263,7 +263,6 @@
"android.graphics.DrawFilter",
"android.graphics.EmbossMaskFilter",
"android.graphics.FontFamily",
- "android.graphics.LayerRasterizer",
"android.graphics.LightingColorFilter",
"android.graphics.LinearGradient",
"android.graphics.MaskFilter",
@@ -277,7 +276,6 @@
"android.graphics.PathMeasure",
"android.graphics.PorterDuffColorFilter",
"android.graphics.RadialGradient",
- "android.graphics.Rasterizer",
"android.graphics.Region",
"android.graphics.Shader",
"android.graphics.SumPathEffect",
diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl
index 9e897bf..18c1245 100644
--- a/wifi/java/android/net/wifi/IWifiManager.aidl
+++ b/wifi/java/android/net/wifi/IWifiManager.aidl
@@ -59,7 +59,7 @@
int addOrUpdateNetwork(in WifiConfiguration config);
- boolean addPasspointConfiguration(in PasspointConfiguration config);
+ boolean addOrUpdatePasspointConfiguration(in PasspointConfiguration config);
boolean removePasspointConfiguration(in String fqdn);
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index 3b7f721..958279b 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -608,6 +608,7 @@
* if there has been a report of it having no internet access, and, it never have had
* internet access in the past.
*/
+ @SystemApi
public boolean hasNoInternetAccess() {
return numNoInternetAccessReports > 0 && !validatedInternetAccess;
}
@@ -621,6 +622,17 @@
public boolean noInternetAccessExpected;
/**
+ * The WiFi configuration is expected not to have Internet access (e.g., a wireless printer, a
+ * Chromecast hotspot, etc.). This will be set if the user explicitly confirms a connection to
+ * this configuration and selects "don't ask again".
+ * @hide
+ */
+ @SystemApi
+ public boolean isNoInternetAccessExpected() {
+ return noInternetAccessExpected;
+ }
+
+ /**
* @hide
* Last time the system was connected to this configuration.
*/
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index 674c161..88820cd 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -842,31 +842,31 @@
}
/**
- * Add a Passpoint configuration. The configuration provides a credential
+ * Add or update a Passpoint configuration. The configuration provides a credential
* for connecting to Passpoint networks that are operated by the Passpoint
* service provider specified in the configuration.
*
* Each configuration is uniquely identified by its FQDN (Fully Qualified Domain
- * Name). In the case when there is an existing configuration with the same base
- * domain, the new configuration will replace the existing configuration.
+ * Name). In the case when there is an existing configuration with the same
+ * FQDN, the new configuration will replace the existing configuration.
*
* @param config The Passpoint configuration to be added
- * @return true on success or false on failure
+ * @return true on success
* @hide
*/
- public boolean addPasspointConfiguration(PasspointConfiguration config) {
+ public boolean addOrUpdatePasspointConfiguration(PasspointConfiguration config) {
try {
- return mService.addPasspointConfiguration(config);
+ return mService.addOrUpdatePasspointConfiguration(config);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/**
- * Remove a Passpoint configuration identified by its FQDN (Fully Qualified Domain Name).
+ * Remove the Passpoint configuration identified by its FQDN (Fully Qualified Domain Name).
*
* @param fqdn The FQDN of the passpoint configuration to be removed
- * @return true on success or false on failure
+ * @return true on success
* @hide
*/
public boolean removePasspointConfiguration(String fqdn) {
@@ -880,7 +880,9 @@
/**
* Return the list of installed Passpoint configurations.
*
- * @return A list of PasspointConfiguration or null
+ * An empty list will be returned when no configurations are installed.
+ *
+ * @return A list of {@link PasspointConfiguration}
* @hide
*/
public List<PasspointConfiguration> getPasspointConfigurations() {
@@ -1763,6 +1765,7 @@
* Interface for callback invocation on an application action
* @hide
*/
+ @SystemApi
public interface ActionListener {
/** The operation succeeded */
public void onSuccess();
@@ -1974,6 +1977,7 @@
*
* @hide
*/
+ @SystemApi
public void connect(WifiConfiguration config, ActionListener listener) {
if (config == null) throw new IllegalArgumentException("config cannot be null");
// Use INVALID_NETWORK_ID for arg1 when passing a config object
diff --git a/wifi/java/android/net/wifi/WifiNetworkScoreCache.java b/wifi/java/android/net/wifi/WifiNetworkScoreCache.java
index 9dd118b..71124bb 100755
--- a/wifi/java/android/net/wifi/WifiNetworkScoreCache.java
+++ b/wifi/java/android/net/wifi/WifiNetworkScoreCache.java
@@ -212,10 +212,8 @@
mContext.enforceCallingOrSelfPermission(permission.DUMP, TAG);
writer.println("WifiNetworkScoreCache");
writer.println(" All score curves:");
- for (Map.Entry<String, ScoredNetwork> entry : mNetworkCache.entrySet()) {
- ScoredNetwork scoredNetwork = entry.getValue();
- writer.println(" " + entry.getKey() + ": " + scoredNetwork.rssiCurve
- + ", meteredHint=" + scoredNetwork.meteredHint);
+ for (ScoredNetwork score : mNetworkCache.values()) {
+ writer.println(" " + score);
}
writer.println(" Current network scores:");
WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareAttachCallback.java b/wifi/java/android/net/wifi/aware/AttachCallback.java
similarity index 76%
rename from wifi/java/android/net/wifi/aware/WifiAwareAttachCallback.java
rename to wifi/java/android/net/wifi/aware/AttachCallback.java
index 1e8dbd9..c368b46 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareAttachCallback.java
+++ b/wifi/java/android/net/wifi/aware/AttachCallback.java
@@ -18,16 +18,14 @@
/**
* Base class for Aware attach callbacks. Should be extended by applications and set when calling
- * {@link WifiAwareManager#attach(WifiAwareAttachCallback, android.os.Handler)}. These are callbacks
+ * {@link WifiAwareManager#attach(AttachCallback, android.os.Handler)}. These are callbacks
* applying to the Aware connection as a whole - not to specific publish or subscribe sessions -
- * for that see {@link WifiAwareDiscoverySessionCallback}.
- *
- * @hide PROPOSED_AWARE_API
+ * for that see {@link DiscoverySessionCallback}.
*/
-public class WifiAwareAttachCallback {
+public class AttachCallback {
/**
* Called when Aware attach operation
- * {@link WifiAwareManager#attach(WifiAwareAttachCallback, android.os.Handler)}
+ * {@link WifiAwareManager#attach(AttachCallback, android.os.Handler)}
* is completed and that we can now start discovery sessions or connections.
*
* @param session The Aware object on which we can execute further Aware operations - e.g.
@@ -39,7 +37,7 @@
/**
* Called when Aware attach operation
- * {@link WifiAwareManager#attach(WifiAwareAttachCallback, android.os.Handler)} failed.
+ * {@link WifiAwareManager#attach(AttachCallback, android.os.Handler)} failed.
*/
public void onAttachFailed() {
/* empty */
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareCharacteristics.aidl b/wifi/java/android/net/wifi/aware/Characteristics.aidl
similarity index 94%
rename from wifi/java/android/net/wifi/aware/WifiAwareCharacteristics.aidl
rename to wifi/java/android/net/wifi/aware/Characteristics.aidl
index a35e71d..77305e9 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareCharacteristics.aidl
+++ b/wifi/java/android/net/wifi/aware/Characteristics.aidl
@@ -16,4 +16,4 @@
package android.net.wifi.aware;
-parcelable WifiAwareCharacteristics;
+parcelable Characteristics;
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareCharacteristics.java b/wifi/java/android/net/wifi/aware/Characteristics.java
similarity index 82%
rename from wifi/java/android/net/wifi/aware/WifiAwareCharacteristics.java
rename to wifi/java/android/net/wifi/aware/Characteristics.java
index 092aa34..70474fd 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareCharacteristics.java
+++ b/wifi/java/android/net/wifi/aware/Characteristics.java
@@ -22,10 +22,8 @@
/**
* The characteristics of the Wi-Fi Aware implementation.
- *
- * @hide PROPOSED_AWARE_API
*/
-public class WifiAwareCharacteristics implements Parcelable {
+public final class Characteristics implements Parcelable {
/** @hide */
public static final String KEY_MAX_SERVICE_NAME_LENGTH = "key_max_service_name_length";
/** @hide */
@@ -37,7 +35,7 @@
private Bundle mCharacteristics = new Bundle();
/** @hide : should not be created by apps */
- public WifiAwareCharacteristics(Bundle characteristics) {
+ public Characteristics(Bundle characteristics) {
mCharacteristics = characteristics;
}
@@ -58,7 +56,7 @@
* message exchange. Restricts the parameters of the
* {@link PublishConfig.Builder#setServiceSpecificInfo(byte[])},
* {@link SubscribeConfig.Builder#setServiceSpecificInfo(byte[])}, and
- * {@link WifiAwareDiscoveryBaseSession#sendMessage(WifiAwareManager.PeerHandle, int, byte[])}
+ * {@link DiscoverySession#sendMessage(PeerHandle, int, byte[])}
* variants.
*
* @return A positive integer, maximum length of byte array for Aware messaging.
@@ -89,17 +87,17 @@
return 0;
}
- public static final Creator<WifiAwareCharacteristics> CREATOR =
- new Creator<WifiAwareCharacteristics>() {
+ public static final Creator<Characteristics> CREATOR =
+ new Creator<Characteristics>() {
@Override
- public WifiAwareCharacteristics createFromParcel(Parcel in) {
- WifiAwareCharacteristics c = new WifiAwareCharacteristics(in.readBundle());
+ public Characteristics createFromParcel(Parcel in) {
+ Characteristics c = new Characteristics(in.readBundle());
return c;
}
@Override
- public WifiAwareCharacteristics[] newArray(int size) {
- return new WifiAwareCharacteristics[size];
+ public Characteristics[] newArray(int size) {
+ return new Characteristics[size];
}
};
}
diff --git a/wifi/java/android/net/wifi/aware/ConfigRequest.java b/wifi/java/android/net/wifi/aware/ConfigRequest.java
index 4b21b15..6a5957b 100644
--- a/wifi/java/android/net/wifi/aware/ConfigRequest.java
+++ b/wifi/java/android/net/wifi/aware/ConfigRequest.java
@@ -22,7 +22,7 @@
/**
* Defines a request object to configure a Wi-Fi Aware network. Built using
* {@link ConfigRequest.Builder}. Configuration is requested using
- * {@link WifiAwareManager#attach(WifiAwareAttachCallback, android.os.Handler)}.
+ * {@link WifiAwareManager#attach(AttachCallback, android.os.Handler)}.
* Note that the actual achieved configuration may be different from the
* requested configuration - since different applications may request different
* configurations.
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareDiscoveryBaseSession.java b/wifi/java/android/net/wifi/aware/DiscoverySession.java
similarity index 78%
rename from wifi/java/android/net/wifi/aware/WifiAwareDiscoveryBaseSession.java
rename to wifi/java/android/net/wifi/aware/DiscoverySession.java
index 2812ad4..adf189b 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareDiscoveryBaseSession.java
+++ b/wifi/java/android/net/wifi/aware/DiscoverySession.java
@@ -18,7 +18,6 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.annotation.SystemApi;
import android.net.wifi.RttManager;
import android.util.Log;
@@ -29,21 +28,19 @@
/**
* A class representing a single publish or subscribe Aware session. This object
* will not be created directly - only its child classes are available:
- * {@link WifiAwarePublishDiscoverySession} and {@link WifiAwareSubscribeDiscoverySession}. This
+ * {@link PublishDiscoverySession} and {@link SubscribeDiscoverySession}. This
* class provides functionality common to both publish and subscribe discovery sessions:
* <ul>
- * <li>Sending messages: {@link #sendMessage(WifiAwareManager.PeerHandle, int, byte[])} or
- * {@link #sendMessage(WifiAwareManager.PeerHandle, int, byte[], int)} methods.
+ * <li>Sending messages: {@link #sendMessage(PeerHandle, int, byte[])} or
+ * {@link #sendMessage(PeerHandle, int, byte[], int)} methods.
* <li>Creating a network-specifier when requesting a Aware connection:
- * {@link #createNetworkSpecifier(WifiAwareManager.PeerHandle, byte[])}.
+ * {@link #createNetworkSpecifier(PeerHandle, byte[])}.
* </ul>
* The {@link #destroy()} method must be called to destroy discovery sessions once they are
* no longer needed.
- *
- * @hide PROPOSED_AWARE_API
*/
-public class WifiAwareDiscoveryBaseSession {
- private static final String TAG = "WifiAwareDiscBaseSsn";
+public class DiscoverySession {
+ private static final String TAG = "DiscoverySession";
private static final boolean DBG = false;
private static final boolean VDBG = false; // STOPSHIP if true
@@ -62,7 +59,7 @@
/**
* Return the maximum permitted retry count when sending messages using
- * {@link #sendMessage(WifiAwareManager.PeerHandle, int, byte[], int)}.
+ * {@link #sendMessage(PeerHandle, int, byte[], int)}.
*
* @return Maximum retry count when sending messages.
*/
@@ -71,7 +68,7 @@
}
/** @hide */
- public WifiAwareDiscoveryBaseSession(WifiAwareManager manager, int clientId, int sessionId) {
+ public DiscoverySession(WifiAwareManager manager, int clientId, int sessionId) {
if (VDBG) {
Log.v(TAG, "New discovery session created: manager=" + manager + ", clientId="
+ clientId + ", sessionId=" + sessionId);
@@ -93,7 +90,7 @@
* This operation must be done on a session which is no longer needed. Otherwise system
* resources will continue to be utilized until the application exits. The only
* exception is a session for which we received a termination callback,
- * {@link WifiAwareDiscoverySessionCallback#onSessionTerminated(int)}.
+ * {@link DiscoverySessionCallback#onSessionTerminated()}.
*/
public void destroy() {
WifiAwareManager mgr = mMgr.get();
@@ -139,23 +136,23 @@
/**
* Sends a message to the specified destination. Aware messages are transmitted in the context
* of a discovery session - executed subsequent to a publish/subscribe
- * {@link WifiAwareDiscoverySessionCallback#onServiceDiscovered(WifiAwareManager.PeerHandle,
+ * {@link DiscoverySessionCallback#onServiceDiscovered(PeerHandle,
* byte[], java.util.List)} event.
* <p>
* Aware messages are not guaranteed delivery. Callbacks on
- * {@link WifiAwareDiscoverySessionCallback} indicate message was transmitted successfully,
- * {@link WifiAwareDiscoverySessionCallback#onMessageSendSucceeded(int)}, or transmission
+ * {@link DiscoverySessionCallback} indicate message was transmitted successfully,
+ * {@link DiscoverySessionCallback#onMessageSendSucceeded(int)}, or transmission
* failed (possibly after several retries) -
- * {@link WifiAwareDiscoverySessionCallback#onMessageSendFailed(int)}.
+ * {@link DiscoverySessionCallback#onMessageSendFailed(int)}.
* <p>
* The peer will get a callback indicating a message was received using
- * {@link WifiAwareDiscoverySessionCallback#onMessageReceived(WifiAwareManager.PeerHandle,
+ * {@link DiscoverySessionCallback#onMessageReceived(PeerHandle,
* byte[])}.
*
* @param peerHandle The peer's handle for the message. Must be a result of an
- * {@link WifiAwareDiscoverySessionCallback#onServiceDiscovered(WifiAwareManager.PeerHandle,
+ * {@link DiscoverySessionCallback#onServiceDiscovered(PeerHandle,
* byte[], java.util.List)} or
- * {@link WifiAwareDiscoverySessionCallback#onMessageReceived(WifiAwareManager.PeerHandle,
+ * {@link DiscoverySessionCallback#onMessageReceived(PeerHandle,
* byte[])} events.
* @param messageId An arbitrary integer used by the caller to identify the message. The same
* integer ID will be returned in the callbacks indicating message send success or
@@ -167,7 +164,7 @@
* (note: no retransmissions are attempted in other failure cases). A value of 0
* indicates no retries. Max permitted value is {@link #getMaxSendRetryCount()}.
*/
- public void sendMessage(@NonNull WifiAwareManager.PeerHandle peerHandle, int messageId,
+ public void sendMessage(@NonNull PeerHandle peerHandle, int messageId,
@Nullable byte[] message, int retryCount) {
if (mTerminated) {
Log.w(TAG, "sendMessage: called on terminated session");
@@ -186,25 +183,25 @@
/**
* Sends a message to the specified destination. Aware messages are transmitted in the context
* of a discovery session - executed subsequent to a publish/subscribe
- * {@link WifiAwareDiscoverySessionCallback#onServiceDiscovered(WifiAwareManager.PeerHandle,
+ * {@link DiscoverySessionCallback#onServiceDiscovered(PeerHandle,
* byte[], java.util.List)} event.
* <p>
* Aware messages are not guaranteed delivery. Callbacks on
- * {@link WifiAwareDiscoverySessionCallback} indicate message was transmitted successfully,
- * {@link WifiAwareDiscoverySessionCallback#onMessageSendSucceeded(int)}, or transmission
+ * {@link DiscoverySessionCallback} indicate message was transmitted successfully,
+ * {@link DiscoverySessionCallback#onMessageSendSucceeded(int)}, or transmission
* failed (possibly after several retries) -
- * {@link WifiAwareDiscoverySessionCallback#onMessageSendFailed(int)}.
+ * {@link DiscoverySessionCallback#onMessageSendFailed(int)}.
* <p>
* The peer will get a callback indicating a message was received using
- * {@link WifiAwareDiscoverySessionCallback#onMessageReceived(WifiAwareManager.PeerHandle,
+ * {@link DiscoverySessionCallback#onMessageReceived(PeerHandle,
* byte[])}.
- * Equivalent to {@link #sendMessage(WifiAwareManager.PeerHandle, int, byte[], int)}
+ * Equivalent to {@link #sendMessage(PeerHandle, int, byte[], int)}
* with a {@code retryCount} of 0.
*
* @param peerHandle The peer's handle for the message. Must be a result of an
- * {@link WifiAwareDiscoverySessionCallback#onServiceDiscovered(WifiAwareManager.PeerHandle,
+ * {@link DiscoverySessionCallback#onServiceDiscovered(PeerHandle,
* byte[], java.util.List)} or
- * {@link WifiAwareDiscoverySessionCallback#onMessageReceived(WifiAwareManager.PeerHandle,
+ * {@link DiscoverySessionCallback#onMessageReceived(PeerHandle,
* byte[])} events.
* @param messageId An arbitrary integer used by the caller to identify the message. The same
* integer ID will be returned in the callbacks indicating message send success or
@@ -212,16 +209,16 @@
* can be arbitrary and non-unique.
* @param message The message to be transmitted.
*/
- public void sendMessage(@NonNull WifiAwareManager.PeerHandle peerHandle, int messageId,
+ public void sendMessage(@NonNull PeerHandle peerHandle, int messageId,
@Nullable byte[] message) {
sendMessage(peerHandle, messageId, message, 0);
}
/**
* Start a ranging operation with the specified peers. The peer IDs are obtained from an
- * {@link WifiAwareDiscoverySessionCallback#onServiceDiscovered(WifiAwareManager.PeerHandle,
+ * {@link DiscoverySessionCallback#onServiceDiscovered(PeerHandle,
* byte[], java.util.List)} or
- * {@link WifiAwareDiscoverySessionCallback#onMessageReceived(WifiAwareManager.PeerHandle,
+ * {@link DiscoverySessionCallback#onMessageReceived(PeerHandle,
* byte[])} operation - can
* only range devices which are part of an ongoing discovery session.
*
@@ -230,7 +227,7 @@
* {@link android.net.wifi.RttManager.RttParams#bssid} member must be set to
* a peer ID - not to a MAC address.
* @param listener The listener to receive the results of the ranging session.
- * @hide PROPOSED_AWARE_SYSTEM_API
+ * @hide
* [TODO: b/28847998 - track RTT API & visilibity]
*/
public void startRanging(RttManager.RttParams[] params, RttManager.RttListener listener) {
@@ -265,9 +262,9 @@
* and a Publisher is a RESPONDER.
*
* @param peerHandle The peer's handle obtained through
- * {@link WifiAwareDiscoverySessionCallback#onServiceDiscovered(WifiAwareManager.PeerHandle,
+ * {@link DiscoverySessionCallback#onServiceDiscovered(PeerHandle,
* byte[], java.util.List)} or
- * {@link WifiAwareDiscoverySessionCallback#onMessageReceived(WifiAwareManager.PeerHandle,
+ * {@link DiscoverySessionCallback#onMessageReceived(PeerHandle,
* byte[])}. On a RESPONDER this value is used to gate the acceptance of a connection request
* from only that peer. A RESPONDER may specified a null - indicating that
* it will accept connection requests from any device.
@@ -283,7 +280,7 @@
* android.net.ConnectivityManager.NetworkCallback)}
* [or other varieties of that API].
*/
- public String createNetworkSpecifier(@Nullable WifiAwareManager.PeerHandle peerHandle,
+ public String createNetworkSpecifier(@Nullable PeerHandle peerHandle,
@Nullable byte[] token) {
if (mTerminated) {
Log.w(TAG, "createNetworkSpecifier: called on terminated session");
@@ -295,7 +292,7 @@
return null;
}
- int role = this instanceof WifiAwareSubscribeDiscoverySession
+ int role = this instanceof SubscribeDiscoverySession
? WifiAwareManager.WIFI_AWARE_DATA_PATH_ROLE_INITIATOR
: WifiAwareManager.WIFI_AWARE_DATA_PATH_ROLE_RESPONDER;
diff --git a/wifi/java/android/net/wifi/aware/DiscoverySessionCallback.java b/wifi/java/android/net/wifi/aware/DiscoverySessionCallback.java
new file mode 100644
index 0000000..33da182
--- /dev/null
+++ b/wifi/java/android/net/wifi/aware/DiscoverySessionCallback.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2016 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.net.wifi.aware;
+
+import android.annotation.NonNull;
+
+import java.util.List;
+
+/**
+ * Base class for Aware session events callbacks. Should be extended by
+ * applications wanting notifications. The callbacks are set when a
+ * publish or subscribe session is created using
+ * {@link WifiAwareSession#publish(PublishConfig, DiscoverySessionCallback,
+ * android.os.Handler)} or
+ * {@link WifiAwareSession#subscribe(SubscribeConfig, DiscoverySessionCallback,
+ * android.os.Handler)}.
+ * <p>
+ * A single callback is set at session creation - it cannot be replaced.
+ */
+public class DiscoverySessionCallback {
+ /**
+ * Called when a publish operation is started successfully in response to a
+ * {@link WifiAwareSession#publish(PublishConfig, DiscoverySessionCallback,
+ * android.os.Handler)} operation.
+ *
+ * @param session The {@link PublishDiscoverySession} used to control the
+ * discovery session.
+ */
+ public void onPublishStarted(@NonNull PublishDiscoverySession session) {
+ /* empty */
+ }
+
+ /**
+ * Called when a subscribe operation is started successfully in response to a
+ * {@link WifiAwareSession#subscribe(SubscribeConfig, DiscoverySessionCallback,
+ * android.os.Handler)} operation.
+ *
+ * @param session The {@link SubscribeDiscoverySession} used to control the
+ * discovery session.
+ */
+ public void onSubscribeStarted(@NonNull SubscribeDiscoverySession session) {
+ /* empty */
+ }
+
+ /**
+ * Called when a publish or subscribe discovery session configuration update request
+ * succeeds. Called in response to
+ * {@link PublishDiscoverySession#updatePublish(PublishConfig)} or
+ * {@link SubscribeDiscoverySession#updateSubscribe(SubscribeConfig)}.
+ */
+ public void onSessionConfigUpdated() {
+ /* empty */
+ }
+
+ /**
+ * Called when a publish or subscribe discovery session cannot be created:
+ * {@link WifiAwareSession#publish(PublishConfig, DiscoverySessionCallback,
+ * android.os.Handler)} or
+ * {@link WifiAwareSession#subscribe(SubscribeConfig, DiscoverySessionCallback,
+ * android.os.Handler)}, or when a configuration update fails:
+ * {@link PublishDiscoverySession#updatePublish(PublishConfig)} or
+ * {@link SubscribeDiscoverySession#updateSubscribe(SubscribeConfig)}.
+ * <p>
+ * For discovery session updates failure leaves the session running with its previous
+ * configuration - the discovery session is not terminated.
+ */
+ public void onSessionConfigFailed() {
+ /* empty */
+ }
+
+ /**
+ * Called when a discovery session (publish or subscribe) terminates. Termination may be due
+ * to user-request (either directly through {@link DiscoverySession#destroy()} or
+ * application-specified expiration, e.g. {@link PublishConfig.Builder#setPublishCount(int)}
+ * or {@link SubscribeConfig.Builder#setTtlSec(int)}).
+ */
+ public void onSessionTerminated() {
+ /* empty */
+ }
+
+ /**
+ * Called when a discovery (publish or subscribe) operation results in a
+ * service discovery.
+ *
+ * @param peerHandle An opaque handle to the peer matching our discovery operation.
+ * @param serviceSpecificInfo The service specific information (arbitrary
+ * byte array) provided by the peer as part of its discovery
+ * configuration.
+ * @param matchFilter The filter which resulted in this service discovery.
+ */
+ public void onServiceDiscovered(PeerHandle peerHandle,
+ byte[] serviceSpecificInfo, List<byte[]> matchFilter) {
+ /* empty */
+ }
+
+ /**
+ * Called in response to
+ * {@link DiscoverySession#sendMessage(PeerHandle, int, byte[])}
+ * when a message is transmitted successfully - i.e. when it was received successfully by the
+ * peer (corresponds to an ACK being received).
+ * <p>
+ * Note that either this callback or
+ * {@link DiscoverySessionCallback#onMessageSendFailed(int)} will be
+ * received - never both.
+ *
+ * @param messageId The arbitrary message ID specified when sending the message.
+ */
+ public void onMessageSendSucceeded(@SuppressWarnings("unused") int messageId) {
+ /* empty */
+ }
+
+ /**
+ * Called when message transmission fails - when no ACK is received from the peer.
+ * Retries when ACKs are not received are done by hardware, MAC, and in the Aware stack (using
+ * the {@link DiscoverySession#sendMessage(PeerHandle, int,
+ * byte[], int)} method) - this event is received after all retries are exhausted.
+ * <p>
+ * Note that either this callback or
+ * {@link DiscoverySessionCallback#onMessageSendSucceeded(int)} will be received
+ * - never both.
+ *
+ * @param messageId The arbitrary message ID specified when sending the message.
+ */
+ public void onMessageSendFailed(@SuppressWarnings("unused") int messageId) {
+ /* empty */
+ }
+
+ /**
+ * Called when a message is received from a discovery session peer - in response to the
+ * peer's {@link DiscoverySession#sendMessage(PeerHandle, int,
+ * byte[])} or {@link DiscoverySession#sendMessage(PeerHandle,
+ * int, byte[], int)}.
+ *
+ * @param peerHandle An opaque handle to the peer matching our discovery operation.
+ * @param message A byte array containing the message.
+ */
+ public void onMessageReceived(PeerHandle peerHandle, byte[] message) {
+ /* empty */
+ }
+}
diff --git a/wifi/java/android/net/wifi/aware/IWifiAwareManager.aidl b/wifi/java/android/net/wifi/aware/IWifiAwareManager.aidl
index 9c92807..794c142 100644
--- a/wifi/java/android/net/wifi/aware/IWifiAwareManager.aidl
+++ b/wifi/java/android/net/wifi/aware/IWifiAwareManager.aidl
@@ -23,7 +23,7 @@
import android.net.wifi.aware.IWifiAwareEventCallback;
import android.net.wifi.aware.PublishConfig;
import android.net.wifi.aware.SubscribeConfig;
-import android.net.wifi.aware.WifiAwareCharacteristics;
+import android.net.wifi.aware.Characteristics;
import android.net.wifi.RttManager;
/**
@@ -37,7 +37,7 @@
void enableUsage();
void disableUsage();
boolean isUsageEnabled();
- WifiAwareCharacteristics getCharacteristics();
+ Characteristics getCharacteristics();
// client API
void connect(in IBinder binder, in String callingPackage, in IWifiAwareEventCallback callback,
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareIdentityChangedListener.java b/wifi/java/android/net/wifi/aware/IdentityChangedListener.java
similarity index 95%
rename from wifi/java/android/net/wifi/aware/WifiAwareIdentityChangedListener.java
rename to wifi/java/android/net/wifi/aware/IdentityChangedListener.java
index e8f52cd4..cae8706 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareIdentityChangedListener.java
+++ b/wifi/java/android/net/wifi/aware/IdentityChangedListener.java
@@ -25,10 +25,8 @@
* interface may also be useful if the application uses alternative (non-Aware) discovery but needs
* to set up a Aware connection. The provided Aware discovery interface MAC address can then be used
* in {@link WifiAwareSession#createNetworkSpecifier(int, byte[], byte[])}.
- *
- * @hide PROPOSED_AWARE_API
*/
-public class WifiAwareIdentityChangedListener {
+public class IdentityChangedListener {
/**
* @param mac The MAC address of the Aware discovery interface. The application must have the
* {@link android.Manifest.permission#ACCESS_COARSE_LOCATION} to get the actual MAC address,
diff --git a/wifi/java/android/net/wifi/aware/PeerHandle.java b/wifi/java/android/net/wifi/aware/PeerHandle.java
new file mode 100644
index 0000000..bbe9f54
--- /dev/null
+++ b/wifi/java/android/net/wifi/aware/PeerHandle.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2016 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.net.wifi.aware;
+
+/**
+ * Opaque object used to represent a Wi-Fi Aware peer. Obtained from discovery sessions in
+ * {@link DiscoverySessionCallback#onServiceDiscovered(PeerHandle, byte[], java.util.List)}, used
+ * when sending messages e,g, {@link PublishDiscoverySession#sendMessage(PeerHandle, int, byte[])},
+ * or when configuring a network link to a peer, e.g.
+ * {@link PublishDiscoverySession#createNetworkSpecifier(PeerHandle, byte[])}.
+ */
+public class PeerHandle {
+ /** @hide */
+ public PeerHandle(int peerId) {
+ this.peerId = peerId;
+ }
+
+ /** @hide */
+ public int peerId;
+}
diff --git a/wifi/java/android/net/wifi/aware/PublishConfig.java b/wifi/java/android/net/wifi/aware/PublishConfig.java
index 3925bd7..a996844 100644
--- a/wifi/java/android/net/wifi/aware/PublishConfig.java
+++ b/wifi/java/android/net/wifi/aware/PublishConfig.java
@@ -33,11 +33,9 @@
/**
* Defines the configuration of a Aware publish session. Built using
* {@link PublishConfig.Builder}. A publish session is created using
- * {@link WifiAwareSession#publish(PublishConfig, WifiAwareDiscoverySessionCallback,
+ * {@link WifiAwareSession#publish(PublishConfig, DiscoverySessionCallback,
* android.os.Handler)} or updated using
- * {@link WifiAwarePublishDiscoverySession#updatePublish(PublishConfig)}.
- *
- * @hide PROPOSED_AWARE_API
+ * {@link PublishDiscoverySession#updatePublish(PublishConfig)}.
*/
public final class PublishConfig implements Parcelable {
/** @hide */
@@ -184,7 +182,7 @@
*
* @hide
*/
- public void assertValid(WifiAwareCharacteristics characteristics)
+ public void assertValid(Characteristics characteristics)
throws IllegalArgumentException {
WifiAwareUtils.validateServiceName(mServiceName);
@@ -322,12 +320,11 @@
* Sets the number of times an unsolicited (configured using
* {@link PublishConfig.Builder#setPublishType(int)}) publish session
* will be broadcast. When the count is reached an event will be
- * generated for {@link WifiAwareDiscoverySessionCallback#onSessionTerminated(int)}
- * with {@link WifiAwareDiscoverySessionCallback#TERMINATE_REASON_DONE} [unless
- * {@link #setTerminateNotificationEnabled(boolean)} disables the callback].
+ * generated for {@link DiscoverySessionCallback#onSessionTerminated()}
+ * [unless {@link #setTerminateNotificationEnabled(boolean)} disables the callback].
* <p>
* Optional. 0 by default - indicating the session doesn't terminate on its own.
- * Session will be terminated when {@link WifiAwareDiscoveryBaseSession#destroy()} is
+ * Session will be terminated when {@link DiscoverySession#destroy()} is
* called.
*
* @param publishCount Number of publish packets to broadcast.
@@ -348,12 +345,11 @@
* {@link PublishConfig.Builder#setPublishType(int)}) publish session
* will be alive - broadcasting a packet. When the TTL is reached
* an event will be generated for
- * {@link WifiAwareDiscoverySessionCallback#onSessionTerminated(int)} with
- * {@link WifiAwareDiscoverySessionCallback#TERMINATE_REASON_DONE} [unless
+ * {@link DiscoverySessionCallback#onSessionTerminated()} [unless
* {@link #setTerminateNotificationEnabled(boolean)} disables the callback].
* <p>
* Optional. 0 by default - indicating the session doesn't terminate on its own.
- * Session will be terminated when {@link WifiAwareDiscoveryBaseSession#destroy()} is
+ * Session will be terminated when {@link DiscoverySession#destroy()} is
* called.
*
* @param ttlSec Lifetime of a publish session in seconds.
@@ -371,7 +367,7 @@
/**
* Configure whether a publish terminate notification
- * {@link WifiAwareDiscoverySessionCallback#onSessionTerminated(int)} is reported
+ * {@link DiscoverySessionCallback#onSessionTerminated()} is reported
* back to the callback.
*
* @param enable If true the terminate callback will be called when the
diff --git a/wifi/java/android/net/wifi/aware/WifiAwarePublishDiscoverySession.java b/wifi/java/android/net/wifi/aware/PublishDiscoverySession.java
similarity index 69%
rename from wifi/java/android/net/wifi/aware/WifiAwarePublishDiscoverySession.java
rename to wifi/java/android/net/wifi/aware/PublishDiscoverySession.java
index 68786d1..1c99c87 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwarePublishDiscoverySession.java
+++ b/wifi/java/android/net/wifi/aware/PublishDiscoverySession.java
@@ -21,32 +21,30 @@
/**
* A class representing a Aware publish session. Created when
- * {@link WifiAwareSession#publish(PublishConfig, WifiAwareDiscoverySessionCallback,
+ * {@link WifiAwareSession#publish(PublishConfig, DiscoverySessionCallback,
* android.os.Handler)} is called and a discovery session is created and returned in
- * {@link WifiAwareDiscoverySessionCallback#onPublishStarted(WifiAwarePublishDiscoverySession)}. See
- * baseline functionality of all discovery sessions in {@link WifiAwareDiscoveryBaseSession}. This
+ * {@link DiscoverySessionCallback#onPublishStarted(PublishDiscoverySession)}. See
+ * baseline functionality of all discovery sessions in {@link DiscoverySession}. This
* object allows updating an existing/running publish discovery session using
* {@link #updatePublish(PublishConfig)}.
- *
- * @hide PROPOSED_AWARE_API
*/
-public class WifiAwarePublishDiscoverySession extends WifiAwareDiscoveryBaseSession {
- private static final String TAG = "WifiAwarePublishDiscSsn";
+public class PublishDiscoverySession extends DiscoverySession {
+ private static final String TAG = "PublishDiscoverySession";
/** @hide */
- public WifiAwarePublishDiscoverySession(WifiAwareManager manager, int clientId, int sessionId) {
+ public PublishDiscoverySession(WifiAwareManager manager, int clientId, int sessionId) {
super(manager, clientId, sessionId);
}
/**
* Re-configure the currently active publish session. The
- * {@link WifiAwareDiscoverySessionCallback} is not replaced - the same listener used
+ * {@link DiscoverySessionCallback} is not replaced - the same listener used
* at creation is still used. The results of the configuration are returned using
- * {@link WifiAwareDiscoverySessionCallback}:
+ * {@link DiscoverySessionCallback}:
* <ul>
- * <li>{@link WifiAwareDiscoverySessionCallback#onSessionConfigUpdated()}: configuration
+ * <li>{@link DiscoverySessionCallback#onSessionConfigUpdated()}: configuration
* update succeeded.
- * <li>{@link WifiAwareDiscoverySessionCallback#onSessionConfigFailed()}: configuration
+ * <li>{@link DiscoverySessionCallback#onSessionConfigFailed()}: configuration
* update failed. The publish discovery session is still running using its previous
* configuration (i.e. update failure does not terminate the session).
* </ul>
diff --git a/wifi/java/android/net/wifi/aware/SubscribeConfig.java b/wifi/java/android/net/wifi/aware/SubscribeConfig.java
index 0fe69a8..3397c4b 100644
--- a/wifi/java/android/net/wifi/aware/SubscribeConfig.java
+++ b/wifi/java/android/net/wifi/aware/SubscribeConfig.java
@@ -33,11 +33,9 @@
/**
* Defines the configuration of a Aware subscribe session. Built using
* {@link SubscribeConfig.Builder}. Subscribe is done using
- * {@link WifiAwareSession#subscribe(SubscribeConfig, WifiAwareDiscoverySessionCallback,
+ * {@link WifiAwareSession#subscribe(SubscribeConfig, DiscoverySessionCallback,
* android.os.Handler)} or
- * {@link WifiAwareSubscribeDiscoverySession#updateSubscribe(SubscribeConfig)}.
- *
- * @hide PROPOSED_AWARE_API
+ * {@link SubscribeDiscoverySession#updateSubscribe(SubscribeConfig)}.
*/
public final class SubscribeConfig implements Parcelable {
/** @hide */
@@ -212,7 +210,7 @@
*
* @hide
*/
- public void assertValid(WifiAwareCharacteristics characteristics)
+ public void assertValid(Characteristics characteristics)
throws IllegalArgumentException {
WifiAwareUtils.validateServiceName(mServiceName);
@@ -355,11 +353,10 @@
* Sets the number of times an active (
* {@link SubscribeConfig.Builder#setSubscribeType(int)}) subscribe session
* will broadcast. When the count is reached an event will be
- * generated for {@link WifiAwareDiscoverySessionCallback#onSessionTerminated(int)}
- * with {@link WifiAwareDiscoverySessionCallback#TERMINATE_REASON_DONE}.
+ * generated for {@link DiscoverySessionCallback#onSessionTerminated()}.
* <p>
* Optional. 0 by default - indicating the session doesn't terminate on its own.
- * Session will be terminated when {@link WifiAwareDiscoveryBaseSession#destroy()} is
+ * Session will be terminated when {@link DiscoverySession#destroy()} is
* called.
*
* @param subscribeCount Number of subscribe packets to broadcast.
@@ -380,11 +377,10 @@
* {@link SubscribeConfig.Builder#setSubscribeType(int)}) subscribe session
* will be alive - i.e. broadcasting a packet. When the TTL is reached
* an event will be generated for
- * {@link WifiAwareDiscoverySessionCallback#onSessionTerminated(int)} with
- * {@link WifiAwareDiscoverySessionCallback#TERMINATE_REASON_DONE}.
+ * {@link DiscoverySessionCallback#onSessionTerminated()}.
* <p>
* Optional. 0 by default - indicating the session doesn't terminate on its own.
- * Session will be terminated when {@link WifiAwareDiscoveryBaseSession#destroy()} is
+ * Session will be terminated when {@link DiscoverySession#destroy()} is
* called.
*
* @param ttlSec Lifetime of a subscribe session in seconds.
@@ -404,8 +400,8 @@
* Sets the match style of the subscription - how are matches from a
* single match session (corresponding to the same publish action on the
* peer) reported to the host (using the
- * {@link WifiAwareDiscoverySessionCallback#onServiceDiscovered(WifiAwareManager.PeerHandle,
- * byte[], List)}). The options are: only report the first match and ignore the rest
+ * {@link DiscoverySessionCallback#onServiceDiscovered(PeerHandle, byte[],
+ * java.util.List)}). The options are: only report the first match and ignore the rest
* {@link SubscribeConfig#MATCH_STYLE_FIRST_ONLY} or report every single
* match {@link SubscribeConfig#MATCH_STYLE_ALL} (the default).
*
@@ -424,7 +420,7 @@
/**
* Configure whether a subscribe terminate notification
- * {@link WifiAwareDiscoverySessionCallback#onSessionTerminated(int)} is reported
+ * {@link DiscoverySessionCallback#onSessionTerminated()} is reported
* back to the callback.
*
* @param enable If true the terminate callback will be called when the
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareSubscribeDiscoverySession.java b/wifi/java/android/net/wifi/aware/SubscribeDiscoverySession.java
similarity index 74%
rename from wifi/java/android/net/wifi/aware/WifiAwareSubscribeDiscoverySession.java
rename to wifi/java/android/net/wifi/aware/SubscribeDiscoverySession.java
index a0ec809..ca88a90 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareSubscribeDiscoverySession.java
+++ b/wifi/java/android/net/wifi/aware/SubscribeDiscoverySession.java
@@ -22,35 +22,33 @@
/**
* A class representing a Aware subscribe session. Created when
* {@link WifiAwareSession#subscribe(SubscribeConfig,
- * WifiAwareDiscoverySessionCallback, android.os.Handler)}
+ * DiscoverySessionCallback, android.os.Handler)}
* is called and a discovery session is created and returned in
- * {@link WifiAwareDiscoverySessionCallback#onSubscribeStarted(WifiAwareSubscribeDiscoverySession)}.
- * See baseline functionality of all discovery sessions in {@link WifiAwareDiscoveryBaseSession}.
+ * {@link DiscoverySessionCallback#onSubscribeStarted(SubscribeDiscoverySession)}.
+ * See baseline functionality of all discovery sessions in {@link DiscoverySession}.
* This object allows updating an existing/running subscribe discovery session using
* {@link #updateSubscribe(SubscribeConfig)}.
- *
- * @hide PROPOSED_AWARE_API
*/
-public class WifiAwareSubscribeDiscoverySession extends WifiAwareDiscoveryBaseSession {
- private static final String TAG = "WifiAwareSubsDiscSsn";
+public class SubscribeDiscoverySession extends DiscoverySession {
+ private static final String TAG = "SubscribeDiscSession";
/**
* {@hide}
*/
- public WifiAwareSubscribeDiscoverySession(WifiAwareManager manager, int clientId,
+ public SubscribeDiscoverySession(WifiAwareManager manager, int clientId,
int sessionId) {
super(manager, clientId, sessionId);
}
/**
* Re-configure the currently active subscribe session. The
- * {@link WifiAwareDiscoverySessionCallback} is not replaced - the same listener used
+ * {@link DiscoverySessionCallback} is not replaced - the same listener used
* at creation is still used. The results of the configuration are returned using
- * {@link WifiAwareDiscoverySessionCallback}:
+ * {@link DiscoverySessionCallback}:
* <ul>
- * <li>{@link WifiAwareDiscoverySessionCallback#onSessionConfigUpdated()}: configuration
+ * <li>{@link DiscoverySessionCallback#onSessionConfigUpdated()}: configuration
* update succeeded.
- * <li>{@link WifiAwareDiscoverySessionCallback#onSessionConfigFailed()}: configuration
+ * <li>{@link DiscoverySessionCallback#onSessionConfigFailed()}: configuration
* update failed. The subscribe discovery session is still running using its previous
* configuration (i.e. update failure does not terminate the session).
* </ul>
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareDiscoverySessionCallback.java b/wifi/java/android/net/wifi/aware/WifiAwareDiscoverySessionCallback.java
deleted file mode 100644
index fdf0d01..0000000
--- a/wifi/java/android/net/wifi/aware/WifiAwareDiscoverySessionCallback.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright (C) 2016 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.net.wifi.aware;
-
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.List;
-
-/**
- * Base class for Aware session events callbacks. Should be extended by
- * applications wanting notifications. The callbacks are set when a
- * publish or subscribe session is created using
- * {@link WifiAwareSession#publish(PublishConfig, WifiAwareDiscoverySessionCallback,
- * android.os.Handler)} or
- * {@link WifiAwareSession#subscribe(SubscribeConfig, WifiAwareDiscoverySessionCallback,
- * android.os.Handler)}.
- * <p>
- * A single callback is set at session creation - it cannot be replaced.
- *
- * @hide PROPOSED_AWARE_API
- */
-public class WifiAwareDiscoverySessionCallback {
- /** @hide */
- @IntDef({
- TERMINATE_REASON_DONE, TERMINATE_REASON_FAIL })
- @Retention(RetentionPolicy.SOURCE)
- public @interface SessionTerminateCodes {
- }
-
- /**
- * Indicates that publish or subscribe session is done - all the
- * requested operations (per {@link PublishConfig} or
- * {@link SubscribeConfig}) have been executed. Failure reason flag for
- * {@link WifiAwareDiscoverySessionCallback#onSessionTerminated(int)} callback.
- */
- public static final int TERMINATE_REASON_DONE = 100;
-
- /**
- * Indicates that publish or subscribe session is terminated due to a
- * failure.
- * Failure reason flag for
- * {@link WifiAwareDiscoverySessionCallback#onSessionTerminated(int)} callback.
- */
- public static final int TERMINATE_REASON_FAIL = 101;
-
- /**
- * Called when a publish operation is started successfully in response to a
- * {@link WifiAwareSession#publish(PublishConfig, WifiAwareDiscoverySessionCallback,
- * android.os.Handler)} operation.
- *
- * @param session The {@link WifiAwarePublishDiscoverySession} used to control the
- * discovery session.
- */
- public void onPublishStarted(@NonNull WifiAwarePublishDiscoverySession session) {
- /* empty */
- }
-
- /**
- * Called when a subscribe operation is started successfully in response to a
- * {@link WifiAwareSession#subscribe(SubscribeConfig, WifiAwareDiscoverySessionCallback,
- * android.os.Handler)} operation.
- *
- * @param session The {@link WifiAwareSubscribeDiscoverySession} used to control the
- * discovery session.
- */
- public void onSubscribeStarted(@NonNull WifiAwareSubscribeDiscoverySession session) {
- /* empty */
- }
-
- /**
- * Called when a publish or subscribe discovery session configuration update request
- * succeeds. Called in response to
- * {@link WifiAwarePublishDiscoverySession#updatePublish(PublishConfig)} or
- * {@link WifiAwareSubscribeDiscoverySession#updateSubscribe(SubscribeConfig)}.
- */
- public void onSessionConfigUpdated() {
- /* empty */
- }
-
- /**
- * Called when a publish or subscribe discovery session cannot be created:
- * {@link WifiAwareSession#publish(PublishConfig, WifiAwareDiscoverySessionCallback,
- * android.os.Handler)} or
- * {@link WifiAwareSession#subscribe(SubscribeConfig, WifiAwareDiscoverySessionCallback,
- * android.os.Handler)}, or when a configuration update fails:
- * {@link WifiAwarePublishDiscoverySession#updatePublish(PublishConfig)} or
- * {@link WifiAwareSubscribeDiscoverySession#updateSubscribe(SubscribeConfig)}.
- * <p>
- * For discovery session updates failure leaves the session running with its previous
- * configuration - the discovery session is not terminated.
- */
- public void onSessionConfigFailed() {
- /* empty */
- }
-
- /**
- * Called when a discovery session (publish or subscribe) terminates. Termination may be due
- * to user-request (either directly through {@link WifiAwareDiscoveryBaseSession#destroy()} or
- * application-specified expiration, e.g. {@link PublishConfig.Builder#setPublishCount(int)}
- * or {@link SubscribeConfig.Builder#setTtlSec(int)}) or due to a failure.
- *
- * @param reason The termination reason using
- * {@code WifiAwareDiscoverySessionCallback.TERMINATE_*} codes.
- */
- public void onSessionTerminated(@SessionTerminateCodes int reason) {
- /* empty */
- }
-
- /**
- * Called when a discovery (publish or subscribe) operation results in a
- * service discovery.
- *
- * @param peerHandle An opaque handle to the peer matching our discovery operation.
- * @param serviceSpecificInfo The service specific information (arbitrary
- * byte array) provided by the peer as part of its discovery
- * configuration.
- * @param matchFilter The filter which resulted in this service discovery.
- */
- public void onServiceDiscovered(WifiAwareManager.PeerHandle peerHandle,
- byte[] serviceSpecificInfo, List<byte[]> matchFilter) {
- /* empty */
- }
-
- /**
- * Called in response to
- * {@link WifiAwareDiscoveryBaseSession#sendMessage(WifiAwareManager.PeerHandle, int, byte[])}
- * when a message is transmitted successfully - i.e. when it was received successfully by the
- * peer (corresponds to an ACK being received).
- * <p>
- * Note that either this callback or
- * {@link WifiAwareDiscoverySessionCallback#onMessageSendFailed(int)} will be
- * received - never both.
- *
- * @param messageId The arbitrary message ID specified when sending the message.
- */
- public void onMessageSendSucceeded(@SuppressWarnings("unused") int messageId) {
- /* empty */
- }
-
- /**
- * Called when message transmission fails - when no ACK is received from the peer.
- * Retries when ACKs are not received are done by hardware, MAC, and in the Aware stack (using
- * the {@link WifiAwareDiscoveryBaseSession#sendMessage(WifiAwareManager.PeerHandle, int,
- * byte[], int)} method) - this event is received after all retries are exhausted.
- * <p>
- * Note that either this callback or
- * {@link WifiAwareDiscoverySessionCallback#onMessageSendSucceeded(int)} will be received
- * - never both.
- *
- * @param messageId The arbitrary message ID specified when sending the message.
- */
- public void onMessageSendFailed(@SuppressWarnings("unused") int messageId) {
- /* empty */
- }
-
- /**
- * Called when a message is received from a discovery session peer - in response to the
- * peer's {@link WifiAwareDiscoveryBaseSession#sendMessage(WifiAwareManager.PeerHandle, int,
- * byte[])} or {@link WifiAwareDiscoveryBaseSession#sendMessage(WifiAwareManager.PeerHandle,
- * int, byte[], int)}.
- *
- * @param peerHandle An opaque handle to the peer matching our discovery operation.
- * @param message A byte array containing the message.
- */
- public void onMessageReceived(WifiAwareManager.PeerHandle peerHandle, byte[] message) {
- /* empty */
- }
-}
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareManager.java b/wifi/java/android/net/wifi/aware/WifiAwareManager.java
index 029794d..043925ed 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareManager.java
+++ b/wifi/java/android/net/wifi/aware/WifiAwareManager.java
@@ -58,14 +58,14 @@
* The class provides access to:
* <ul>
* <li>Initialize a Aware cluster (peer-to-peer synchronization). Refer to
- * {@link #attach(WifiAwareAttachCallback, Handler)}.
+ * {@link #attach(AttachCallback, Handler)}.
* <li>Create discovery sessions (publish or subscribe sessions). Refer to
- * {@link WifiAwareSession#publish(PublishConfig, WifiAwareDiscoverySessionCallback, Handler)} and
- * {@link WifiAwareSession#subscribe(SubscribeConfig, WifiAwareDiscoverySessionCallback, Handler)}.
+ * {@link WifiAwareSession#publish(PublishConfig, DiscoverySessionCallback, Handler)} and
+ * {@link WifiAwareSession#subscribe(SubscribeConfig, DiscoverySessionCallback, Handler)}.
* <li>Create a Aware network specifier to be used with
* {@link ConnectivityManager#requestNetwork(NetworkRequest, ConnectivityManager.NetworkCallback)}
* to set-up a Aware connection with a peer. Refer to
- * {@link WifiAwareDiscoveryBaseSession#createNetworkSpecifier(PeerHandle, byte[])} and
+ * {@link DiscoverySession#createNetworkSpecifier(PeerHandle, byte[])} and
* {@link WifiAwareSession#createNetworkSpecifier(int, byte[], byte[])}.
* </ul>
* <p>
@@ -75,37 +75,37 @@
* broadcast. Note that this broadcast is not sticky - you should register for it and then
* check the above API to avoid a race condition.
* <p>
- * An application must use {@link #attach(WifiAwareAttachCallback, Handler)} to initialize a
+ * An application must use {@link #attach(AttachCallback, Handler)} to initialize a
* Aware cluster - before making any other Aware operation. Aware cluster membership is a
* device-wide operation - the API guarantees that the device is in a cluster or joins a
* Aware cluster (or starts one if none can be found). Information about attach success (or
- * failure) are returned in callbacks of {@link WifiAwareAttachCallback}. Proceed with Aware
+ * failure) are returned in callbacks of {@link AttachCallback}. Proceed with Aware
* discovery or connection setup only after receiving confirmation that Aware attach
- * succeeded - {@link WifiAwareAttachCallback#onAttached(WifiAwareSession)}. When an
+ * succeeded - {@link AttachCallback#onAttached(WifiAwareSession)}. When an
* application is finished using Aware it <b>must</b> use the
* {@link WifiAwareSession#destroy()} API to indicate to the Aware service that the device
* may detach from the Aware cluster. The device will actually disable Aware once the last
* application detaches.
* <p>
* Once a Aware attach is confirmed use the
- * {@link WifiAwareSession#publish(PublishConfig, WifiAwareDiscoverySessionCallback, Handler)}
+ * {@link WifiAwareSession#publish(PublishConfig, DiscoverySessionCallback, Handler)}
* or
- * {@link WifiAwareSession#subscribe(SubscribeConfig, WifiAwareDiscoverySessionCallback,
+ * {@link WifiAwareSession#subscribe(SubscribeConfig, DiscoverySessionCallback,
* Handler)} to create publish or subscribe Aware discovery sessions. Events are called on the
- * provided callback object {@link WifiAwareDiscoverySessionCallback}. Specifically, the
- * {@link WifiAwareDiscoverySessionCallback#onPublishStarted(WifiAwarePublishDiscoverySession)}
+ * provided callback object {@link DiscoverySessionCallback}. Specifically, the
+ * {@link DiscoverySessionCallback#onPublishStarted(PublishDiscoverySession)}
* and
- * {@link WifiAwareDiscoverySessionCallback#onSubscribeStarted(
- * WifiAwareSubscribeDiscoverySession)}
- * return {@link WifiAwarePublishDiscoverySession} and
- * {@link WifiAwareSubscribeDiscoverySession}
+ * {@link DiscoverySessionCallback#onSubscribeStarted(
+ *SubscribeDiscoverySession)}
+ * return {@link PublishDiscoverySession} and
+ * {@link SubscribeDiscoverySession}
* objects respectively on which additional session operations can be performed, e.g. updating
- * the session {@link WifiAwarePublishDiscoverySession#updatePublish(PublishConfig)} and
- * {@link WifiAwareSubscribeDiscoverySession#updateSubscribe(SubscribeConfig)}. Sessions can
+ * the session {@link PublishDiscoverySession#updatePublish(PublishConfig)} and
+ * {@link SubscribeDiscoverySession#updateSubscribe(SubscribeConfig)}. Sessions can
* also be used to send messages using the
- * {@link WifiAwareDiscoveryBaseSession#sendMessage(PeerHandle, int, byte[])} APIs. When an
+ * {@link DiscoverySession#sendMessage(PeerHandle, int, byte[])} APIs. When an
* application is finished with a discovery session it <b>must</b> terminate it using the
- * {@link WifiAwareDiscoveryBaseSession#destroy()} API.
+ * {@link DiscoverySession#destroy()} API.
* <p>
* Creating connections between Aware devices is managed by the standard
* {@link ConnectivityManager#requestNetwork(NetworkRequest,
@@ -116,10 +116,8 @@
* {@link android.net.NetworkCapabilities#TRANSPORT_WIFI_AWARE}.
* <li>{@link NetworkRequest.Builder#setNetworkSpecifier(String)} using
* {@link WifiAwareSession#createNetworkSpecifier(int, byte[], byte[])} or
- * {@link WifiAwareDiscoveryBaseSession#createNetworkSpecifier(PeerHandle, byte[])}.
+ * {@link DiscoverySession#createNetworkSpecifier(PeerHandle, byte[])}.
* </ul>
- *
- * @hide PROPOSED_AWARE_API
*/
public class WifiAwareManager {
private static final String TAG = "WifiAwareManager";
@@ -226,7 +224,7 @@
* Connection creation role is that of INITIATOR. Used to create a network specifier string
* when requesting a Aware network.
*
- * @see WifiAwareDiscoveryBaseSession#createNetworkSpecifier(PeerHandle, byte[])
+ * @see DiscoverySession#createNetworkSpecifier(PeerHandle, byte[])
* @see WifiAwareSession#createNetworkSpecifier(int, byte[], byte[])
*/
public static final int WIFI_AWARE_DATA_PATH_ROLE_INITIATOR = 0;
@@ -235,7 +233,7 @@
* Connection creation role is that of RESPONDER. Used to create a network specifier string
* when requesting a Aware network.
*
- * @see WifiAwareDiscoveryBaseSession#createNetworkSpecifier(PeerHandle, byte[])
+ * @see DiscoverySession#createNetworkSpecifier(PeerHandle, byte[])
* @see WifiAwareSession#createNetworkSpecifier(int, byte[], byte[])
*/
public static final int WIFI_AWARE_DATA_PATH_ROLE_RESPONDER = 1;
@@ -305,9 +303,8 @@
* limitations on configurations, e.g. the maximum service name length.
*
* @return An object specifying configuration limitations of Aware.
- * @hide PROPOSED_AWARE_API
*/
- public WifiAwareCharacteristics getCharacteristics() {
+ public Characteristics getCharacteristics() {
try {
return mService.getCharacteristics();
} catch (RemoteException e) {
@@ -328,12 +325,12 @@
* attachCallback}.
*
* @param attachCallback A callback for attach events, extended from
- * {@link WifiAwareAttachCallback}.
+ * {@link AttachCallback}.
* @param handler The Handler on whose thread to execute the callbacks of the {@code
* attachCallback} object. If a null is provided then the application's main thread will be
* used.
*/
- public void attach(@NonNull WifiAwareAttachCallback attachCallback, @Nullable Handler handler) {
+ public void attach(@NonNull AttachCallback attachCallback, @Nullable Handler handler) {
attach(handler, null, attachCallback, null);
}
@@ -353,28 +350,28 @@
* on startup and whenever it is updated (it is randomized at regular intervals for privacy).
* The application must have the {@link android.Manifest.permission#ACCESS_COARSE_LOCATION}
* permission to execute this attach request. Otherwise, use the
- * {@link #attach(WifiAwareAttachCallback, Handler)} version. Note that aside from permission
+ * {@link #attach(AttachCallback, Handler)} version. Note that aside from permission
* requirements this listener will wake up the host at regular intervals causing higher power
* consumption, do not use it unless the information is necessary (e.g. for OOB discovery).
*
* @param attachCallback A callback for attach events, extended from
- * {@link WifiAwareAttachCallback}.
+ * {@link AttachCallback}.
* @param identityChangedListener A listener for changed identity, extended from
- * {@link WifiAwareIdentityChangedListener}.
+ * {@link IdentityChangedListener}.
* @param handler The Handler on whose thread to execute the callbacks of the {@code
* attachCallback} and {@code identityChangedListener} objects. If a null is provided then the
* application's main thread will be used.
*/
- public void attach(@NonNull WifiAwareAttachCallback attachCallback,
- @NonNull WifiAwareIdentityChangedListener identityChangedListener,
+ public void attach(@NonNull AttachCallback attachCallback,
+ @NonNull IdentityChangedListener identityChangedListener,
@Nullable Handler handler) {
attach(handler, null, attachCallback, identityChangedListener);
}
/** @hide */
public void attach(Handler handler, ConfigRequest configRequest,
- WifiAwareAttachCallback attachCallback,
- WifiAwareIdentityChangedListener identityChangedListener) {
+ AttachCallback attachCallback,
+ IdentityChangedListener identityChangedListener) {
if (VDBG) {
Log.v(TAG, "attach(): handler=" + handler + ", callback=" + attachCallback
+ ", configRequest=" + configRequest + ", identityChangedListener="
@@ -409,7 +406,7 @@
/** @hide */
public void publish(int clientId, Looper looper, PublishConfig publishConfig,
- WifiAwareDiscoverySessionCallback callback) {
+ DiscoverySessionCallback callback) {
if (VDBG) Log.v(TAG, "publish(): clientId=" + clientId + ", config=" + publishConfig);
try {
@@ -437,7 +434,7 @@
/** @hide */
public void subscribe(int clientId, Looper looper, SubscribeConfig subscribeConfig,
- WifiAwareDiscoverySessionCallback callback) {
+ DiscoverySessionCallback callback) {
if (VDBG) {
if (VDBG) {
Log.v(TAG,
@@ -672,14 +669,14 @@
}
/**
- * Constructs a {@link WifiAwareAttachCallback} using the specified looper.
+ * Constructs a {@link AttachCallback} using the specified looper.
* All callbacks will delivered on the thread of the specified looper.
*
* @param looper The looper on which to execute the callbacks.
*/
WifiAwareEventCallbackProxy(WifiAwareManager mgr, Looper looper, Binder binder,
- final WifiAwareAttachCallback attachCallback,
- final WifiAwareIdentityChangedListener identityChangedListener) {
+ final AttachCallback attachCallback,
+ final IdentityChangedListener identityChangedListener) {
mAwareManager = new WeakReference<>(mgr);
mLooper = looper;
mBinder = binder;
@@ -828,14 +825,14 @@
private final WeakReference<WifiAwareManager> mAwareManager;
private final boolean mIsPublish;
- private final WifiAwareDiscoverySessionCallback mOriginalCallback;
+ private final DiscoverySessionCallback mOriginalCallback;
private final int mClientId;
private final Handler mHandler;
- private WifiAwareDiscoveryBaseSession mSession;
+ private DiscoverySession mSession;
WifiAwareDiscoverySessionCallbackProxy(WifiAwareManager mgr, Looper looper,
- boolean isPublish, WifiAwareDiscoverySessionCallback originalCallback,
+ boolean isPublish, DiscoverySessionCallback originalCallback,
int clientId) {
mAwareManager = new WeakReference<>(mgr);
mIsPublish = isPublish;
@@ -1006,13 +1003,13 @@
}
if (mIsPublish) {
- WifiAwarePublishDiscoverySession session = new WifiAwarePublishDiscoverySession(mgr,
+ PublishDiscoverySession session = new PublishDiscoverySession(mgr,
mClientId, sessionId);
mSession = session;
mOriginalCallback.onPublishStarted(session);
} else {
- WifiAwareSubscribeDiscoverySession
- session = new WifiAwareSubscribeDiscoverySession(mgr, mClientId, sessionId);
+ SubscribeDiscoverySession
+ session = new SubscribeDiscoverySession(mgr, mClientId, sessionId);
mSession = session;
mOriginalCallback.onSubscribeStarted(session);
}
@@ -1027,18 +1024,7 @@
Log.w(TAG, "Proxy: onSessionTerminated called but mSession is null!?");
}
mAwareManager.clear();
- mOriginalCallback.onSessionTerminated(reason);
+ mOriginalCallback.onSessionTerminated();
}
}
-
- /** @hide PROPOSED_AWARE_API */
- public static class PeerHandle {
- /** @hide */
- public PeerHandle(int peerId) {
- this.peerId = peerId;
- }
-
- /** @hide */
- public int peerId;
- }
}
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareSession.java b/wifi/java/android/net/wifi/aware/WifiAwareSession.java
index 005895a..8696920 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareSession.java
+++ b/wifi/java/android/net/wifi/aware/WifiAwareSession.java
@@ -30,8 +30,6 @@
/**
* This class represents a Wi-Fi Aware session - an attachment to the Wi-Fi Aware service through
* which the app can execute discovery operations.
- *
- * @hide PROPOSED_AWARE_API
*/
public class WifiAwareSession {
private static final String TAG = "WifiAwareSession";
@@ -65,7 +63,7 @@
* session-wide destroy.
* <p>
* An application may re-attach after a destroy using
- * {@link WifiAwareManager#attach(WifiAwareAttachCallback, Handler)} .
+ * {@link WifiAwareManager#attach(AttachCallback, Handler)} .
*/
public void destroy() {
WifiAwareManager mgr = mMgr.get();
@@ -95,22 +93,22 @@
/**
* Issue a request to the Aware service to create a new Aware publish discovery session, using
* the specified {@code publishConfig} configuration. The results of the publish operation
- * are routed to the callbacks of {@link WifiAwareDiscoverySessionCallback}:
+ * are routed to the callbacks of {@link DiscoverySessionCallback}:
* <ul>
* <li>
- * {@link WifiAwareDiscoverySessionCallback#onPublishStarted(
- * WifiAwarePublishDiscoverySession)}
+ * {@link DiscoverySessionCallback#onPublishStarted(
+ *PublishDiscoverySession)}
* is called when the publish session is created and provides a handle to the session.
* Further operations on the publish session can be executed on that object.
- * <li>{@link WifiAwareDiscoverySessionCallback#onSessionConfigFailed()} is called if the
+ * <li>{@link DiscoverySessionCallback#onSessionConfigFailed()} is called if the
* publish operation failed.
* </ul>
* <p>
* Other results of the publish session operations will also be routed to callbacks
* on the {@code callback} object. The resulting publish session can be modified using
- * {@link WifiAwarePublishDiscoverySession#updatePublish(PublishConfig)}.
+ * {@link PublishDiscoverySession#updatePublish(PublishConfig)}.
* <p>
- * An application must use the {@link WifiAwareDiscoveryBaseSession#destroy()} to
+ * An application must use the {@link DiscoverySession#destroy()} to
* terminate the publish discovery session once it isn't needed. This will free
* resources as well terminate any on-air transmissions.
* <p>The application must have the {@link android.Manifest.permission#ACCESS_COARSE_LOCATION}
@@ -118,13 +116,13 @@
*
* @param publishConfig The {@link PublishConfig} specifying the
* configuration of the requested publish session.
- * @param callback A {@link WifiAwareDiscoverySessionCallback} derived object to be used for
+ * @param callback A {@link DiscoverySessionCallback} derived object to be used for
* session event callbacks.
* @param handler The Handler on whose thread to execute the callbacks of the {@code
* callback} object. If a null is provided then the application's main thread will be used.
*/
public void publish(@NonNull PublishConfig publishConfig,
- @NonNull WifiAwareDiscoverySessionCallback callback, @Nullable Handler handler) {
+ @NonNull DiscoverySessionCallback callback, @Nullable Handler handler) {
WifiAwareManager mgr = mMgr.get();
if (mgr == null) {
Log.e(TAG, "publish: called post GC on WifiAwareManager");
@@ -141,22 +139,22 @@
/**
* Issue a request to the Aware service to create a new Aware subscribe discovery session, using
* the specified {@code subscribeConfig} configuration. The results of the subscribe
- * operation are routed to the callbacks of {@link WifiAwareDiscoverySessionCallback}:
+ * operation are routed to the callbacks of {@link DiscoverySessionCallback}:
* <ul>
* <li>
- * {@link WifiAwareDiscoverySessionCallback#onSubscribeStarted(
- * WifiAwareSubscribeDiscoverySession)}
+ * {@link DiscoverySessionCallback#onSubscribeStarted(
+ *SubscribeDiscoverySession)}
* is called when the subscribe session is created and provides a handle to the session.
* Further operations on the subscribe session can be executed on that object.
- * <li>{@link WifiAwareDiscoverySessionCallback#onSessionConfigFailed()} is called if the
+ * <li>{@link DiscoverySessionCallback#onSessionConfigFailed()} is called if the
* subscribe operation failed.
* </ul>
* <p>
* Other results of the subscribe session operations will also be routed to callbacks
* on the {@code callback} object. The resulting subscribe session can be modified using
- * {@link WifiAwareSubscribeDiscoverySession#updateSubscribe(SubscribeConfig)}.
+ * {@link SubscribeDiscoverySession#updateSubscribe(SubscribeConfig)}.
* <p>
- * An application must use the {@link WifiAwareDiscoveryBaseSession#destroy()} to
+ * An application must use the {@link DiscoverySession#destroy()} to
* terminate the subscribe discovery session once it isn't needed. This will free
* resources as well terminate any on-air transmissions.
* <p>The application must have the {@link android.Manifest.permission#ACCESS_COARSE_LOCATION}
@@ -164,13 +162,13 @@
*
* @param subscribeConfig The {@link SubscribeConfig} specifying the
* configuration of the requested subscribe session.
- * @param callback A {@link WifiAwareDiscoverySessionCallback} derived object to be used for
+ * @param callback A {@link DiscoverySessionCallback} derived object to be used for
* session event callbacks.
* @param handler The Handler on whose thread to execute the callbacks of the {@code
* callback} object. If a null is provided then the application's main thread will be used.
*/
public void subscribe(@NonNull SubscribeConfig subscribeConfig,
- @NonNull WifiAwareDiscoverySessionCallback callback, @Nullable Handler handler) {
+ @NonNull DiscoverySessionCallback callback, @Nullable Handler handler) {
WifiAwareManager mgr = mMgr.get();
if (mgr == null) {
Log.e(TAG, "publish: called post GC on WifiAwareManager");
@@ -193,7 +191,7 @@
* This API is targeted for applications which can obtain the peer MAC address using OOB
* (out-of-band) discovery. Aware discovery does not provide the MAC address of the peer -
* when using Aware discovery use the alternative network specifier method -
- * {@link WifiAwareDiscoveryBaseSession#createNetworkSpecifier(WifiAwareManager.PeerHandle,
+ * {@link DiscoverySession#createNetworkSpecifier(PeerHandle,
* byte[])}.
*
* @param role The role of this device:
diff --git a/wifi/java/android/net/wifi/aware/package.html b/wifi/java/android/net/wifi/aware/package.html
index 1a990d8..d5d962f6 100644
--- a/wifi/java/android/net/wifi/aware/package.html
+++ b/wifi/java/android/net/wifi/aware/package.html
@@ -23,7 +23,7 @@
If your application only works with Wi-Fi Aware (i.e. it should only be installed on devices which
support Wi-Fi Aware), declare so with a <a
href="{@docRoot}guide/topics/manifest/uses-feature-element.html">
- {@code <uses-feature>}</a>
+ {@code <uses-feature>}</a>
element in the manifest file:</p>
<pre>
<manifest ...>
diff --git a/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java b/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java
index 24c0127..a396d87 100644
--- a/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java
+++ b/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java
@@ -67,19 +67,19 @@
public Context mockContext;
@Mock
- public WifiAwareAttachCallback mockCallback;
+ public AttachCallback mockCallback;
@Mock
- public WifiAwareDiscoverySessionCallback mockSessionCallback;
+ public DiscoverySessionCallback mockSessionCallback;
@Mock
public IWifiAwareManager mockAwareService;
@Mock
- public WifiAwarePublishDiscoverySession mockPublishSession;
+ public PublishDiscoverySession mockPublishSession;
@Mock
- public WifiAwareSubscribeDiscoverySession mockSubscribeSession;
+ public SubscribeDiscoverySession mockSubscribeSession;
@Mock
public RttManager.RttListener mockRttListener;
@@ -276,7 +276,7 @@
final int sessionId = 123;
final ConfigRequest configRequest = new ConfigRequest.Builder().build();
final PublishConfig publishConfig = new PublishConfig.Builder().build();
- final WifiAwareManager.PeerHandle peerHandle = new WifiAwareManager.PeerHandle(873);
+ final PeerHandle peerHandle = new PeerHandle(873);
final String string1 = "hey from here...";
final byte[] matchFilter = { 1, 12, 2, 31, 32 };
final int messageId = 2123;
@@ -290,10 +290,9 @@
.forClass(IWifiAwareEventCallback.class);
ArgumentCaptor<IWifiAwareDiscoverySessionCallback> sessionProxyCallback = ArgumentCaptor
.forClass(IWifiAwareDiscoverySessionCallback.class);
- ArgumentCaptor<WifiAwarePublishDiscoverySession> publishSession = ArgumentCaptor
- .forClass(WifiAwarePublishDiscoverySession.class);
- ArgumentCaptor<WifiAwareManager.PeerHandle> peerIdCaptor = ArgumentCaptor.forClass(
- WifiAwareManager.PeerHandle.class);
+ ArgumentCaptor<PublishDiscoverySession> publishSession = ArgumentCaptor
+ .forClass(PublishDiscoverySession.class);
+ ArgumentCaptor<PeerHandle> peerIdCaptor = ArgumentCaptor.forClass(PeerHandle.class);
ArgumentCaptor<List<byte[]>> matchFilterCaptor = ArgumentCaptor.forClass(
(Class) List.class);
@@ -377,7 +376,6 @@
final int sessionId = 123;
final ConfigRequest configRequest = new ConfigRequest.Builder().build();
final PublishConfig publishConfig = new PublishConfig.Builder().build();
- final int reason = WifiAwareDiscoverySessionCallback.TERMINATE_REASON_DONE;
InOrder inOrder = inOrder(mockCallback, mockSessionCallback, mockAwareService,
mockPublishSession);
@@ -387,8 +385,8 @@
.forClass(IWifiAwareEventCallback.class);
ArgumentCaptor<IWifiAwareDiscoverySessionCallback> sessionProxyCallback = ArgumentCaptor
.forClass(IWifiAwareDiscoverySessionCallback.class);
- ArgumentCaptor<WifiAwarePublishDiscoverySession> publishSession = ArgumentCaptor
- .forClass(WifiAwarePublishDiscoverySession.class);
+ ArgumentCaptor<PublishDiscoverySession> publishSession = ArgumentCaptor
+ .forClass(PublishDiscoverySession.class);
// (1) connect successfully
mDut.attach(mMockLooperHandler, configRequest, mockCallback, null);
@@ -404,10 +402,10 @@
inOrder.verify(mockAwareService).publish(eq(clientId), eq(publishConfig),
sessionProxyCallback.capture());
sessionProxyCallback.getValue().onSessionStarted(sessionId);
- sessionProxyCallback.getValue().onSessionTerminated(reason);
+ sessionProxyCallback.getValue().onSessionTerminated(0);
mMockLooper.dispatchAll();
inOrder.verify(mockSessionCallback).onPublishStarted(publishSession.capture());
- inOrder.verify(mockSessionCallback).onSessionTerminated(reason);
+ inOrder.verify(mockSessionCallback).onSessionTerminated();
// (3) failure when trying to update: NOP
publishSession.getValue().updatePublish(publishConfig);
@@ -428,7 +426,7 @@
final int sessionId = 123;
final ConfigRequest configRequest = new ConfigRequest.Builder().build();
final SubscribeConfig subscribeConfig = new SubscribeConfig.Builder().build();
- final WifiAwareManager.PeerHandle peerHandle = new WifiAwareManager.PeerHandle(873);
+ final PeerHandle peerHandle = new PeerHandle(873);
final String string1 = "hey from here...";
final byte[] matchFilter = { 1, 12, 3, 31, 32 }; // bad data!
final int messageId = 2123;
@@ -442,10 +440,9 @@
.forClass(IWifiAwareEventCallback.class);
ArgumentCaptor<IWifiAwareDiscoverySessionCallback> sessionProxyCallback = ArgumentCaptor
.forClass(IWifiAwareDiscoverySessionCallback.class);
- ArgumentCaptor<WifiAwareSubscribeDiscoverySession> subscribeSession = ArgumentCaptor
- .forClass(WifiAwareSubscribeDiscoverySession.class);
- ArgumentCaptor<WifiAwareManager.PeerHandle> peerIdCaptor = ArgumentCaptor.forClass(
- WifiAwareManager.PeerHandle.class);
+ ArgumentCaptor<SubscribeDiscoverySession> subscribeSession = ArgumentCaptor
+ .forClass(SubscribeDiscoverySession.class);
+ ArgumentCaptor<PeerHandle> peerIdCaptor = ArgumentCaptor.forClass(PeerHandle.class);
// (0) connect + success
mDut.attach(mMockLooperHandler, configRequest, mockCallback, null);
@@ -516,7 +513,6 @@
final int sessionId = 123;
final ConfigRequest configRequest = new ConfigRequest.Builder().build();
final SubscribeConfig subscribeConfig = new SubscribeConfig.Builder().build();
- final int reason = WifiAwareDiscoverySessionCallback.TERMINATE_REASON_DONE;
InOrder inOrder = inOrder(mockCallback, mockSessionCallback, mockAwareService,
mockSubscribeSession);
@@ -526,8 +522,8 @@
.forClass(IWifiAwareEventCallback.class);
ArgumentCaptor<IWifiAwareDiscoverySessionCallback> sessionProxyCallback = ArgumentCaptor
.forClass(IWifiAwareDiscoverySessionCallback.class);
- ArgumentCaptor<WifiAwareSubscribeDiscoverySession> subscribeSession = ArgumentCaptor
- .forClass(WifiAwareSubscribeDiscoverySession.class);
+ ArgumentCaptor<SubscribeDiscoverySession> subscribeSession = ArgumentCaptor
+ .forClass(SubscribeDiscoverySession.class);
// (1) connect successfully
mDut.attach(mMockLooperHandler, configRequest, mockCallback, null);
@@ -543,10 +539,10 @@
inOrder.verify(mockAwareService).subscribe(eq(clientId), eq(subscribeConfig),
sessionProxyCallback.capture());
sessionProxyCallback.getValue().onSessionStarted(sessionId);
- sessionProxyCallback.getValue().onSessionTerminated(reason);
+ sessionProxyCallback.getValue().onSessionTerminated(0);
mMockLooper.dispatchAll();
inOrder.verify(mockSessionCallback).onSubscribeStarted(subscribeSession.capture());
- inOrder.verify(mockSessionCallback).onSessionTerminated(reason);
+ inOrder.verify(mockSessionCallback).onSessionTerminated();
// (3) failure when trying to update: NOP
subscribeSession.getValue().updateSubscribe(subscribeConfig);
@@ -892,8 +888,8 @@
.forClass(IWifiAwareEventCallback.class);
ArgumentCaptor<IWifiAwareDiscoverySessionCallback> sessionProxyCallback = ArgumentCaptor
.forClass(IWifiAwareDiscoverySessionCallback.class);
- ArgumentCaptor<WifiAwarePublishDiscoverySession> publishSession = ArgumentCaptor
- .forClass(WifiAwarePublishDiscoverySession.class);
+ ArgumentCaptor<PublishDiscoverySession> publishSession = ArgumentCaptor
+ .forClass(PublishDiscoverySession.class);
ArgumentCaptor<RttManager.ParcelableRttParams> rttParamCaptor = ArgumentCaptor
.forClass(RttManager.ParcelableRttParams.class);
ArgumentCaptor<RttManager.RttResult[]> rttResultsCaptor = ArgumentCaptor
@@ -953,7 +949,7 @@
public void testNetworkSpecifierWithClient() throws Exception {
final int clientId = 4565;
final int sessionId = 123;
- final WifiAwareManager.PeerHandle peerHandle = new WifiAwareManager.PeerHandle(123412);
+ final PeerHandle peerHandle = new PeerHandle(123412);
final int role = WifiAwareManager.WIFI_AWARE_DATA_PATH_ROLE_RESPONDER;
final String token = "Some arbitrary token string - can really be anything";
final ConfigRequest configRequest = new ConfigRequest.Builder().build();
@@ -967,8 +963,8 @@
.forClass(IWifiAwareEventCallback.class);
ArgumentCaptor<IWifiAwareDiscoverySessionCallback> sessionProxyCallback = ArgumentCaptor
.forClass(IWifiAwareDiscoverySessionCallback.class);
- ArgumentCaptor<WifiAwarePublishDiscoverySession> publishSession = ArgumentCaptor
- .forClass(WifiAwarePublishDiscoverySession.class);
+ ArgumentCaptor<PublishDiscoverySession> publishSession = ArgumentCaptor
+ .forClass(PublishDiscoverySession.class);
InOrder inOrder = inOrder(mockCallback, mockSessionCallback, mockAwareService,
mockPublishSession, mockRttListener);